如何存储和提供40亿张图片?

时间:2013-03-20 14:38:06

标签: mongodb cassandra cloud

我想建立自己的网页拇指镜头云服务供我私人使用。 我计划有更多的4,000,000,000张小图片(10KB) 我不想使用像亚马逊S3这样的外部服务,我想建立自己的云。

您将如何存储并保持其可扩展性? 例如,在cassandra分布式数据库或GlusterFS文件系统上......

您将如何通过HTTP有效地提供服务? 例如,使用nginx负载均衡器来读取cassandra数据库的许多http服务器......

5 个答案:

答案 0 :(得分:2)

你的问题很模糊,研究和形成不好,但我会在这里提出一些建议。

  

拇指镜头云服务供我私人使用。

如果这是出于个人需要,我强烈建议不要使用数据库,而是高IOPs SSD支持的集群(服务器集)上的文件系统专门调整为高网络利用率和IO读取。 / p>

注意:这将迅速扩展为比S3等外部服务更昂贵。

  

您如何安全地存储(需要40TB)?

这有点宽泛,缺乏任何真实的研究声音,但你可以从网络应用程序端保护它并将规则放入图像服务器防火墙,声明只允许Web应用程序访问图像。然后,在您的网络应用程序中,您将拥有保护图像使用的规则。

  

您将如何通过HTTP有效地提供服务?

通过缓存机制,在服务器上(在Web应用程序中)以Varnish或其他形式,也在浏览器中添加无限到期时间(可能)。

当然,“最佳”缓存机制取决于Web服务器和用法,即Nginx或Apache。

对于模糊且过于宽泛的问题,这是一个基本答案。我强烈建议你做一些研究,并通过你想要使用的服务器查看图像服务。

答案 1 :(得分:1)

嗯,最大的问题是找到这种容量的存储空间,但即使你发现,我也不认为任何常用的数据库都可以处理这么多的数据,所以你需要写一些自定义的存储/阅读解决方案。 无论如何,如果你能描述你的原始问题,可能还有其他一些真正的解决方案,而不需要存储这么多的图像,因为处理40亿个图像是不切实际的。

答案 2 :(得分:0)

我认为你应该使用blob(Binary Large OBjectS)。您是否考虑过Google App Engine的blobstore?如果您不熟悉BLOB,那么开始使用云计算和图像服务是一种便宜的方式。您可以使用python,java或google的新编译语言编程blobhandling。如果您使用GAE,您还可以使用应用程序执行所有操作,而不必担心硬盘驱动器或操作系统。如果您想创建自己的堆栈,您应该查看服务提供商支持哪种群集。

答案 3 :(得分:0)

听起来这可能是有趣的: http://docs.basho.com/riakcs/latest/

它刚刚开源,并且专门用于构建您自己的S3

答案 4 :(得分:0)

OpenStack Swift是一个对象存储项目,Rackspace和Wikimedia使用它来存储数百万张图像。

http://docs.openstack.org/developer/swift/