使用自定义二进制文件的NoSql?
最开始,我只需要处理1.5[TB]的数据。因为我只需要快速的读写(不需要用SQL),所以我自己设计了一种简单的二进制文件格式(用python
实现),轻松愉快地在一台机器上保存和处理我的数据。当然,为了备份,我又增加了两台机器,作为数据的镜像(使用rsync
)。
现在,我的需求在不断增长,需要建立一个可以扩展到20[TB](甚至更多)数据的解决方案。我很乐意继续使用我的文件格式来存储数据。它快速、可靠,能满足我的所有需求。
我担心的是数据的复制和一致性等问题(显然,数据必须分布在网络中——不能把所有数据
都存储在一台机器
上)。
有没有什么现成的
解决方案(基于Linux / python
)可以让我继续使用我的文件格式进行存储,同时处理NoSql
解决方案通常提供的其他功能?(比如数据一致性、可用性和简单的复制)?
基本上,我想确保我的二进制文件在整个网络中是一致的。我正在使用一个由60台双核机器组成的网络(每台有1GB RAM
和1.5TB磁盘
)。
2 个回答
也许关于为Tarsnap开发的Kivaloo系统的一些评论会帮助你决定什么是最合适的:http://www.daemonology.net/blog/2011-03-28-kivaloo-data-store.html
如果不了解你的应用程序(比如记录的大小/类型、读取/写入的频率)或自定义格式,就很难说得更多。
方法:使用Disco项目在Python中进行分布式Map Reduce
这似乎是解决你问题的一个好方法。我之前也用过Disco项目来处理类似的问题。
你可以把文件分散到多个机器(进程)上,然后实现适合你逻辑的map和reduce函数。
Disco项目的教程详细描述了如何为你的问题实现解决方案。你会惊讶于你需要写的代码有多少,而且你绝对可以保持二进制文件的格式。
另一个类似的选择是使用亚马逊的弹性MapReduce。