在NoSQL商店中存储图像

时间:2010-02-17 03:49:05

标签: image nosql

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

在NoSQL商店中存储blob是一个好主意,哪一个对它有好处?此外,NoSQL是我们问题的一个很好的解决方案,还是我们可以更好地将图像存储在文件系统中并直接从Web服务器提供服务(另外,CDN目前不是我们的选择)?

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:9)

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

要存储在DB中:

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

存储在文件系统上:

  • 文件系统旨在提供文件。让它做它的工作。
  • 数据库通常是应用程序中的瓶颈。无论你有什么负担,它都会越好。
  • 更容易在CDN上投放(您提到的不适用于您的情况)。

我倾向于站在文件系统的一边,因为它的扩展性要好得多。但是根据项目的大小,任何一种选择都可能正常。使用NoSQL,差异甚至更不明显。

答案 2 :(得分:3)

CDN将是明显的选择。从那以后,我会说你最好的选择是容错和负载均衡是你自己的私人数据中心(无论对你来说意味着什么)在2个或更多负载平衡器之后,比如F5。这将是您最简单的管理系统,您可以获得与硬件预​​算允许的一样多的容错能力。您不需要任何新的软件专业知识,只需要XCOPY。

对于真正的容错,你需要地理分散,否则你就会受到反铲的任何人的影响。

(Gravatars?)

答案 3 :(得分:3)

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

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

哦,它有商业支持。

答案 4 :(得分:2)

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

在不到10分钟的时间内,您将能够以压缩形式存储和访问您的图像(实际上是任意Python对象,包括网页); NoSQL的。