跨地域并且支持事务的开源数据存储项目:CockroachDB

jopen 10年前

CockroachDB是一个开源的数据存储项目。受到Google的Spanner 项目的启发,CockroachDB旨在打造一个开源的、可扩展、跨地域复制且兼容ACID的数据库,这在当前的开源社区中还是非常少见的。
color_cockroach.png

一直以来,NoSQL数据存储都通过在多个数据中心之间进行异步复制来支持多数据中心的配置。这是在 MongoDB中所推崇的方式,这同样也是 Riak, CassandraHBase中唯一可用的方式。然而,异步复制阻碍了在多个数据中心之间的一致性保证。此外,大多数第一代NoSQL数据存储都无法支持任何跨键(key)的事务。近来,像FoundationDBHyperDex这些新系统在一开始就被设计用来支持跨键的事务。然而,这些系统并不能很好地支持多数据中心的配置。

在这样的背景下,Google在2012年公开了他们的Spanner系统,这是一个同时支持事务和多数据中心一致性的系统,该系统为这一领域打开了新的局面。Spanner的论文给大家带来了启发,但是一直都没有人对其进行实现。直到CockroachDB团队开启了他们的开源项目,他们尝试实现并复制Spanner中的那些富有挑战的混合特性。

规范的草案中,在Google参与 Colossus文件系统开发工作的 Spencer Kimball对 CockroachDB进行了描述,CockroachDB支持ACID的事务语义和版本化的值,并将其作为头等特性。其主要的设计目标便是全局的一致性和生存能力,所以该数据存储也由此得名(译者注:Cockroach是蟑螂的意思,即打不死的小强)。… Cockroach实现了一个单一的、整体排序的map(键值映射),并且键和值都是字节字符串。

CockroachDB的事务特性由两种方式提供。Kimball解释说

如果逻辑上的一次变化所影响的键全部落在同一范围(range)内,那么原子性和一致性可以由Raft算法来保障,这是最快的提交路径。否则,会在受影响的范围之间使用一个非阻塞的分布式提交协议。Cockroach提供了快照隔离(snapshot isolation,简称SI)和顺序的快照隔离(SSI)语义…SSI是默认的隔离级别;客户端必须有意识地在正确性和性能之间做出选择。

该非阻塞分布式提交协议仍然处于发展之中,而Kimball则引用了悉尼大学耶鲁大学的论文,并且特别关注来自Yahoo! 的一篇论文,并将其作为实现SSI语义的潜在选择。

当前的alpha版本提供了一个所需功能的非常小的子集。集群的初始化和加入、gossip网络和一个基础键值的REST API目前已经得到了支持。但是raft一致性算法、范围的分裂或事务功能目前还没有得到支持。该项目是由Go语言编写的,而他们目前正在寻找代码贡献者

来自:http://www.infoq.com/cn/news/2014/08/CockroachDB

项目主页:http://www.open-open.com/lib/view/home/1409534022572