几种常见的NoSQL数据库关键特性列表

Posted by

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查询

参考:

  1. PostSQL and NoSQL
  2. NoSQL databases: why,what and when
  3. Bigtable:A Distributed Storage System for Structured Data
  4. The Chubby lock service for lossely-coupled distrubuted systems
  5. 分布式系统工程实践
  6. Robert Hass blog
  7. Bruce Momjian: Postgres Blog
  8. Dave’s Postgres Blog
  9. DBMS Musings
  10. NOSQL Notes
  11. NoSQL Fan
  12. 阳振坤的博客
  13. 2ndQuadrant
  14. The Heart,The World

2 comments

Leave a Reply

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据