在我的网络服务器上,我有两个文件夹showcase
和thumbnail
,分别用于存储图片及其缩略图。数据库获取这些图像以在页面上显示它们。
showcase
表格中的表格列为s_image
,其中存储了/showcase/urlcode.jpg
之类的内容。
我听说在文件夹中大约10-20k的文件后,它开始变慢。那么我应该在填充后创建第二个文件夹showcase2
吗?是否有某种自动创作可以为我做到这一点?
感谢您的意见。
答案 0 :(得分:0)
当您将数万个文件放在一个目录中时,您使用的文件系统很重要。 Linux上的extfs4
比Windows上的NTFS更好。
Windows具有8.3文件名的兼容模式(旧的DOS文件名标准)。这会导致每个文件名长于abcdefgh.ext
,为其创建一个别名abcd~123.ext
。这很慢,当单个目录中有大量文件时,非常慢。您可以关闭这种古老的兼容性行为。看这里。 https://support.microsoft.com/en-us/kb/121007。如果您关闭它,它可以快速解决即时性能问题。
但是,一个目录中的20,000个文件是一个很大的数字。在任何类型的文件系统上,最好的选择是根据更改的内容自动在文件系统中创建子目录。一种策略是基于年/月创建子目录,例如
/showcase/2015/08/image1.jpg (for images uploaded this month)
/showcase/2015/09/image7.jpg (for images next month)
将这些较长的文件名存储在表格的s_image
列中显然没有问题。
或者,如果您有一些系统来命名图像,请利用它来创建子目录。例如,如果您的图像被命名为
cat0001.jpg
cat0002.jpb
...
cat0456.jpg
...
cat0987.jpg
您可以根据名称的前五个字母
创建子目录 /showcase/cat00/cat0001.jpg
/showcase/cat00/cat0002.jpb
...
/showcase/cat04/cat0456.jpg
...
/showcase/cat09/cat0987.jpg
如果你这样做,最好保持图像名称不变而不是缩短它们(例如,不要这样做/showcase/cat09/87.jpg
)因为如果你必须按名称搜索特定的图像你想要那里的全名。
据我所知,文件系统中没有自动为您执行此操作。但是你的计划并不难。