适用于约250,000张图像的最佳Web文件夹结构

时间:2008-11-24 21:03:09

标签: linux apache image file-management

作为我网站的一部分,我将有大约200,000张图片。每个图像将被存储3次:全尺寸,缩略图,更大的缩略图。全尺寸图像大约为50K到500Kb。

普通技术:VPS上的Linux,Apache,MySQL,PHP。

通过浏览器快速检索和显示这些文件的最佳方式是什么?

我应该将所有内容存储在一个文件夹中吗? 我应该将全尺寸图像存储在1个文件夹中,将缩略图存储在另一个文件夹中吗? 我应该将图像存储在1000的文件夹中,并保留图像所在文件夹的索引吗?

感谢您的任何建议。 阿尔伯特。

5 个答案:

答案 0 :(得分:2)

我使用了三层或四层深度的拆分目录结构,这个想法是将所有文件均匀地分布在许多目录中,以便主要进行维护和快速访问。

怎么做?有各种选择:

  • 拍摄图像名称的第一个字符
  • 取名字哈希的第一个字符
  • 记录自添加图片之日起1970年以来的最后秒数
  • 将数据中id的最后一个字符(如果存在)

我们假设我们有IMG8993_full.jpg,IMG8993_thumb.jpg,IMG8993_smallthumb.jpg

然后我们可以,例如:

/images/I/M/G/8/IMG8993:
IMG8993_full.jpg
IMG8993_thumb.jpg
IMG8993_smallthumb.jpg

答案 1 :(得分:1)

除非您的用户要使用包含图像目录列表的打开文件夹,否则我认为文件夹结构不会显着增加或降低用户的检索速度。正如其他人所说,确保打开索引。但是,如果我是你,我会考虑编写(或复制和粘贴)动态提供图像的服务,而不是直接将它们存储在您的Web文件结构中。考虑在PHP中使用LibGD - 它应该预装在大多数LAMP服务器上。

缺点:

  • 通过服务提供图像比提供直接链接要慢一些
  • 如果使用后端图像存储(例如数据库),则可能会崩溃并导致所有图像暂时不可用

优点:

  • 您可以通过动态调整图像大小来缩小存储空间,并使维护更容易
  • 通常,处理器速度比存储空间便宜

使用网址重写,您甚至可以转换丑陋的网址,例如

/imageServer.php?userID=12345imageId=67890&size=full

为用户提供更时尚,更透明的内容:

/jeremyZX/images/myPhoto.jpg
/jeremyZX/images/tn/myPhoto.jpg

这将提供整个图像目录结构的外观,而它们实际上以您想要的任何后端格式存储。

答案 2 :(得分:0)

取决于您如何索引它们,以及如何检索它们。

没有什么特别反对将它们全部存储在一个文件夹中,但它变得难以管理。如果您按文件名存储它们,并且文件名合理地正常分发,您可能希望将子文件夹分隔名称的第一个字母等。如果您按添加日期编制索引,您可能希望将它们隔离开来

据我所知,没有“更快”或“更慢”的方式存储图像以供浏览器检索。

答案 3 :(得分:0)

无论你做什么,确保在文件系统上启用目录索引(你应该选择一个支持它的文件系统 - 但它们都有)

在实践中,比方说,ext3,这不是问题,因为它在新系统上默认启用。您可以通过使用tune2fs(阅读该人)

找到答案

答案 4 :(得分:0)

使用这些类型的数字,您可能会或可能不会遇到服务器上设置的inode限制。根据谁控制那个盒子,这可能会有问题。

一般来说,我会想出一些方案将它们分成更易于管理的大小。甚至在一个大小需要很长时间才能排序并显示所有内容的目录上运行ls