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