【问题标题】:Read image from folder using php or database使用 php 或数据库从文件夹中读取图像
【发布时间】:2011-06-13 21:33:02
【问题描述】:

使用简单的php直接从文件系统读取和列出图像更好,还是将图像元信息和文件名存储在数据库中并通过mysql选择访问图像更好。两种解决方案的优缺点是什么。

【问题讨论】:

  • 需要更多信息。你在做什么?什么规模?
  • @pekka 用户将上传图片,图片存储在以用户登录 ID 命名的文件夹下。然后用户可以稍后登录以访问所有上传的图像。
  • @Johan 这不是重复的,我不是在问我是否应该将图像存储在数据库中。请阅读问题。
  • @pinkie 该帖子并不建议您将图像存储在数据库中。它只是询问从文件中读取是否比从数据库中读取更快

标签: php mysql database file


【解决方案1】:

列出文件系统上的文件可能是完成您尝试做的最简单的方法,但如果您尝试循环浏览多个文件,它会非常缓慢网络文件系统(NFS、CIFS、GlusterFS 等)上的数千个目录/文件。

在数据库中存储文件会产生更多的开销,因为您现在涉及到一个外部应用程序来存储信息。您必须记住,每次使用数据库时,您也在使用网络 I/O、身份验证机制、查询解析器等。同时,所有这些开销可能会提供比使用网络文件系统更快的响应。

总而言之 - 一切都取决于您正在使用的文件数量和底层基础架构。需要注意的两个主要方面是磁盘 I/O 和网络 I/O。

【讨论】:

  • 不是试图将图像文件存储在数据库中;他想知道是否应该在遍历文件系统时从文件系统中读取文件元数据,或者将元数据存储在数据库中是否更好。
  • 我指的是在目录中列出文件,而不是将文件本身存储在数据库中。简单地在远程服务器(NFS、GlusterFS 等)上包含超过 500 个文件的目录上运行“ls”命令可能需要很长时间。
  • 所以你说在数据库中存储文件路径可以更快地读取文件夹中的图像。假设我们有 500 个用户,每个用户访问他自己的文件夹,每个文件夹包含 100 张图像。
  • 同样,一切都取决于底层基础设施、文件数量和应用程序概念。此外,使用什么类型的文件系统和使用什么类型的数据库也会有很大的不同。事实上,查询 Redis 数据库要比列出 ext4 文件系统上的 5,000 个文件要快得多。另一方面,从 ReiserFS 列出 5,000 个文件会比从 MySQL InnoDB 数据库中更快。
  • 另外,将 文件元数据(mime 类型、文件大小、创建时间戳等)存储在数据库中然后从文件系统中读取它会更有益时间。现在,数据库不必是关系型的——它可以是一个简单的键/值存储,比如 Memcache,甚至是 PHP 的 APC。每次从文件系统读取文件信息的开销太大了。
【解决方案2】:

我会做以下事情:

  1. 将所有图片上传到一个目录
  2. 存储对与上传者的用户 ID 相关联的图像的引用
  3. 然后只需选择与该 ID 相关联的图像 URL,并根据需要输出它们。

【讨论】:

  • 不想保护图像。对图像需要做的就是阅读它们。如果我们在文件夹中有很多图像,我只是想知道直接从文件夹中读取它们是否会更快,或者我是否应该将图像文件名存储在数据库中,然后他们使用匹配的 select 语句准备图像数据库中的文件名到文件夹中的图像。
  • 您是否建议将图像存储在数据库中?
  • 不。只需将它们全部放在一个文件夹中(在文件名中使用唯一 ID 以防止重复覆盖彼此),然后将这些路径存储在数据库中以供参考。
  • 在大多数情况下,将立即从文件夹中读取所有图像。为什么将文件路径存储在数据库中然后将其更快地指向文件夹中的图像,为什么不直接从文件夹中读取图像。那是我的问题
  • 哦.. 如果您要读取整个列表,那么直接从文件系统读取肯定会更快!但是,如果您正在遍历目录以查找单个文件,那么数据库将是一个更好的解决方案。
【解决方案3】:

人们发现将文件存储在文件夹中并使用 php 解析该文件夹更容易。如果你使用数据库方法,数据库最终会变得越来越大。

我可以看到它已成为个人喜好,但我个人倾向于解析图像文件夹,而不是将其存储在数据库中。

取决于你正在做的事情的规模。

【讨论】:

    【解决方案4】:

    这就是我要做的。

    1. 将文件元数据存储在数据库中。您可以通过这种方式存储有关此图像的大量信息。
    2. 将映像文件存储在 Amazon S3 等分布式存储系统上。将路径存储在元数据中。复制是系统的一部分。并且它可以轻松与 Cloudfront CDN 集成。
    3. 通过 Amazon Cloudfront CDN 分发图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 2014-02-25
      相关资源
      最近更新 更多