5

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

  1. 数据库

    将图像作为base64存储在数据库中。
    我们正在开发一个 nosql 数据库。

  2. 文件系统

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

4

2 回答 2

3

1)数据库

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

2) 文件系统

  • 将图像存储在唯一的 id 上并将其存储到硬盘将是一个更好的选择。
  • Web 服务器等东西不需要特殊的编码或处理来访问文件系统中的图像

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

另请参阅在 DB 中存储图像 - 是还是不是?

于 2012-06-28T07:24:26.060 回答
1

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

文件系统

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

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

有几个问题:

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

数据库

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

如果您有 SQL 2008 数据库,请查看这篇 SO 文章中的 FileStream - 这提供了两全其美的效果。

请参阅在 DB 中存储图像 - 是还是不是?

编辑

参见 Nosql:

  1. 将数以亿计的小图像存储到键/值存储或其他 nosql 数据库是个好主意吗?
  2. 在 NoSQL 存储中存储图像
于 2012-06-28T07:23:30.707 回答