存储 – 在文件系统中存储一百万个图像

我有一个项目,将生成大量的图像.大约1,000,000开始.它们不是大图像,所以我会在开始时将它们全部存储在一台机器上.

您如何有效地存储这些图像? (目前是NTFS文件系统)

我正在考虑一个命名方案……首先,所有图像都将从1开始增加名称
我希望这可以帮助我在以后根据需要对它们进行排序,并将它们放在不同的文件夹中.

什么是更好的命名方案:

a/b/c/0 ... z/z/z/999

要么

a/b/c/000 ... z/z/z/999

对此有何想法?

最佳答案
我建议使用常规文件系统而不是数据库.使用文件系统比数据库更容易,您可以使用普通工具来访问文件,文件系统是为这种用法而设计的.NTFS应该可以很好地用作存储系统.

不要将实际路径存储到数据库.最好将图像的序列号存储到数据库,并具有可以从序列号生成路径的功能.例如:

 File path = generatePathFromSequenceNumber(sequenceNumber);

如果您需要更改目录结构,则更容易处理.也许你需要将图像移动到不同的位置,也许你的空间不足,你开始将一些图像存储在磁盘A上,一些图像存储在磁盘B上等.更改一个功能比更改数据库中的路径更容易.

我会使用这种算法来生成目录结构:

>首先用前导零填充序列号,直到你有至少12位数的字符串.这是您的文件的名称.您可能想要添加后缀:

> 12345 – > 000000012345.jpg

>然后将字符串拆分为2或3个字符块,其中每个块表示目录级别.拥有固定数量的目录级别(例如3):

> 000000012345 – > 000/000/012

>将文件存储在生成的目录下:

>因此,序列号为123的文件的完整路径和文件文件名为000 / 000/012 / 00000000012345.jpg
>对于序列号为12345678901234的文件,路径为123/456/789/12345678901234.jpg

关于目录结构和文件存储需要考虑的一些事项:

>上面的算法为您提供了一个系统,其中每个叶子目录最多有1000个文件(如果您的文件总数少于1 000 000 000 000个)
>目录可以包含多少个文件和子目录,例如,ext3 files system on Linux每个目录的子目录限制为31998个.
>如果每个目录有大量文件(> 1000),普通工具(WinZip,Windows资源管理器,命令行,bash shell等)可能无法正常工作
>目录结构本身将占用一些磁盘空间,因此您不需要太多目录.
>使用上述结构,只要查看文件名,就可以随时找到图像文件的正确路径,如果您碰巧弄乱了目录结构.
>如果需要从多台计算机访问文件,请考虑通过网络文件系统共享文件.
>如果删除大量文件,上述目录结构将不起作用.它在目录结构中留下了“漏洞”.但由于你没有删除任何文件,它应该没问题.

转载注明原文:存储 – 在文件系统中存储一百万个图像 - 代码日志