NoSQL根据不同的数据模型,大致可以分为4类,分别是键值对存储(Key-Value Stores),列族存储(Column Families),文档数据库(Document Databases)以及图形数据库(Graph Databases)。四者从容量来讲,依次下降,而从复杂度来说则相反。
下面我根据最近看的一些资料,列出了目前常见的NoSQL数据库系统的一些主要特性,不一定都正确。另外,后面列了一些参考资料,偏向于PostgreSQL,个人觉得还不错。
- Google BigTable
- 由Google开发
- 闭源产品
- 通过SSTable实现持久化
- 通过Chubby实现一致性
- key-value存储
- HBase
- Apache基金项目,开发语言为Java
- Apache License 2.0 许可
- Google BigTable的开源版本
- 为Hadoop的后端数据库
- 通过HTTP REST,使用JSON协议通信
- 着重于CP
- 通过memtable/SStable实现持久化
- 通过ZooKeeper实现一致性
- 支持多主节点(multi-master)
- Hypertable
- 由Inkomi公司前员工发起,其中包括百度,Rediff,Zvents等公司赞助,后成立Hypertable公司。
- GPLv2 许可
- 开发语言为C++
- Goole BigTable的另外一个开源实现,但比Hbase home要快
- 着重CP
- 通过Thrift通信
- 通过memtable/SStable实现持久化
- MVCC
- 查询通过类似SQL的HQL
- 通过Hypersace算法(Paxos算法)实现一致性
- 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)进行查询
- 无一致性实现,需要通过应用端解决
- MongoDB
- 主要开发者包括Sourceforge,Foursquare,Bit.ly 和 Github
- 开发语言为C++
- AGPLv3 许可
- key-value 文档存储
- 通过复制加快照实现持久化
- 就地更新(in place update),无版本,无只附加日志
- 着重于CP
- 数据通过BSON(二进制JSON)存储
- 自有的通信协议
- 主从复制
- 支持地理空间索引
- Voldemort
- 有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)
- 自有的通信协议
- Redis
- 由VMWare开发,开发语言为ANSI C
- key-value 文档存储
- 内存数据库,通过快照实现持久化
- 着重于CP
- 无数据序列化格式
- 类似POP3的自有通信协议
- Tokyo Cabinet/Tyrant
- 实现key-value 数据库管理,带网络守护进程(Tyrant)
- 通过WAL和阴影拷贝分页实现持久化
- 无数据序列化格式
- 通信协议:Tokyo Tyrant Binrary Protocol,memcached compatible Text protocol,HTTP REST
- Neo4j
- 有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
好文章,内容气贯长虹.禁止此消息:nolinkok@163.com
不错的文章,内容排山倒海.禁止此消息:nolinkok@163.com