NoSQL数据库

NoSQL是Not only sql的简称,也是非关系型数据库的统称。

兴起原因

1.无法满足海量数据的管理需求
2.无法满足数据高并发的需求
3.无法满足高可扩展性和高可用性的需求
web 2.0下:
不要求严格的数据库事物。
不要求严格的读写实时性。
不包含大量复杂的SQL查询。

特点

1.灵活的可扩展性
  传统关系型数据库,很难实现‘横向扩展’,数据库负载增加时,需要升级硬件实现‘纵向扩展’。
但‘纵向扩展’无法满足业务。NoSQL提供‘横向扩展’,具备良好水平扩展能力。
2.灵活的数据模型
  关系型数据库,数据模型较为死板,无法满足新兴业务需求。NoSQL能够摆脱束缚,允许在一个数据元素里存储不同类型的数据。
3.与云计算紧密结合
  云计算具有良好的水平扩展能力,能够自由伸缩,资源动态加入或者退出。NoSQL能够良好的融入云计算环境中。

与关系数据库的比较

比较标准 关系数据库(RD) NoSQL 备注
数据库原理 完全支持 部分支持 RD有关系代数理论作为基础,NoSQL没有同意的理论基础
数据规模 超大 RD横向扩展难,NoSQL可多廉价机器
数据库模式 固定 灵活 RD需要定义模式,约束多NoSQL自由灵活
查询效率 可实现简单查询,复杂查询性能差 RD有索引很多NoSQL没有索引,虽然可通过MR加速,但复杂查询仍不如RD
一致性 强一致性 弱一致性 RD遵守ACIDNoSQL放松遵守ACID,遵守BASE模型
数据完整性 容易实现 很难实现 RD通过主键,外键,非空约束等实现NoSQL无法实现
扩展性 一般 RD横向扩展难,纵向扩展空间有限NoSQL可通过添加廉价设备实现扩展
可用性 很好 RD首先保证数据一致性,其次是性能,可用性弱NoSQL可用性高
标准化 RD已经标准化NoSQL还有有行业标准,不同数据库有不同的查询语言,很难规范
技术支持 RD已经非常成熟NoSQL还不够成熟,缺乏有力的技术支持
可维护性 复杂 复杂 RD需要有专门的DBA维护NoSQL也难以维护

没有谁替代谁,二者结合使用。
银行,超市仍需要RD。
购物车等临时数据可使用NoSQL。

四大类型

1.键值数据库

avatar
  会使用一个哈希表,表中有特定的Key和一个指针指向特定的Value。Key可以定位Value。Value对数据库不可见,只能通过Key检索Value。
  Value可以用来存储任意类型的数据库。整型,字符型,数组,对象等。
  条件查询效率低下。发生故障不支持回滚,无法支持事务。
  产品:Redis,Riak(Github)

2.列族数据

avatar
  列族数据库一般采用列族数据库模型,一个列族也可放入内存中。
  产品:BigTable,HBase,Cassandra

3.文档数据库

avatar
  文档是数据库的最小单位。通过键来定位一个文档,可以看做键值数据库的衍生品。但文档数据库查询效率更高。数据结构复杂,不需要特定的数据模式。可根据来构建索引,也可以基于文档内容来构建索引。
  产品:MongoDB,CouchDB

4.图数据库

avatar
  Neo4J兼容ACID。
  产品:Neo4J

三大基石

1.CAP

(1)Consistency:一致性。
  任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的。
(2)Availability:可用性。
  指快速获取数据,可以在确定的时间内返回操作结果。
(3)Tolerance of Netwok Partiton:分区容忍性。
  指当出现网络分区情况时,(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行。
CAP理论告诉我们,一个分布式系统不可能同时满足CAP三个要求,最多同时满足2个。

2.BASE

与ACID相反。
(1)Basically Availble:基本可用
  一个分布式系统一部分不可用时,其他部仍可正常使用。例如一个系统10个节点,1个损坏不可用,其他9个可正常使用,则认为这个系统基本可用。
(2)Soft-state:软状态
  硬状态保持数据一直是正确的。软状态指状态有一段时间不同步,具有一定的滞后性。传输延迟,但最终状态一致。
(3)Eventual consistency:最终一致性
  强一致性:执行一次更新操作后,后去其他读操作能够保证读到最新的数据。
  弱一致性:不能保证一次更新后,读到最新数据。
  最终一致性是一段时间后数据一致就可以了,不是每时每刻都保持实时一致。