如何在服务器上存储数百万张图像?

时间:2011-03-17 18:05:04

标签: php file filesystems lamp

  

可能重复:
  Storing a large number of images

您好,

我希望能够使用PHP在我的LAMP服务器上扩展到数百万个用户配置文件图片。

我目前将所有图片存储在一个文件夹中,这是一个很大的禁忌,所以我想将它们分散到许多文件夹和子文件夹中(例如aa / bb / etc ...)。

最好和最有效的方法是什么,特别是如果我不想调用数据库来获取该用户的个人资料照片的文件名/路径?

我正在考虑使用用户名的哈希值并利用该哈希值的前4个字母生成/定位该用户的个人资料图片的路径,这样我就不必再从数据库中访问任何内容了因为我将始终拥有用户的用户名。因此,例如,如果用户的用户名哈希的前4个字符是“aabb”,我会将该用户的个人资料pic存储在aa / bb / username / profile.jpg下,这理论上应该允许我扩展到数百万用户必须向DB添加任何内容,同时在aa / bb /文件夹结构中均匀地分布所有照片。

任何想法/输入?

谢谢!

1 个答案:

答案 0 :(得分:1)

取决于用户的组织方式。

  1. 我猜他们都有一个唯一的ID。如果您知道,可以存储0xx/007.png8xx/824.png547xx/54723.png等文件。这会将主文件夹中的项目数减少100倍,每个文件夹最多包含100个项目。

  2. 如果您只允许在您的用户名中选择字符,则可以直接使用它,但我通常不建议这样做。如果你不知道你在做什么,它可能会变得危险。文件名如ma/master_of_desaster.pngki/king_cool.pngso/some_other_infantile_name.png

  3. 使用哈希是一个好主意。如果它不是关于安全性(似乎不是),您可以通过使用短校验和算法而不是复杂但安全的哈希算法来减少CPU开销。想想CRC32。文件名如[CRC32sum]/[USER_ID].png