组织大量二进制文件的最佳做法是什么?

时间:2014-02-05 06:51:55

标签: database performance sqlite filesystems blob

我正在尝试开发独立(桌面)应用。 我想要实现的目标是为大型二进制数据创建有效的存储。只要我不想将它保存在数据库中,我会更好地将其用于存储元数据,在文件系统中保存二进制对象有哪些选择?

我可以想象文件目录中包含一组以其内容的哈希命名的文件,例如md5。显而易见的优点是,我拥有数据库中的所有“轻量级”元数据和哈希值,减少了它的负载,并且还可以在需要时轻松加载知道哈希的二进制文件。

但我觉得这个解决方案可能有一些我现在看不到的警告,因为很多程序都使用了一些非显而易见的dir结构,类似于Firefox的缓存或git的存储。为什么要包含复杂的目录树?如何命名这种类型的存储以及它的优缺点是什么?

编辑:我推断不要在db中存储blob,因为我使用sqlite,并且随着数据量的不断增加,它会显着变慢。

1 个答案:

答案 0 :(得分:0)

某些文件系统无法处理包含太多文件的well目录。正因为如此,引入了一种解决方法并变得普遍。

您可以使用3级目录嵌套,而不是将所有文件存储在同一目录中。根目录(文件存储的根目录,当然不是系统根目录)只包含其他目录,每个目录包含其他目录,每个目录包含其他目录。并且您将文件存储在这些叶子目录中。

如果在第一级你有100个目录,那么在第二级你有10k(100 * 100)和第三级 - 1kk(100 * 100 * 100)。

例如,您有一个文件名“a05c04c9c71c2dbd7f11ca175a1d289c70d684ac.dat”。文件名的前六个字符定义文件夹名称。所以你应该将它存储到

/a0/5c/04/a05c04c9c71c2dbd7f11ca175a1d289c70d684ac.dat

或者,您可以随机生成目录名称:

/rand(100)/rand(100)/rand(100)/a05c04c9c71c2dbd7f11ca175a1d289c70d684ac.dat