1、什么是NoSQL?
NoSQL(Not Only SQL)指的是非关系型的数据库,是对不同于传统的关系型数据库的数据库管理系统的总称。用于超大规模数据的存储,这些类型的数据存储不需要固定的模式,无需多于操作就可以横向发展。
2、常见类型
键值数据库
键值数据库是高度可区分的,并且允许以其他类型的数据库无法实现的规模进行水平扩展。它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符(就像Map一样的key-value对)。其中键和值都可以是从简单对象到复杂集合对象的任何内容。典型代表就是Redis。
列存储数据库
列存储数据库通常是用来应对分布式存储的海量数据。键依然在,但是它们的特点是指向了多个列,这些列是由列家族来安排的。典型代表HBase。对比行存储数据库,关系型数据库是典型的行存储数据库,其存在的问题是,按行存储的数据在物理层面占用的是连续存储空间,不适合海量存储。
文档型数据库
它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。是NoSQL与关系型数据的结合,最像关系型数据库的NoSQL。其典型代表是MongoDB。
图形数据库
它是使用灵活的图形模型,并且能够扩展到多个服务器上。用于存放一个节点关系的数据库,例如描述不同人间的关系。典型代表Neo4J。
3、体系架构
NoSQL框架体系NosoL整体框架分为四层,由下至上分为数据持久层(data persistence)、整体分布层(data distribution model)、数据逻辑模型层(data logical model)、和接口层(interface),层次之间相辅相成,协调工作。
数据持久层定义了数据的存储形式,主要包括基于内存、基于硬盘、内存和硬盘接口、订制可拔插四种形式。基于内存形式的数据存取速度最快,但可能会造成数据丢失。基于硬盘的数据存储可能保存很久,但存取速度较基于内存形式的慢。内存和硬盘相结合的形式,结合了前两种形式的优点,既保证了速度,又保证了数据不丢失。订制可拔插则保证了数据存取具有较高的灵活性。
数据分布层定义了数据是如何分布的,相对于关系型数据库,NoSQL可选的机制比较多,主要有三种形式:一是CAP支持,可用于水平扩展。二是多数据中心支持,可以保证在横跨多数据中心是也能够平稳运行。三是动态部署支持,可以在运行着的集群中动态地添加或删除节点。
数据逻辑层表述了数据的逻辑表现形式,与关系型数据库相比,NoSQL在逻辑表现形式上相当灵活,主要有四种形式:一是键值模型,这种模型在表现形式上比较单一,但却有很强的扩展性。二是列式模型,这种模型相比于键值模型能够支持较为复杂的数据,但扩展性相对较差。三是文档模型,这种模型对于复杂数据的支持和扩展性都有很大优势。四是图模型,这种模型的使用场景不多,通常是基于图数据结构的数据定制的。
接口层为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。接口层提供了五种选择:Rest,Thrift,Map/Reduce,Get/Put,特定语言API,使得应用程序和数据库的交互更加方便。
NoSQL分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。
4、NoSQL特点
对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:
易扩展
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。
大数据量,高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。
灵活的数据模型
NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是——个噩梦。这点在大数据量的Web 2.0时代尤其明显。
高可用
NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。