NoSQL根据不同的数据模型,大致可以分为4类,分别是键值对存储(Key-Value Stores),列族存储(Column Families),文档数据库(Document Databases)以及图形数据库(Graph Databases)。四者从容量来讲,依次下降,而从复杂度来说则相反。
下面我根据最近看的一些资料,列出了目前常见的NoSQL数据库系统的一些主要特性,不一定都正确。另外,后面列了一些参考资料,偏向于PostgreSQL,个人觉得还不错。
-
Apache Cassandra
- 由Facebook开发,开发语言为Java
- Apache License 2.0 许可
- Google BigTable的数据模型,Amazon的基础架构
- 面向列的key-value存储
- 通过提交日志来实现持久化,类似PostgreSQL里的WAL
- 跨节点的最后一致性(Eventually Consistent)实现
- 着重于CAP里的AP
- 客户端通过Thrift协议通讯,查询通过Map-Reduce
-
Apache CouchDB
- 主要开发者包括BBC和Engine Yard
- Apache License 2.0 许可
- 开发语言为Erlang
- key-value 文档存储
- 通过只附加(append-only)B+树实现持久化
- MVCC
- 着重于AP
- 通过HTTP REST,使用JSON协议通信
- 支持多主(multi-master)复制
- 通过文档或JavaScript函数(Map-Reduce)进行查询
- 无一致性实现,需要通过应用端解决
-
- 主要开发者包括Sourceforge,Foursquare,Bit.ly 和 Github
- 开发语言为C++
- AGPLv3 许可
- key-value 文档存储
- 通过复制加快照实现持久化
- 就地更新(in place update),无版本,无只附加日志
- 着重于CP
- 数据通过BSON(二进制JSON)存储
- 自有的通信协议
- 主从复制
- 支持地理空间索引
-
- 有LinkedIn开发,开发语言为Java
- key-value 文档存储
- 基于上游的Amazon
- 通过可插拔的数据存储层(BerkeleyDB/MySQL)实现持久化
- 着重AP
- MVCC
- Dynamo 分布式hash表(Distributed Hash Table,DHT)实现,一致性hash(Consistent Hashing),向量时钟(Vector clock)
- 多种数据序列化格式(JSON,Java String, byte[],Thrift,Avro,ProtoBuf)
- 自有的通信协议
-
- 由VMWare开发,开发语言为ANSI C
- key-value 文档存储
- 内存数据库,通过快照实现持久化
- 着重于CP
- 无数据序列化格式
- 类似POP3的自有通信协议
-
- 有neo technology开发
- 开发语言为Java
- AGPLv3 和商业 双重许可
- 图形化数据库
- 通过ZooKeeper实现HA
- 通过REST,Java协议通信
- 通过存储在磁盘的链接列表(linked-list)实现持久化
- 节点遍历高效
- 很好的纵向扩展性
- 通过SPARQL查询
参考:
- PostSQL and NoSQL
- NoSQL databases: why,what and when
- Bigtable:A Distributed Storage System for Structured Data
- The Chubby lock service for lossely-coupled distrubuted systems
- 分布式系统工程实践
- Robert Hass blog
- Bruce Momjian: Postgres Blog
- Dave’s Postgres Blog
- DBMS Musings
- NOSQL Notes
- NoSQL Fan
- 阳振坤的博客
- 2ndQuadrant
- The Heart,The World