【问题标题】:Optimum web folder structure for ~250,000 images约 250,000 张图像的最佳 Web 文件夹结构
【发布时间】:2010-09-23 20:20:49
【问题描述】:

我的网站将包含大约 200,000 张图片。每个图像将被存储 3 次:全尺寸、缩略图、更大的缩略图。全尺寸图像约为 50Kb 到 500Kb。

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

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

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

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

【问题讨论】:

  • 你有没有想出一个好的解决方案?我正在自己开发一个图像库,并希望使用一个好的文件夹结构。文件夹中的子文件夹数量将受到限制。在一个系统中拥有太多文件只会减慢速度。

标签: linux apache image file-management


【解决方案1】:

我会使用拆分目录结构,深度为三到四级,其想法是将所有文件平均拆分到多个目录中,主要是为了便于维护和快速访问。

怎么做?有多种选择:

  • 获取图像名称的第一个字符
  • 获取名称哈希的第一个字符
  • 自添加图片之日起 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

【讨论】:

  • 我猜图像命名空间会特别拥挤在一些常见的前缀周围(例如 IMG、DSC 等)。使用名称的哈希值而不是名称本身来分割目录可能会更好。
【解决方案2】:

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

缺点:

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

优点:

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

使用 URL 重写,你甚至可以把难看的 URL 变成

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

对用户来说更时尚、更透明:

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

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

【讨论】:

    【解决方案3】:

    使用这些类型的数字,您可能会也可能不会遇到服务器上设置的 inode 限制。这可能会有问题,具体取决于谁控制该框。

    一般来说,我会想出一些方案来将它们分成更易于管理的尺寸。即使在这么大的目录上运行ls 也需要很长时间才能对所有内容进行排序和显示。

    【讨论】:

      【解决方案4】:

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

      在实践中,例如 ext3,这不是问题,因为它在较新的系统上默认启用。您可以使用 tune2fs 找出答案(阅读手册)

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 将小缩略图存储在数据库中会有好处吗?
        猜你喜欢
        • 1970-01-01
        • 2016-06-18
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 2021-09-19
        • 2017-04-21
        相关资源
        最近更新 更多