我目前有一个名为"files"的目录,其中包含来自大约100,000个成员的200,000张照片。当成员数量增加到数百万时,我预计"files"目录中的文件数量会变得非常大。这些文件的名称都是随机的,因为它们是用户命名的。我能做的唯一方法是按创建这些文件的用户名对它们进行排序。实际上,每个用户都有自己的子目录。
我正在运行的服务器是ext3文件系统的Linux。我想知道我是否应该将文件分成"文件"目录下的子目录?将文件分成许多子目录有什么好处吗?我看到一些人认为这无关紧要。
如果我确实需要分割,我正在考虑基于用户ID的前两个字符创建目录,然后使用用户ID创建第三级子目录,如:
files/0/0/00024userid/ (so all user ids started with 00 will go in files/0/0/...)
files/0/1/01auser/
files/0/2/0242myuserid/
.
files/0/a/0auser/
files/0/b/0bsomeuser/
files/0/c/0comeuser/
.
files/0/z/0zero/
files/1/0/10293832/
files/1/1/11029user/
.
files/9/z/9zl34/
files/a/0/a023user2/
..
files/z/z/zztopuser/
我将一次展示50张照片。对于服务器来说,获取文件进行静态显示的最有效(快速)方式是什么?全部来自同一个目录还是来自50个不同的子目录?任何评论或想法都是赞赏的。谢谢。
根据文件系统的不同,一个目录可以容纳的文件数量可能有上限。这一点,以及在一个目录中存储许多文件对性能的影响,在另一个问题中也有详细的讨论。
还请记住,您的文件名可能不是真正随机的-相当多可能以"DSC","IMG"等开头。同样,不同的用户(或者实际上是同一个用户)可能会尝试用相同的名称存储两个图像,这就需要对文件名进行一定程度的抽象。