http://blog.sina.com.cn/s/blog_7800d9210100t33v.html
我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL有了非常深入的研究,但是在最近准备YunTable的 Chart的时候,发现NoSQL不仅非常博大精深,而且我个人对NoSQL的理解也只是皮毛而已,但我还算是一个“知耻而后勇”的人,所以经过一段时间 的学习之后,从本系列第六篇开始,就将和大家聊聊NoSQL,而本篇将主要给大家做一下NoSQL数据库的综述。
首先将和大家聊聊为什么NoSQL会在关系型数据库已经非常普及的情况下异军突起?
诞生的原因
随着互联网的不断发展,各种类型的应用层出不穷,所以导致在这个云计算的时代,对技术提出了更多的需求,主要体现在下面这四个方面:
1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度;
2. 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量;
3. 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理;
4. 庞大运营成本的考量:IT经理们希望在硬件成本、软件成本和人力成本能够有大幅度地降低;
虽然关系型数据库已经在业界的数据存储方面占据不可动摇的地位,但是由于其天生的几个限制,使其很难满足上面这几个需求:
1. 扩展困难:由于存在类似Join这样多表查询机制,使得数据库在扩展方面很艰难;
2. 读写慢:这种情况主要发生在数据量达到一定规模时由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等的并发问题,所以导致其读写速度下滑非常严重;
3. 成本高:企业级数据库的License价格很惊人,并且随着系统的规模,而不断上升;
4. 有限的支撑容量:现有关系型解决方案还无法支撑Google这样海量的数据存储;
业 界为了解决上面提到的几个需求,推出了多款新类型的数据库,并且由于它们在设计上和传统的NoSQL数据库相比有很大的不同,所以被统称为 “NoSQL”系列数据库。总的来说,在设计上,它们非常关注对数据高并发地读写和对海量数据的存储等,与关系型数据库相比,它们在架构和数据模型方量面 做了“减法”,而在扩展和并发等方面做了“加法”。现在主流的NoSQL数据库有BigTable、HBase、Cassandra、SimpleDB、 CouchDB、MongoDB和Redis等。接下来,将关注NoSQL数据库到底存在哪些优缺点。
优缺点
在优势方面,主要体现在下面这三点:
1. 简单的扩展:典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群;
3. 低廉的成本:这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本;
但瑕不掩瑜,NoSQL数据库还存在着很多的不足,常见主要有下面这几个:
1. 不提供对SQL的支持:如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本;
2. 支持的特性不够丰富:现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像MS SQL Server和Oracle那样能提供各种附加功能,比如BI和报表等;
3. 现有产品的不够成熟:大多数产品都还处于初创期,和关系型数据库几十年的完善不可同日而语;
上面NoSQL产品的优缺点都是些比较共通的,在实际情况下,每个产品都会根据自己所遵从的数据模型和CAP理念而有所不同,接下来,将给大家介绍NoSQL两个最重要的概念:数据模型和CAP理念,并在本文最后,对主流的NoSQL数据库进行分类。
数据模型
传统的数据库在数据模型方面,主要是关系型,它的特色是对Join类操作和ACID事务的支持。在NoSQL领域,主要有三种主流的数据模型:
Column-oriented(列式)
列 式也主要使用Table这样的模型,但是它并不支持类似Join这样多表的操作,它的主要特点是在存储数据时,主要围绕着“列(Column)”,而不是 像传统的关系型数据库那样根据“行(Row)”进行存储,也就是说,属于同一列的数据会尽可能地存储在硬盘同一个页(Page)中,而不是将属于同一个行 的数据存放在一起,这样做的好处是,对于很多类似数据仓库(Data Warehouse)的应用,虽然每次查询都会处理很多数据,但是每次所涉及的列并没有很多,这样如果使用列式数据库的话,将会节省大量I/O,并且大多 数列式数据库都支持Column Family这个特性,通过这个特性能将多个Column并为一个小组,这样做好处是能将相似Column放在一起存储,这样能提高这些Column的存 储和查询效率。总体而言,这种数据模型的优点是比较适合汇总(Aggregation)和数据仓库这类应用。.
Key-value
虽 然Key-value这种模型和传统的关系型相比较简单,有点类似常见的HashTable,一个Key对应一个Value,但是其能提供非常快的查询速 度、大的数据存放量和高并发操作,并非常适合通过主键对数据进行查询和修改等操作,虽然不支持复杂的操作,但是可以通过上层的开发来弥补这个缺陷。
Document(文档)
CAP理论
这个理论是由美国著名科学 家,同时也是著名互联网企业Inktomi的创始人Eric Brewer在2000年PODC(Symposium on Principles of Distributed Computing)大会上提出的,后来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,但是总体而言,这个分类还是相当不错,在现阶段非常具有参考价值,在每个相关的数据库后面还会介绍对应的数据模型。
▲图1. NoSQL产品分类图(参考1)
这些数据库对于分区容忍性方面比较不感冒,主要采用复制(Replication)这种方式来保证数据的安全性,常见的CA系统有:
1. 传统关系型数据库,比如Postgres和MySQL等(Relational) ;
2. Vertica (Column-oriented) ;
3. Aster Data (Relational) ;
4. Greenplum (Relational) ;
关注一致性和分区容忍性的(CP)
这种系统将数据分布在多个网络分区的节点上,并保证这些数据的一致性,但是对于可用性的支持方面有问题,比如当集群出现问题的话,节点有可能因无法确保数据是一致性的而拒绝提供服务,主要的CP系统有:
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) ;
相关推荐
NoSQL 数据库技术原理与应用 NoSQL 数据库是大数据时代的产物,旨在解决关系数据库无法满足的...NoSQL 数据库具有灵活的可扩展性、灵活的数据模型和与云计算紧密融合等特点,是大数据技术原理与应用的重要组成部分。
CAP原理和BASE思想是分布式系统设计的重要理论基础,它们帮助开发者在一致性、可用性和分区容错性之间做出明智的决策。而NoSQL运动则提供了更多适应现代分布式环境的数据存储解决方案,这些解决方案通常基于BASE思想...
总的来说,NoSQL技术研究涵盖了理论基础、实现手段、具体软件以及实际应用等多个层面,对于理解分布式数据库的设计原理和优化实践具有重要意义。通过深入学习NoSQL,开发者可以更好地应对大数据时代的复杂存储需求。
- 适用于频繁读写、数据模型简单的应用。 **列族数据库:** - 适用于分布式数据存储与管理,如大数据分析。 **文档数据库:** - 适用于Web应用,存储面向文档或半结构化数据。 **图形数据库:** - 用于社交网络、...
这本书旨在帮助读者全面理解并掌握NoSQL数据库的使用,从基础操作到高级技术,再到核心原理和项目实践,涵盖了NoSQL领域的诸多重要知识点。 NoSQL(Not Only SQL)数据库是一种非关系型数据库,它打破了传统的关系...
在 NoSQL 数据库中,数据模型是非常重要的,不同的数据模型可以满足不同的业务需求。例如,Key-Valueamodel 可以满足缓存和Session管理的需求,而文档数据库可以满足大数据量的需求。 在 NoSQL 数据库中,持久化...
CAP原理是分布式系统设计的基础,包括一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)。在分布式环境中,通常需要在一致性与可用性之间做出权衡,例如,Google的Big Table更侧重...
考核方式包括闭卷考试和平时成绩,其中平时成绩包括考勤、作业和上机实验,期末考试则着重考核NoSQL数据库的基本原理和实际操作。 教材和参考书目推荐使用自编教材及厄兹叙和Patrick Valduriez的《NoSQL数据库系统...
- **MongoDB**: 适合用于构建知识图谱,因为它支持灵活的数据模型和高效的查询能力。 - **Redis**: 一种键值存储数据库,适用于缓存和实时数据分析。 - **HBase**: 一种列族存储数据库,适合大规模随机读写访问。 *...
NoSQL数据库作为近年来信息...在选择NoSQL数据库时,需要根据数据模型的类型、数据的一致性需求、系统的可用性要求以及数据规模等因素综合考虑。随着技术的发展,NoSQL数据库在未来的发展趋势和应用前景将更加广泛。
- **数据库**:是指按照一定的数据模型组织、存储和管理数据的仓库,操作系统中的文件夹不能视为数据库,因为它们不具备数据库的管理和检索机制。 #### 6. 数据库系统的组成 - **软件**:包括操作系统、宿主语言、...
NoSQL的核心理念在于放弃或减少对SQL(结构化查询语言)的支持,转而采用更为灵活的数据模型,如键值对、文档型、列族和图形数据库等。这种非关系型的数据存储方式更适应互联网时代数据的多样性和动态性。 1. 键值...
### NoSQL详解 #### NoSQL概述 NoSQL(Not Only SQL),是非关系型数据库的统称,它代表了与传统关系型数据库不同的数据管理和存储方式。...了解NoSQL的基本原理和技术特点,对于开发者和企业来说都具有重要意义。
NoSQL数据库的设计理念是放弃传统的严格事务处理和复杂的SQL查询,转而追求灵活的数据模型、可扩展性和与云计算的紧密融合。 **5.1 NoSQL简介** NoSQL数据库的核心特点包括: 1. **灵活的可扩展性**:NoSQL数据库...
NoSQL的基本概念包括CAP原理,CAP是指一致性(Consistency)、可用性(Availablility)和分区容忍性(ParitionTolerance)。在分布式数据库系统中,CAP三要素最多只能同时实现两点,不可能三者兼顾。大多数WEB应用会...
绪论部分首先介绍了数据库原理和NoSQL的数据管理,详细解析了CAP理论,为后续深入学习打下坚实的基础。之后的章节逐渐深入,例如第二章专注于HBase数据库,详细讲解了HDFS原理、HBase组件及其应用场景,使学生能够...
这就是著名的CAP原理。NoSQL数据库通常为了分区容错性和可用性牺牲了一致性,以适应大规模分布式环境。 NoSQL数据库类型主要有四种: 1. 键值存储 (Key-Value Store):如Redis和Memcached,主要用于高速缓存,通过...
根据CAP原理,分布式系统不能同时保证一致性、可用性和分区容忍性。NoSQL数据库通常会在CAP三者中做出权衡,如Big Table倾向于保证CP,而Dynamo则更注重AP,实现最终一致性。 总结来说,大数据与NoSQL是现代信息...