16

我们的应用程序将通过 HTTP 提供大量缩略图大小的小图像(大小约为 6-12KB)。我被要求调查使用 NoSQL 数据存储是否是一种可行的数据存储解决方案。理想情况下,我们希望我们的数据存储是可容错的和分布式的。

将 blob 存储在 NoSQL 存储中是个好主意吗?哪一个更适合呢?此外,NoSQL 是否是解决我们问题的好方法,还是我们会更好地将图像存储在文件系统中并直接从 Web 服务器提供它们(顺便说一句,CDN 目前不是我们的选择)?

4

5 回答 5

12

是否将图像存储在数据库或文件系统中有时是那些“圣战”类型的辩论之一;每一方都觉得他们的做事方式是正确的。一般来说:

要存储在数据库中:

  • 更容易在一个地方一次管理备份/复制所有内容。
  • 有助于您的数据一致性和完整性。您可以将 BLOB 字段设置为不允许 NULL,但您将无法阻止删除外部文件。(虽然这不适用于 NoSQL,因为没有传统的约束)。

要存储在文件系统上:

  • 文件系统旨在为文件提供服务。让它完成它的工作。
  • DB 通常是您在应用程序中的瓶颈。无论你能卸下什么负载,都更好。
  • 更容易在 CDN 上提供服务(您提到的不适用于您的情况)。

我倾向于支持文件系统,因为它的扩展性要好得多。但根据您项目的规模,任何一种选择都可以正常工作。使用 NoSQL,差异就更不明显了。

于 2010-02-17T04:04:41.447 回答
11

Mongo DB应该适合你。我还没有将它用于 blob,但这里有一个很好的 FLOSS Weekly播客采访,来自 Mongo DB 团队的 Michael Dirolf,他在其中解决了这个用例。

于 2010-02-17T04:02:37.373 回答
3

那么 CDN 将是显而易见的选择。既然已经出局了,我会说您最好的容错和负载平衡选择是您自己的私有数据中心(无论这对您意味着什么)在 2 个或更多负载平衡器(如 F5)之后。这将是您最简单的管理系统,并且您可以在硬件预算允许的情况下获得尽可能多的容错能力。您不需要任何新的软件专业知识,只需 XCOPY。

要获得真正的容错能力,您将需要地理分散,否则您会受到任何有反铲的人的影响。

(墓碑?)

于 2010-02-17T04:16:34.607 回答
3

我正在为个人项目寻找类似的解决方案,并遇到了Riak,对我来说,这似乎是解决这个问题的一个了不起的解决方案。基本上,它将每个文件的指定数量的副本分发到网络中的服务器。它的设计使得服务器进出没什么大不了的。离开的服务器上的所有副本都分布在其他副本中。

通过正确的配置,Riak 可以处理整个数据中心的崩溃。

哦,它有商业支持。

于 2011-08-10T02:23:04.890 回答
2

如果您在 Python 环境中,请考虑 y_serial 模块:http: //yserial.sourceforge.net/

在 10 分钟内,您将能够以压缩形式存储和访问您的图像(实际上,任何 Python 对象,包括网页);无 SQL。

于 2010-03-20T19:52:40.480 回答