以前一直以为Couchbase的高速仅仅是因为自带缓存层,直接操作内存数据所以速度快。但是后来开始对分布式系统进行一些系统性的理论学习,发现问题没这么简单。
首先,Couchbase通过一致性哈希把不同ID的文档直接分散到不同节点,后来对文档的操作也是直接对应到相应节点的,这样就避免了单点压力,其实也就是自带CDN;其次,这还是个弱一致数据库,这样数据备份就不需要与数据更新保持高度一致,这就少了各种锁,而且事实上数据备份也无非就是在写入数据时根据vBucket往冗余的节点再写一份罢了,还有Couchbase内部的Lazy策略,各种index更新数据淘汰都不是即时完成的,变相把工作负载分散开了;不仅如此,文档ID这个作为文档在数据库内的唯一标识,或者可以近似类比为主键,必须由用户指定,数据库本身不提供自动生成不同ID的功能,这就又省下了一部分全局时序的协调工作;最后,作为一个文档型数据库,支持的操作就是写入数据、覆盖数据和删除数据,如果直接通过ID操作的话都是一步到位的简单操作,如果通过View的话因为map函数的结果是已经保存在硬盘里所以处理速度也很快。
当然,这还只是我看了一点书之后就发现这么些trick,如果深入学习分布式系统再看看Couchbase源码肯定还能发掘更多精巧之处。
不过Couchbase也不打算再继续研究了,自己也用不着,也不是热门的数据库,接下来如果还准备探索数据库那还是准备研究一下MySQL和Redis。