NoSQL最常见的解释是Non-Relational,Not Only SQL也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,他们不保证关系数据的ACID特性。
1.NOSQL数据库的分类
当前出现了很多不同类型、面向不同应用的No SQL产品,按照所使用的数据结构的类型,一般可以将NoSQL数据库分为4种类型:列式存储数据库、键值对存储数据库、文档型数据库、图数据库。
1.1.列式存储数据库
行式数据库即传统的关系型数据库,数据按记录存储,每一条记录的所有属性存储在一行。列式数据库是按数据库记录的列来组织和存储数据的,数据库中每个表由一组页链的集合组成。每条页链对应表中的一个存储列。
这类数据库通常是用来应对分布式存储的海量数据。键任然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。现有产品如Cassandra、HBase、Riak。
1.2.键值对存储数据库
键值存储的典型数据结构一般为数组链表:先通过Hash算法得出Hashcode,找到数组的某一个位置,然后插入链表。
这类数据库主要会用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据。Key-value模型对于IT系统来说,其优势在于简单、易部署。但是如果数据库管理员只对部分值进行查询或更新的时候,Key-value就显得效率低下了。现有产品如Tokyo Cabinet/Tyrant、Redis、Voldemort、Oracle BDB。
1.3.文档型数据库
文档型数据库同键值对存储数据库类似。文档型数据库的灵感来自于Lotus Notes办公软件,而且它同键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。现有产品如CouchDB、MongoDb,国内也有文档型数据库SequoiaDB,已经开源。
1.4.图数据库
图行结构的数据库同其他采用行列以及刚性结构的SQL数据库不同,它使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要指定数据模型。许多NOSQL数据库都有REST式的数据接口或者查询API。适合存储通过图进行建模的数据,例如社交网络数据,生物信息网络数据,交通网络数据等。常见的产品有Neo4J、InfoGrid、Infinite Graph等。
2.NoSQL数据库的一些共同特征
目前业界对于NoSQL并没有一个明确的范围和定义,但是它们普遍存在下面一些共同特征:易扩展;大数据量,高性能;灵活的数据模型;高可用。
- 易扩展:去掉了关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。
- 大数据量,高性能:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下。这得益于它的无关系性,数据库的结构简单。
- 灵活的数据模型:NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
- 高可用:NoSQL在不太影响性能的情况下,就可以方便地实现高可用的架构,有些产品通过复制模型也能实现高可用。
3.体系框架
NoSQL整体框架分为4层,由下至上分为数据持久层(DataPersistence)、数据分布层(Data Distribution Model)、数据逻辑模型层(Data Logical Model)和接口层(Interface),层次之间相辅相成,协调工作。
(1)数据持久层定义了数据的存储形式,主要包括基于内存、硬盘、内存和硬盘接口、定制可插拔4种形式。
(2)数据分布层定义了数据是如何分布的,相对于关系型数据库,NoSQL可选的机制比较多,主要有3种形式:一是CAP支持,可用于水平扩展;二是多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行;三是动态部署支持,可以在运行着的集群中动态地添加或删除结点。
(3)数据逻辑层表述了数据的逻辑表现形式。
(4)接口层为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。接口层提供了5种选择:Rest、Thrift、Map/Reduce、Get/Put、特定语言API,使得应用程序和数据库的交互更加方便。