NoSQL数据库概览及其与SQL语法的⽐较
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数据库分析
四、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:⼀个基于语⾔的⾯向⽂档数据库
* MarkLogic:⽤来存储基于XML和以⽂档为中⼼的信息,⽀持灵活的模式
图形(Graph)数据库* Neo4j:⼀个图数据库,⽀持ACID事务
* InfiniteGraph:⽤来维持和遍历对象间的关系,⽀持分布式数据存储
* AllegroGraph:结合使⽤了内存和磁盘,提供了⾼可扩展性,⽀持SPARQ、RDFS++和Prolog推理
六、NoSQL和SQL语法的简单⽐较
前⾯介绍了NoSQL的基本情况,下⾯以HBase和ORACLE为例,对NoSQL和SQL的语法进⾏简单的⽐较。HBase数据库被认为是安全特性最完善的NoSQL数据库产品之⼀,它被证实是⼀个强⼤的⼯具,
尤其是在已经使⽤Hadoop的场合。如今,它已经是Apache顶级项⽬,有着众多的开发⼈员和兴旺的⽤户社区。
1.创建表
如果要创建⼀个表“mytable”,其中包含了⼀个“info”字段,那么:
(1)ORACLE中的语法为:
create table mytable
(
info varchar(30) not null
);
(2)HBase中的语法为:
create 'mytable', 'cf'
该命令创建了⼀个有⼀个列族(“cf”)的表“mytable”。
2.写数据
如果要向表中写⼊数据“hello hbase”,那么:
(1)ORACLE中的语法为:
insert into mytable(info) values('hello hbase');
(2)HBase中的语法为:
put 'mytable', 'first', 'cf:info', 'hello hbase'
该命令在“mytable”表的“first”⾏中的“cf:info”列对应的数据单元中插⼊“hello hbase”。
3.读(查)数据
如果要从表中读出单条数据,那么:
(1)ORACLE中的语法为:
redis是nosql数据库吗select * from mytable where info = 'hello hbase';
(2)HBase中的语法为:
get 'mytable', 'first'
该命令输出了该⾏的数据单元。
如果要从表中读出所有数据,那么:
(1)ORACLE中的语法为:
select * from mytable;
(2)HBase中的语法为:
scan 'mytable'
该命令输出了所有数据。
4.删数据
如果要从表中删除数据,那么:
(1)ORACLE中的语法为:
delete from mytable where info = 'hello hbase';
(2)HBase中的语法为:
put 'mytable', 'first', 'cf:info', 'hello hbase1'
该命令⽤最新的值覆盖了旧的值,就相当于将原数据删除了。
5.修改数据
如果要在表中修改数据,那么:
(1)ORACLE中的语法为:
update mytable set info = 'hello hbase1' where info = 'hellohbase';
(2)HBase中的语法为:
put 'mytable', 'first', 'cf:info', 'hello hbase1'
该命令⽤最新的值覆盖了旧的值,就相当于修改了原数据。
6.删表
如果要删除表,那么:
(1)ORACLE中的语法为:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。