我正在寻求实现一个可以在地理上广泛分布的数据库,这样每个节点都可以读取/写入,并最终与所有其他节点保持一致。我应该在哪里看?
我认为MongoDB在出现这种担忧之前似乎是其他原因的不错选择。显然所有MongoDB节点都是可读的,但只有主节点是可写的?反正有没有绕过这个?我不能允许单点失败写入数据库。
答案 0 :(得分:9)
我刚刚完成了对几个类似数据库的审核。出于不同的原因,我最终选择了Mongo。 Riak和Cassandra都是亚马逊Dynamo的实现,每个人都可以做得很好。在Riak site,他们对Riak和其他一些数据库进行了很好的比较。对于您的具体问题,我认为Riak和Cassandra都会处理任何带有Riak提交的矢量时钟节点的写入,以及Cassandra处理冲突的时间戳。
除此之外,您还有其他一些可能有意义的选择:
我不确定这是一个完整的答案。我的搜索需要几周时间和大约50页的笔记,但如果大型,分布式和安全写入是最重要的标准,那么这应该会让您感动。
答案 1 :(得分:1)
如果您关注的是单点故障: MongoDB使用replicasets分发读取和分片以分发写入。要实现您正在寻找的内容,您可以将每个分片作为副本集对系统进行分片。如果分片中的主分区死亡,则新主分区将自动选出,因此不是单点故障。 注意:MongoDB不支持多主复制
答案 2 :(得分:1)
我是couchdb
的粉丝对不起,在我扩展之前,我被切断了。
1)首先沙发很容易按地理位置分布 - 你可以通过http与它交谈,这对于分布式项目非常有用。
2)Couch内置了复制功能。
更好的是,你可能会发现bigcouch更适合,因为它是专门针对聚类设计的。
我花了几周的时间评估Mongo / Cassandra / Couch等人,并认为总的来说,对于广泛的应用,Couch非常适合。
我想你也应该看Amazon Simple DB。当谈到分布式最终一致的数据库时,它肯定符合要求。我已经在很多项目上使用它已经有几年了,它就像锡上所说的一样。我唯一担心的是你基本上把你所有的数据都放到了第三方的黑匣子里......但它确实可以工作,缩放并勾选你所有的盒子。
希望这有助于充实事情。
答案 3 :(得分:1)
取决于您希望如何分发您的写作。
Sharding:如果您希望在密钥上分发写入,MongoDB具有很好的自动分片功能。为了实现冗余,您可以创建多个副本(主从)对,然后通过中央服务(mongos)为每个副本分配一个键范围。读取将按键范围静态分配。
多主人:
如果您的系统足够小(GB,而不是TB),CouchDB具有更复杂的合并复制方案之一,可在节点发生故障时快速,可靠地恢复。使用CouchDB,每个节点都有一个完整的数据副本,集群中的所有节点都可以写入和读取。
如果您每小时需要数百万行,Cassandra会使用基于对等的复制方案,如果您愿意在读取性能上稍微提供一点,那么您可以将写入扩展到远远超出CouchDB的范围。
HBase还可以扩展写入和读取,但更适合于面向批处理的写入功能(加载日志文件),因为它位于HDFS上并且写入需要接近最小块大小(64MB,在写入之前可以将128MB ...)提交给磁盘。
希望这有帮助。
答案 4 :(得分:1)
您可以使用像CloudTran这样的产品来处理跨MySQL,Oracle,SQL Server等常见数据库的快速分布式事务。
答案 5 :(得分:0)
这是NuoDB的设计目标之一,今天该产品就是这样做的。
您可以读取(QUERY),写入(INSERT,UPDATE,DELETE),或在多个数据中心之间以事务方式执行任何其他操作,就像数据库位于单个位置一样。 NuoDB确实是一致的,而不是最终的一致性。它使用乐观异步消息传递和分布式版本控制来保证ACID事务。 NuoDB对标准SQL有着丰富的支持。