php - 您如何在服务器上存储数百万张图片?

标签 php file filesystems lamp

<分区>

Possible Duplicate:
Storing a large number of images

你好,

我希望能够使用 PHP 在我的 LAMP 服务器上扩展到数百万个用户个人资料图片。

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

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

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

有什么想法/意见吗?

谢谢!

最佳答案

取决于您的用户的组织方式。

  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

关于php - 您如何在服务器上存储数百万张图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343249/

相关文章:

php - DateInterval 中的天数和 "d"属性有什么区别

php - 为什么 @before 函数

file - Scala快速文本文件读取并上传到内存

php - 在 null 上调用成员函数 move()

java - 在 Java 中将抽象文件转换为字符串

C++ - 如何获取特定用户的桌面路径

unix - 理解 inode 的概念

ios - 如何在删除 IOS 应用程序时删除文件?

api - HDFS 中 hflush 和 hsync api 的区别

php - 查询数据库时出错