Visual Guide to NoSQL Systems
来源:互联网 发布:大学生网络惨案 编辑:程序博客网 时间:2024/05/19 13:25
10年前,Eric Brewer提出著名的CAP定理,指出:一个分布式系统不可能满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足两个。后来Seth Gilbert 和 Nancy lynch两人也证明了CAP理论的正确性,虽然在后来近十年的时间很多人对CAP理论提出了很多异议,但是在NoSQL的世界中,它还是非常有参考价值的。它的意思是,一个分布式系统不能同时满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
1. 一致性(Consistency):任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的;
2. 可用性(Availability):每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的。
3. 分区容忍性(Partition Tolerance): 在出现网络分区(比如断网)的情况下,分离的系统也能正常运行。
由于一致性、可用性和分区容忍性这三方面只能选择两个,所以大多数NoSQL系统都会根据自己的设计理念来进行相应的选择,但由于许多NoSQL数据库都以水平扩展著称,所以在CAP的选择上面,都倾向于坚持分区容忍性,而放弃一致性或者可用性,它们的做法主要是通过消减关系型和事务相关的功能。
下面的具体分类是来自于Visual Guide to NoSQL Systems一文,虽然对于这块分类我个人觉得还存在一些牵强的地方,比如将能支持多种CAP配置的Dynamo和其衍生产品Cassandra归类为 AP,但是总体而言,这个分类还是相当不错,在现阶段非常具有参考价值,在每个相关的数据库后面还会介绍对应的数据模型。
关注一致性和可用性的 (CA)
这些数据库对于分区容忍性方面比较不感冒,主要采用复制(Replication)这种方式来保证数据的安全性,常见的CA系统有:
1. 传统关系型数据库,比如Postgres和MySQL等(Relational) ;
2. Vertica (Column-oriented) ;
3. Aster Data (Relational) ;
4. Greenplum (Relational) ;
关注一致性和分区容忍性的(CP)
这种系统将数据分布在多个网络分区的节点上,并保证这些数据的一致性,但是对于可用性的支持方面有问题,比如当集群出现问题的话,节点有可能因无法确保数据是一致性的而拒绝提供服务,主要的CP系统有:
1. BigTable (Column-oriented) ;
2. Hypertable (Column-oriented);
3. HBase (Column-oriented) ;
4. MongoDB (Document) ;
5. Terrastore (Document) ;
6. Redis (Key-value) ;
7. Scalaris (Key-value) ;
8. MemcacheDB (Key-value) ;
9. Berkeley DB (Key-value) ;
关于可用性和分区容忍性的(AP)
这类系统主要以实现"最终一致性(Eventual Consistency)"来确保可用性和分区容忍性,AP的系统有:
1. Dynamo (Key-value);
2. Voldemort (Key-value) ;
3. Tokyo Cabinet (Key-value) ;
4. KAI (Key-value) ;
5. Cassandra (Column-oriented) ;
6. CouchDB (Document-oriented) ;
7. SimpleDB (Document-oriented) ;
8. Riak (Document-oriented) ;
参考资料:
Visual Guide to NoSQL Systems
Cassandra概要介绍
Cassandra概要介绍
NoSQL数据库笔谈
NOSQL数据模型和CAP原理
如何“打败”CAP定理
- Visual Guide to NoSQL Systems
- Visual Guide to NoSQL Systems
- Auditor's Guide to Information Systems Auditing
- Practical Guide to Clinical Computing Systems: Design, Operations, and Infrastructure
- A Visual Guide to Version Control
- A Visual Guide to Android GUI Widgets
- A Visual Guide to Android GUI Widgets
- Visual Guide to Templates in Eclipse
- [读书笔记]A Programmer's Guide to Data Mining - chapter 2 Get Started with Recommendation Systems
- Moving to Microsoft Windows Vista: Visual QuickProject Guide
- A Complete Guide to PivotTables: A Visual Approach
- A Guide To MSDN Integration (Visual Studio 6.0)
- A Visual Guide to Swing Components (Java Look and Feel)
- Your visual how-to guide for SELinux policy enforcement
- Building Automated Trading Systems: With an Introduction to Visual C++.NET 2005
- Introduction to Distributed Systems
- Understanding andDiagnosing Visual Tracking Systems
- Serial Programming Guide for POSIX Operating Systems
- CF Om Nom and Dark Park
- java字节流和字符流的比较哦啊
- C++静态变量和cout
- 秒杀多线程第五篇 经典线程同步 关键段CS
- Web学习记录<一>目标与任务
- Visual Guide to NoSQL Systems
- 整数快速开平方算法
- BFS Word Ladder II
- 想法题+思路(zjnu training for 神牛)
- bootstrap学习[1]
- Android必知必会--NinePatch图片制作
- Qt容器之QVector,QMap,QHash,QList等注意事项
- 将yuyv格式图像转为IplImage(彩色)
- 黑马程序员_java基础之集合(collection及其子类)