分布式数据库,许多轻载节点

时间:2011-11-11 06:09:55

标签: couchdb cassandra distributed

我正在开发一个涉及CPU密集型计算的业余爱好项目。问题是令人尴尬的平行。这种计算需要在大量节点上进行(比如1000-10000)。每个节点几乎可以完全独立于其他节点完成工作。但是,整个系统需要回答系统外部的查询。每秒大约需要回复100000个这样的查询。要回答查询,系统需要一些有时在两个节点之间共享的状态。节点最多需要128MB RAM才能进行计算。

显然,我可能无法负担实际上按照上述规模构建这个系统,但我仍然对它的工程挑战感兴趣,并认为我设置了少量节点证明的概念。

我正在考虑使用像Cassandra和CouchDB这样的东西在所有节点上拥有可扩展的持久状态。如果我在每个节点上运行一个分布式数据库服务器,它的负载会非常轻,但从操作角度看,所有节点都是相同的。

现在问我的问题:

任何人都可以建议一个分布式数据库实现,它非常适合大量节点的集群,每个节点都有很少的RAM吗?

Cassandra似乎做了我想做的事,但http://wiki.apache.org/cassandra/CassandraHardware谈到为每个节点推荐至少4G RAM。

我还没有找到CouchDB内存需求的数字,但鉴于它是在Erlang中实现的,我想也许它不是那么糟糕?

无论如何,欢迎提出推荐,提示,建议和意见!

3 个答案:

答案 0 :(得分:1)

您应该可以使用cassandra执行此操作,但根据您的可靠性要求,内存数据库(如redis)可能更合适。

由于数据集非常小(100 MB的数据),因此每个节点的ram应该能够运行少于4 GB。添加cassandra开销你可能需要200MB的RAM用于memtable,另外200MB的ram用于行缓存(缓存整个数据集,关闭密钥缓存),再加上另外500MB的ram for java,这意味着你可以在每台机器上安装2演出的内存。

使用三个复制因子,您可能只需要一个大约10个节点的集群来提供您需要的读/写次数(特别是因为您的数据集太小而且所有读取都可以从行缓存)。如果你需要1000个节点的计算能力,让它们与存储数据的10个cassandra节点对话,而不是尝试将cassandra拆分为在1000个节点上运行。

答案 1 :(得分:1)

我自己没有使用过CouchDB,但据我所知,Couch将以低至256M的速度运行,大约有500K记录。猜测这意味着你的每个节点可能需要~512M,考虑到他们计算所需的额外128M。最终你应该下载并在VPS内给每个测试,但听起来像Couch将在比Cassandra更少的内存中运行。

答案 2 :(得分:0)

好的,在发布问题之后做了一些更多的阅读,然后尝试了一些事情,我决定选择MongoDB。

到目前为止,我很高兴。我的负载非常小,MongoDB使用的系统资源非常少(最多约200MB)。但是,我的数据集并不像问题中描述的那么大,我只运行1个节点,所以这并不意味着什么。

CouchDB似乎不支持开箱即用的分片,所以不是(事实证明)非常适合问题中描述的问题(我知道有用于分片的插件)。