IT技术博客大学习 共学习 共进步

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

Linux|系统管理|WEB开发 2012-08-23 00:01:47 浏览 3,323 次

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要快
    • 着重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

    • 主要开发者包括BBCEngine 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.lyGithub
    • 开发语言为C++
    • AGPLv3 许可
    • key-value 文档存储
    • 通过复制加快照实现持久化
    • 就地更新(in place update),无版本,无只附加日志
    • 着重于CP
    • 数据通过BSON(二进制JSON)存储
    • 自有的通信协议
    • 主从复制
    • 支持地理空间索引
  • Voldemort

  • 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

建议继续学习

  1. hbase运维 (阅读 14,782)
  2. 我对技术方向的一些反思 (阅读 11,144)
  3. Key-Value小数据库tmdb发布:原理和实现 (阅读 8,223)
  4. SQL vs NoSQL:数据库并发写入性能比拼 (阅读 7,882)
  5. 让Redis使用TCMalloc,实现高性能NOSql服务器 (阅读 7,202)
  6. Using MySQL as a NoSQL (阅读 6,963)
  7. SQL到NOSQL的思维转变 (阅读 6,661)
  8. nosql数据库选型 (阅读 5,783)
  9. 分享会-高性能nosql数据库redis (阅读 5,604)
  10. MySQL vs NoSQL 效率与成本之争 (阅读 5,042)