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

Couchdb 分布式数据库,许多轻负载节点,couchdb,cassandra,distributed,Couchdb,Cassandra,Distributed,我正在做一个爱好项目,涉及到相当CPU密集的计算。这个问题令人尴尬地平行出现。这种计算需要在大量节点上进行(比如1000-10000)。每个节点几乎可以完全独立于其他节点完成其工作。但是,整个系统将需要回答来自系统外部的查询。每秒大约需要回答100000个此类查询。为了回答查询,系统需要某些状态,这些状态有时在两个节点之间共享。节点的计算最多需要128MB RAM 很明显,我可能负担不起以上述规模实际构建这个系统,但我仍然对它的工程挑战感兴趣,并认为我应该设置少量节点作为概念证明 我在考虑使用C

我正在做一个爱好项目,涉及到相当CPU密集的计算。这个问题令人尴尬地平行出现。这种计算需要在大量节点上进行(比如1000-10000)。每个节点几乎可以完全独立于其他节点完成其工作。但是,整个系统将需要回答来自系统外部的查询。每秒大约需要回答100000个此类查询。为了回答查询,系统需要某些状态,这些状态有时在两个节点之间共享。节点的计算最多需要128MB RAM

很明显,我可能负担不起以上述规模实际构建这个系统,但我仍然对它的工程挑战感兴趣,并认为我应该设置少量节点作为概念证明

我在考虑使用Cassandra和CouchDB这样的东西在所有节点上都具有可伸缩的持久状态。如果我在每个节点上运行一个分布式数据库服务器,它的负载将非常轻,但是从ops的角度来看,让所有节点都相同会非常好

现在我的问题是:

有谁能推荐一种分布式数据库实现,它非常适合于由大量节点组成的集群,每个节点只有很少的RAM

Cassandra似乎做了我想做的事情,但谈到为每个节点推荐至少4G RAM

我还没有找到CouchDB的内存需求的数据,但是考虑到它是在Erlang中实现的,我想它可能还没那么糟糕吧


无论如何,欢迎推荐、提示、建议、意见

使用cassandra应该可以做到这一点,不过根据您的可靠性要求,像redis这样的内存数据库可能更合适

由于数据集非常小(100 MBs的数据),您应该能够在每个节点上使用少于4GB的ram运行。加上cassandra开销,memtable可能需要200MB的ram,行缓存可能需要200MB的ram(要缓存整个数据集,请关闭键缓存),java一般需要500MB的ram,这意味着每台机器可以获得2 Gig的ram


使用三个复制因子,您可能只需要10个节点的集群来满足所需的读/写数量(尤其是因为您的数据集非常小,所有读取都可以从行缓存中获得)。如果您需要1000个节点的计算能力,让他们与存储您数据的10个cassandra节点进行对话,而不是尝试将cassandra分割成1000个节点。

我自己也没有使用CouchDB,但我被告知Coach将运行到256M,记录量约为500K。据猜测,考虑到计算所需的额外128M,这意味着每个节点可能需要约512M。最终,您应该下载并在VPS中对每个人进行测试,但听起来Coach运行的内存比Cassandra要少。

好的,在发布问题后进行了更多的阅读,并尝试了一些东西之后,我决定使用MongoDB

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


CouchDB似乎不支持开箱即用的切分,因此(事实证明)不适合问题中描述的问题(我知道有切分插件)。

您已经描述了您的cpu需求,但没有描述您的数据需求。数据是否足够大,您需要将其分布在1000个节点上,每个节点有多少数据,您的计算是否需要大量数据,以便在需要数据的同一节点上运行计算,查询是否需要访问存储在磁盘上的数据,或者查询是否由计算结果提供服务,数据、查询和计算之间的关系是什么?谢谢您的评论。问题是,数据非常小。系统中存储的数据总量约为100 MB。不将数据存储在单个中心节点中的唯一原因是,对于单个服务器来说,该数据的事务数量有点太多,无法处理。数据多久更改一次?谁更改数据?数据更改后,节点需要多久才能看到更改?一致性要求是什么?有100万条记录,最坏的情况下,每一条记录大约每分钟更改一次。数据更改是由于一个非常昂贵的计算结果,该计算是为从外部访问系统的客户端完成的。当数据更改时,下一次访问(可能在一秒钟内)必须看到新数据。一致性是微不足道的,记录都是独立的。我想你是对的,我提出的设计相当愚蠢——有10个高效利用的服务器比有1000个几乎没有负载的节点要好得多。