【问题标题】:Storing large number of images database or filesystem存储大量图像数据库或文件系统
【发布时间】:2012-06-29 16:28:57
【问题描述】:

我正在做一个项目,我们需要存储大量图像,比如大约 1000 万张,所以这是存储图像的最佳方式。就速度和效率而言,这是最好的方式。 这是一个基于网络的项目,所以图像检索应该很快。

  1. 数据库

    在数据库中以 base64 格式存储图像。
    我们正在开发一个 nosql 数据库。

  2. 文件系统

    创建一个唯一的 id 并将其存储在一个文件夹下。

【问题讨论】:

标签: java image


【解决方案1】:

有一个权衡 - 这将取决于您的具体情况和需求。每种方法的好处包括

文件系统

  • 性能,尤其是缓存和 I/O

  • 最好将文件路径存储在数据库中。

有几个问题:

  • 数据库存储通常比文件系统存储更昂贵
  • 您可以使用标准的现成产品超级加速文件系统访问
    • 例如,许多 Web 服务器使用操作系统的 sendfile() 系统调用将文件直接从文件系统异步发送到网络接口。存储在数据库中的图像不会从这种优化中受益。
  • Web 服务器等无需特殊编码或处理即可访问文件系统中的图像
  • 在图像和元数据之间的事务完整性很重要的情况下,数据库胜出。
    • 管理数据库元数据和文件系统数据之间的完整性更加复杂
    • 很难(在 Web 应用程序的上下文中)保证数据已刷新到文件系统上的磁盘

数据库

  • 更容易横向扩展到多个 Web 服务器
  • 更易于管理(备份、安全等)

如果您有 SQL 2008 数据库,请查看 FileStream in this SO 文章 - 这是两全其美的。

Storing Images in DB - Yea or Nay?

编辑

查看 Nosql:

  1. Is it a good idea to store hundreds of millions small images to a key/value store or other nosql database?
  2. Storing images in NoSQL stores

【讨论】:

  • 不涉及关系数据库。 Ramesh 表示“我们正在开发一个 nosql 数据库
【解决方案2】:

1)数据库

  • 像使用流一样处理图像需要大量代码
  • 数据库服务器负载较重
  • 数据库存储通常比文件系统存储更昂贵
  • 在图像和元数据之间的事务完整性很重要的情况下,数据库胜出。
  • 管理数据库元数据和文件系统数据之间的完整性更加复杂
  • 很难(在 Web 应用程序的上下文中)保证数据已刷新到文件系统上的磁盘

2) 文件系统

  • 将图像存储在唯一 ID 上并将其存储到硬盘将是更好的选择。
  • Web 服务器等无需特殊编码或处理即可访问文件系统中的图像

参考http://perspectives.mvdirona.com/2008/06/30/FacebookNeedleInAHaystackEfficientStorageOfBillionsOfPhotos.aspx

另见Storing Images in DB - Yea or Nay?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2011-05-31
    • 1970-01-01
    • 2014-05-04
    • 2012-06-26
    • 2011-01-04
    • 2021-05-31
    相关资源
    最近更新 更多