2010-02-17 49 views
14

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

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

回答

9

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

+0

谢谢,我会检查出 –

+0

你可以跳过该播客的前13分钟:) –

8

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

要存储在数据库中:

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

要存储在文件系统中:

  • 一个文件系统是专门设计用于文件。让它做它的工作。
  • 数据库通常是应用程序中的瓶颈。无论什么样的负载,你都可以脱下它,更好。
  • 更容易在CDN上提供服务(您提到的不适用于您的情况)。

我倾向于在文件系统方面下来,因为它扩展得更好。但取决于你的项目的规模,任何选择都可能正常工作。对于NoSQL,差异更不明显。

+2

问题是关于在分布式键值存储中存储blob。文件系统不是容错或分布式的,所以没有真正的比较。 –

+2

根据文件系统的不同,它既可容错又可分布 - 请参阅MogileFS,Hadoop DFS和GlusterFS等内容。 –

+1

这些都不是文件系统。 –

3

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

对于真正的容错性,您将需要地理分散,或者您需要使用反铲挖掘机。

(Gravatars?)

+1

CDN加上一个NoSQL db作为原点是一个很好的组合。我已经成功地看到了MongoDB(和它的GridFS模块)几次完成。 –

2

如果你是一个Python环境,考虑y_serial模块:​​

在10分钟内,你将能够存储和访问您的图片(事实上,任何任意的Python对象,包括网页) - 压缩形式; NoSQL的。

3

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

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

哦,它有商业支持。