在数据库中存储与数据相关的二进制文件的最佳位置是什么?你应该:
- 用blob存储在数据库中
- 使用数据库中的链接存储在文件系统上
- 存储在文件系统中,但重命名为内容的哈希并将哈希存储在数据库中
- 我没想到的事
(1)的优点(尤其是)保留了事务的原子性。代价是您可能会大大增加存储(以及相关的流/备份)要求
(3)的目标是在某种程度上保留原子性-如果您可以强制执行写入操作,则不允许更改或删除文件,并且始终具有正确的哈希作为文件名。想法是在允许插入/更新引用哈希之前将文件写入文件系统-如果此事务在文件系统写入之后但在数据库DML之前失败,则可以,因为文件系统正在“伪造”为所有存储库可能的文件和哈希-里面是否有没有指向的文件都没关系(如果小心,可以定期清理它们)
编辑:
看起来有些RDBMS以各自的方式涵盖了这一点-我很想知道其他人是如何做到的-特别是在针对postgres的解决方案中