Apache三剑客:HBase, Cassandra, CouchDB。HBase的前景最为看好,因为它的开发者众多并且都是顶尖高手。Cassandra目前有很多否定的声音。CouchDB的小而精悍,赞誉很多,将要正式发布的CouchBase融合了MemBase和CouchDB,很令人期待。 HBase和Cassandra都是效仿Google的BigTable的基于列的数据库,它们都是用Java写的。另外一类似的数据库是HyperTable,百度用在一些后台分析,因为它是C++写的,速度比较快。不过HyperTable有点边缘,不太流行。这些基于列的开源数据库目前都比Goolge的BigTable差之少一个数量级 CouchDB是一个文档数据库。其最大的竞争者是MongoDB。MongoDB和HBase都采用主从服务器设计。CouchDB的服务器分布设计和Cassandra类似,Peer to Peer类型的。主从服务器设计一般能更好的strong consistent,属于CAP理论中的CP类型。 CouchDB和Cassandra一般认为都是eventual consistent,属于CAP理论中的AP类型。但其实MongoDB和Cassandra都可以设置成strong consistent或者eventual consistent。 以上所提到的数据库都支持MapReduce。好像出了HyperTable都支持非主键索引。HBase和strong consistent配置的MongoDB都支持最基本的锁定(HBase单行锁定,MongoDB单文档锁定),因此可以实现transaction,但是实现有点复杂和低效。单就transaction这一点,目前开源NoSQL数据库没有做的比较好的。 MongoDB的最大卖点是不需构建非主键索引也能执行很多查询。但是MongoDB的服务器分布设计实在不能让人恭维,可以说是NoSQL数据库中最Ugly的实现。 K-V数据库比较多,而且上面提到的基于列的数据库和文档数据库其实也都是K-V数据库。比较流行的纯种K-V数据库有: Memcached: 非常流行,不支持持久化 VMWare's Redis: 很流行,新浪和知乎都在用,CP类型。 MemBase: 由很多Memcached的开发者开发,使用sqlite作底层存储。在社交游戏中用的比较多, zynga在用,CP类型。 Riak, 分布式实现和CouchDB/Cassandra比较像,AP类型。支持MapReduce。 Linkin's Voldemort, 在K-V中少见的eventual consistent ,AP类型。 TT, TC 纯基于二维座标索引的是Neo4j。但是现在MongoDB和CouchDB都集成这一特性。 目前CouchDB的开发者成立的公司CouchOne收购了MemBase,将其底层sqlite换成CouchDB推出了CouchBase,从而引入MapReduce以支持非主键索引。CouchBase暂时还没有正式发布官方正式版,不过快了。虽然CouchDB是eventual consistent的,但是CouchBase的开发者宣称CouchBase保持了MemBase的strong consistent特性,具体实现有待以后研究。 如果从成熟的角度来看,比较成熟并且十分流行的的有CouchDB,Memcached,Redis。 HBase和MongonDB和Cassandra都比较新,处于频繁更新之中。最有前途的是HBase,但是Hadoop/HBase集群的维护常常需要很多专业人员并且需要构建一个比较大的集群才能最大化体现出威力,因此用户主要是Facebook, yahoo, 百度和阿里巴巴等大公司。 个人比较期待CouchBase。