CouchDB及Append-only B+树

本文介绍了CouchDB的设计思想,尤其是其采用的Append-only B+树结构。CouchDB是一个以可用性为首要目标的分布式数据库,采用最终一致性模型。其单节点使用无锁的MVCC协议和B+树实现高效并发读写,分布式环境下通过增量副本保持一致性。Append-only B+树允许只追加操作,提高性能,但会增加存储开销。文章还讨论了冲突解决和多版本控制策略。
摘要由CSDN通过智能技术生成

前言

今天晚上在写分布式系统上下层概念抽象-(2)的时候,遇到了一致性相关的内容,简单搜索了一些CAP的文章,就无意中看到了博文CouchDB Eventually Consistency。它是一个分布式的key-value数据库,感觉里面的设计还挺有意思的,很多ideas虽然知道,但是并没有和实际的系统挂钩,现在把它的一些设计思路写一写,主为备忘,权当一乐。

分布式系统

分布式系统需要处理的最典型情况就是网络分区故障,相比于很多系统将强一致性列为第一大需要,CouchDB采用了最终一致性的范畴,以可用性为第一准则。CouchDB提供了一种有效的方式来达到系统高可用。

CAP

  1. Consistency:所有节点在任何时刻看到都是相同的数据
  2. Availability:对于外部的请求,系统一定能够响应。
  3. Partition Tolerance:网络分区故障或者节点系统依然可以对外提供服务

在这里插入图片描述

然而如上图所示,最多两个条件能得到同时满足。CouchDB在满足PA的情况下,达到最终一致性。

当在分布式系统增加新server的时候,我们必须考虑如何划分数据:所有的节点是存储一样的数据?每个节点只存储部分数据?单点写,多点读?CouchDB采用的是所有的节点存储一样的数据方案(完全的副本)。那新的问题来了,如何保证server之间的同步?如何能够确保写操作能够立刻反映到其他的节点上?毫无疑问,为了保证所有的节点都能看到一致的数据库状态,某一个节点必须等待其他节点达成一致性协议,写操作才能开始写入。在这种情况下,一致性比可用性重要。然而,也有一些情况可用性比一致性重要。

Each node in a system should be able to make decisions purely based on local state. If you need to do something under high load with failures occurring and you need to reach agreement, you’re lost. If you’re concerned about scalability, any algorithm that forces you to run agreement will eventually become your bottleneck. Take that as a given.
—Werner Vogels, Amazon CTO and Vice President

如果可用性更重要,那么我们需要使得客户端不需要等待其他节点达成协议,就可将数据写入到server中。只要数据库自身能够协调解决冲突,那就达成了某种“最终一致性”,从而获得高可用性,这种服务保证在很多现实应用中都是一个很好的tradeoff。

Local Consistency

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值