RavenDB如何实现一致性,可用性和分区容错?

时间:2012-04-18 18:58:32

标签: ravendb cap

根据CAP theorem,分布式计算机系统无法同时提供consistencyavailability和分区容差。

阅读RavenDB看起来这个数据库同时支持ACID事务和分片。 RavenDB如何实现这一目标?

2 个答案:

答案 0 :(得分:4)

提前澄清事项:
默认情况下,对.SaveChanges()的调用之间的RavenDB会话中的所有写入都是全有或全无。如果一个操作因任何原因而失败,则将丢弃当前会话/自上次保存以来的所有更改。此功能与开启的乐观并发相结合,非常功能强大。如果您需要更长的事务,也支持System.Transaction,并且按预期工作。

关于分片:
分片设置中的分布式事务没有 true 支持。但是,由于参考文档在良好的分片策略中的位置,您可以在每个商店中进行事务性写入。它们的工作方式与完全没有任何碎片的情况相同。

答案 1 :(得分:1)

CouchDB属于同一条船:它们是“ACID”(从单个节点查看时),但不是一致的(从CAP查看时)。数据库术语可能令人困惑。

P.S。您链接的“可用性”不是CAP中的A. CAP中的A代表“所有节点都能够接受查询”。例如,在分区期间,PAXOS将仅回答多数分区中的查询,但少数分区将拒绝回答查询。

但从可用性的角度来看,它的可用性比系统下降的要好。如果系统需要一致性,那么这是您可以实现的最高可用性。