【文章摘要】
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,同时也是知名的NoSQL数据库之一。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题。
本文对NoSQL数据库的定义、分类、特征、当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对NoSQL和SQL语法进行了简单的比较,为大家对NoSQL数据库的学习提供了有益的参考。
?
一、NoSQL的出现
关系型数据库系统多年来在解决数据存储、服务和处理问题方面取得了巨大的成功。一些大型的公司使用关系型数据库建立了自己的系统,如联机事务处理系统和后端分析应用系统。联机事务处理(OLTP)系统用来实时记录交易信息。对这类系统的期望是能够快速返回响应信息(一般在毫秒级)。联机分析处理(OLAP)系统用来分析查询所储存的数据。OLAP属于商业智能的范畴,数据需要研究、处理和分析,以便收集信息,进一步驱动商业决策。
关系型数据库的内部设计由关系算法决定,这些系统需要预先定义一个模式(schema)和数据要遵守的类型。SQL是与这些系统交互的标准方式。但在对象-关系不匹配问题出现的场合,SQL就不是表达访问模式的最好方式了。例如目前炙手可热的大数据领域,关系型数据库不能很好地工作。
有关大数据常见定义包括:第一,大数据意味着数据足够大,为了从这些数据中获得一些真知灼见,你不得不研究它;第二,大数据就是不再适用于单台机器的数据。这些观点并不完整,我们需要用一种根本上不同的方式来考虑数据,从如何驱动商业价值的角度来考虑数据,这种数据就是大数据。
在大数据领域中,系统需要能够适应不同种类的数据格式和数据源,不需要预先严格定义模式,并且能够处理大规模数据。这样,NoSQL就出现了。
?
二、NoSQL的定义
NoSQL(NoSQL= Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动。NoSQL的拥护者们提倡运用非关系型的数据存储。大多数数据库技术不能保证支持ACID(原子性、一致性、隔离性和持久性),而且大部分技术都是开源项目,这些技术作为整体被称为NoSQL。
?
三、NoSQL的分类
一般将NoSQL数据库分为四大类:键值(Key-Value)存储数据库、列存储数据库、文档型数据库和图形(Graph)数据库。它们的数据模型、优缺点、典型应用场景如表1所示。
表1 四大NoSQL数据库分析
| 分类 |
数据模型 |
优点 |
缺点 |
典型应用场景 |
| 键值(Key-Value)存储数据库 |
Key指向Value的键值对,通常用hash表来实现 |
查找速度快 |
数据无结构化(通常只被当作字符串或者二进制数据) |
内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等 |
| 列存储数据库 |
以列簇式存储,将同一列数据存在一起 |
查找速度快,可扩展性强,更容易进行分布式扩展 |
功能相对局限 |
分布式的文件系统 |
| 文档型数据库 |
Key-Value对应的键值对,Value为结构化数据 |
数据结构要求不严格,表结构可变(不需要像关系型数据库一样需预先定义表结构) |
查询性能不高,而且缺乏统一的查询语法 |
Web应用 |
| 图形(Graph)数据库 |
图结构 |
利用图结构相关算法(如最短路径寻址,N度关系查找等) |
很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案 |
社交网络,推荐系统等 |
?
?
四、NoSQL的特征
NoSQL数据库并没有一个统一的架构,但是它们都普遍存在表2所示的一些共同特征。
表2 NoSQL的特征
| 特征 |
描述 |
| 不需要预定义模式 |
不需事先定义数据模式,预定义表结构等。数据中每条记录都可能有不同的属性和格式 |
| 无共享架构 |
NoSQL往往将数据划分后存储在各个本地服务器上,从而提高了系统的性能 |
| 弹性可扩展 |
可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移 |
| 分区 |
NoSQL数据库将数据进行分区,将记录分散在多个节点上面,并且通常分区的同时还要做复制 |
| 异步复制 |
NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会出现网络传输迟延 |
| BASE |
相对于ACID特性,NoSQL数据库保证的是BASE特性(BASE是最终一致性和软事务) |
?
?
五、常见的NoSQL数据库
比较适合采用NoSQL数据库的场合是:(1)数据模型比较简单;(2)需要灵活性更强的IT系统;(3)对数据库性能要求较高;(4)不需要高度的数据一致性;(5)对于给定key,比较容易映射复杂值的环境。
常见的NoSQL数据库如表3所示。
表3常见的NoSQL数据库
| 分类 |
实例 |
| ? ? ? ? ? 键值(Key-Value)存储数据库 |
* Riak:一个开源、分布式键值数据库,支持数据复制和容错 * Redis:一个开源的键值存储数据库,支持主从式复制、事务,Pub/Sub、Lua脚本,还支持给Key添加时限 * Dynamo:一个键值分布式存储数据库,直接由亚马逊Dynamo数据库实现 * Oracle NoSQL Database:来自Oracle的键值NoSQL数据库,支持事务ACID和JSON * Oracle NoSQL Database:具备数据备份和分布式键值存储系统 * Voldemort:具备数据备份和分布式键值存储系统 * Aerospike:一个键值存储数据库,支持混合内存架构,通过强一致性和可调一致性保证数据的完整性 |
| ? ? ? ? ? 列存储数据库 |
* Cassandra:支持跨数据中心的数据复制,提供列索引 * HBase:一个开源、分布式、面向列存储的模型 * Amazon SimpleDB:一个非关系型数据存储 * Apache Accumulo:有序的、分布式键值数据存储,基于Google的BigTable设计 * Hypertable:一个开源、可扩展的数据库,模仿Bigtable,支持分片 * Azure Tables:为要求大量非结构化数据存储的应用提供NoSQL性能 |
| ? ? ? 文档型数据库 |
* MongoDB:开源、面向文档 * CounchDB:一个使用JSON的文档数据库,使用Javascript做MapReduce查询,也是一个使用HTTP的API * Couchbase:基于JSON模型 * RavenDB:一个基于.net语言的面向文档数据库 * MarkLogic:用来存储基于XML和以文档为中心的信息,支持灵活的模式 |
| ? 图形(Graph)数据库 |
* Neo4j:一个图数据库,支持ACID事务 * InfiniteGraph:用来维持和遍历对象间的关系,支持分布式数据存储 * AllegroGraph:结合使用了内存和磁盘,提供了高可扩展性,支持SPARQ、RDFS++和Prolog推理 |
?
六、NoSQL和SQL语法的简单比较
前面介绍了NoSQL的基本情况,下面以HBase和ORACLE为例,对NoSQL和SQL的语法进行简单的比较。HBase数据库被认为是安全特性最完善的NoSQL数据库产品之一,它被证实是一个强大的工具,尤其是在已经使用Hadoop的场合。如今,它已经是Apache顶级项目,有着众多的开发人员和兴旺的用户社