我们的应用程序将通过 HTTP 提供大量缩略图大小的小图像(大小约为 6-12KB)。我被要求调查使用 NoSQL 数据存储是否是一种可行的数据存储解决方案。理想情况下,我们希望我们的数据存储是可容错的和分布式的。
将 blob 存储在 NoSQL 存储中是个好主意吗?哪一个更适合呢?此外,NoSQL 是否是解决我们问题的好方法,还是我们会更好地将图像存储在文件系统中并直接从 Web 服务器提供它们(顺便说一句,CDN 目前不是我们的选择)?
是否将图像存储在数据库或文件系统中有时是那些“圣战”类型的辩论之一;每一方都觉得他们的做事方式是正确的。一般来说:
要存储在数据库中:
要存储在文件系统上:
我倾向于支持文件系统,因为它的扩展性要好得多。但根据您项目的规模,任何一种选择都可以正常工作。使用 NoSQL,差异就更不明显了。
那么 CDN 将是显而易见的选择。既然已经出局了,我会说您最好的容错和负载平衡选择是您自己的私有数据中心(无论这对您意味着什么)在 2 个或更多负载平衡器(如 F5)之后。这将是您最简单的管理系统,并且您可以在硬件预算允许的情况下获得尽可能多的容错能力。您不需要任何新的软件专业知识,只需 XCOPY。
要获得真正的容错能力,您将需要地理分散,否则您会受到任何有反铲的人的影响。
(墓碑?)
我正在为个人项目寻找类似的解决方案,并遇到了Riak,对我来说,这似乎是解决这个问题的一个了不起的解决方案。基本上,它将每个文件的指定数量的副本分发到网络中的服务器。它的设计使得服务器进出没什么大不了的。离开的服务器上的所有副本都分布在其他副本中。
通过正确的配置,Riak 可以处理整个数据中心的崩溃。
哦,它有商业支持。
如果您在 Python 环境中,请考虑 y_serial 模块:http: //yserial.sourceforge.net/
在 10 分钟内,您将能够以压缩形式存储和访问您的图像(实际上,任何 Python 对象,包括网页);无 SQL。