Php 存储50万张图像的最有效方式是什么?

Php 存储50万张图像的最有效方式是什么?,php,optimization,Php,Optimization,我正在为一个网站编写一个基本图库,该网站在任何给定时间都有大约40000名在线用户。用户将能够创建画廊和上传图像 我的问题是,我应该为每个图库创建一个单独的文件夹并将图像放入其中,还是创建一个单独的文件夹并将所有图像放入其中,但将每个图像的图库id保留在数据库中?或者,我应该为每个用户创建一个目录,然后在其中为库名创建另一个目录吗 你会怎么做 另外,我需要它尽可能轻。我会按id存储它们 我会将它们分成文件夹(取决于文件系统,有些文件在一个文件夹中有很多文件时性能不好),另外,如果您必须手动查看某

我正在为一个网站编写一个基本图库,该网站在任何给定时间都有大约40000名在线用户。用户将能够创建画廊和上传图像

我的问题是,我应该为每个图库创建一个单独的文件夹并将图像放入其中,还是创建一个单独的文件夹并将所有图像放入其中,但将每个图像的图库id保留在数据库中?或者,我应该为每个用户创建一个目录,然后在其中为库名创建另一个目录吗

你会怎么做

另外,我需要它尽可能轻。

我会按id存储它们 我会将它们分成文件夹(取决于文件系统,有些文件在一个文件夹中有很多文件时性能不好),另外,如果您必须手动查看某些内容,则更容易找到它们

为每个文件指定一个id,然后使用文件名的前3位数字将其拆分为文件夹。(您可以在100000或零填充id时启动自动递增计数器,因此至少有3个级别

/photos/1/0/3/103456.jpg
/photos/9/4/1/941000.jpg
/photos/0/0/0/000001.jpg
您可以将照片与用户/gallery/etc的关系存储在数据库中

或者如果你想看看大男孩是怎么做的


通常,web服务器不希望您在一个文件夹中拥有超过几千张图像(我最近不得不处理70000张图像,导致读取和排序速度非常慢,请相信我)因此,如果你认为你将拥有数千张图片,那么肯定不会有一个文件夹。我建议最好的解决方案是将amazon的S3连接到他们的CDN CloudFront,但如果这不现实,你仍然可以在自己的服务器上做几件事

如果你知道一个图库可以有多大,并且知道将创建多少个图库,那么就按照你的建议为每个图库创建一个单独的文件夹。(这是我现在针对你的具体问题提出的建议)

通过散列函数输入图像名称,然后使用散列的前1-3个字符命名要将图像放入的文件夹。散列确保图像在文件夹中大致相等,并且您可以决定需要多少文件夹


不管怎样,在实际路径中有关于哪个图库和图像id的信息,无论是在代码中还是在任何时候,只要有人需要在服务器上查找bug,都可能对您有所帮助。我可能会根据图库id命名文件夹,只需确保没有图库中的图像超过几千张即可。

I像这样的矿:

images/userid/photoid

这样,如果我以后需要检查任何东西,我可以快速隔离用户映像。这似乎比将它们全部放在一个中心目录中更有条理。

Linux。(Cent OS)我不知道文件系统,因为我没有访问他们的服务器。我会考虑使用Amazon S3和他们的API,不存储文件夹,只使用数据库中的关系表来跟踪它们。如果你在任何时候认真查看40个活跃用户,你的更大的问题就是简单的带宽和存储空间。你应该是。考虑将图像存储在CDN上,在这种情况下,文件夹结构不再是您需要担心的问题。+1这是一个很好的答案,但我建议使用哈希函数,如我在回答中所说,以确保ID均匀分布,并且不会在一个文件夹建议中包含太多文件这允许在将来进行分区。例如,第一个数字可能是它所在的服务器,而不是目录。我管理一个有1000多万张图像的站点,我们使用类似的设置。非常感谢,勾选您的答复作为答案。