存储大量图像数据库或文件系统

时间:2012-06-28 07:19:41

标签: java image

我正在开展一个项目,在那里我们需要存储大量的图像,大约1000万,所以这是存储图像的最佳方式。在速度和效率方面最好的方式。 这是一个基于Web的项目,因此图像检索应该很快。

  1. 数据库

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

  2. 文件系统

    制作唯一身份证并将其存储在文件夹下。

2 个答案:

答案 0 :(得分:3)

1)数据库

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

2)文件系统

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

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

另见Storing Images in DB - Yea or Nay?

答案 1 :(得分: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