在Windows文件夹结构中存储数千个图像的最佳方法是什么?

我们在这样一个windows文件夹结构中有成千上万的jpg图像,但是它很难与它们以快捷的方式进行交互和工作(列表需要时间,复制需要时间等)。 结构如下:

images/ 1/ 10001/ 10001-a.jpg 10001-b.jpg ... 10001-j.jpg (10 images in each XXXXX folder) 10002/ 10003/ ... 19999/ 2/ 20001/ 20002/ 20003/ ... 29999/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ 

现在,浏览这些图像有点慢,因为有appr。 每个X文件夹中的10 000个文件夹并列出这些文件只是需要时间。

有更好的方式来组织更less的子文件夹/项目的图像? 会改变这个结构有什么作用?

 images/ 1/ 0/ 0/ 0/ 0/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ 10000/ (image folder, same as path) 10000-a.jpg 10000-b.jpg ... 10000-j.jpg (10 images in each image folder) 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ 

因此,定位图像48617-c.jpg将等于path4/8/6/1/7/48617/48617-c.jpg。

具有完整path号48617的单独文件夹的原因是为了简化整个10幅图像批量的复制(通过复制整个文件夹)。

现在…没有文件夹将有超过11个直接的子文件夹,但将有大量额外的单个数字文件夹分离的目的。 这种设置会加快浏览和交互,有多个用户添加/复制/删除/等图像?

Windows有点特别,当涉及文件夹的文件夹的文件夹。 尤其是图像,因为Windows资源pipe理器将其视为特殊的。 也就是说,有一些指导方针可以防止事态的失控:

  • 如果您打算从Windows资源pipe理器出于某种原因浏览目录结构,请将其保存在目录(文件和子目录)中的10,000个条目下。
  • 如果你只是用cli工具或代码进行交互,10K的限制就更加灵活了。
  • 不要创build太多的子目录,您创build的每个目录都是副本在复制时必须执行的另一个离散操作。
    • 如果每个文件都创build了N个目录,则由该文件创build的文件系统对象的数量将为1 + N,这样就可以线性缩放您的拷贝时间。
    • 一个简短的指数树(即三层目录,每个目录有256个子目录)在达到10K /每个目录的限制之前可以惊人地扩展。
  • 如果您使用代码访问它,请直接打开,而不是在打开之前parsing目录列表。 在很多情况下,失败的fopen()后跟目录扫描的速度比dir-scan快,后面跟着保证的fopen()。

注意事项:

  • 文件计数是不可改变的,但目录计数取决于你。 这两个数量的和会影响复制操作的速度。
  • 如果可能,尽量不要使用Windows资源pipe理器浏览,除非必须。 它不能很好地处理大目录,你可以做的事情也不多。

目录复杂性如何影响i节点 ,我的答案中有很多关于math的很好的信息?

这就是说,不同的文件系统以各种方式处理目录中的大量文件。 有一些是好的,有一万个入口,其他人扣。 作为一个快速发明的经验法则,如果你有devise控制,1,000可能是一个很好的目标上限。 目录中的条目通常作为某种列表存储,并由阅读应用程序对其顺​​序进行sorting。 例如,Unix世界中的ls从目录顺序读入内存,然后按字母顺序打印出来。

看看另一个问题的math。 还要考虑一下sysadmin1338关于Explorer的行为有什么不同。 资源pipe理器将创build任何它认为是图像的缩略图,然后阅读缩略图以显示它们。 这是很多磁盘IO来看看一个充满文件的目录。

根据您是否拥有开发此类系统的资源,这听起来像是使用文件FILESTREAM存储的SQL Server数据库的良好候选者。 这样,您就可以将目录的组织保存到SQL Server中,而您只需要担心数据本身的pipe理方式。 您可以使用SQL Express,因为在计算数据库大小时不考虑FILESTREAM数据。