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.键值数据库
会使用一个哈希表,表中有特定的Key和一个指针指向特定的Value。Key可以定位Value。Value对数据库不可见,只能通过Key检索Value。
Value可以用来存储任意类型的数据库。整型,字符型,数组,对象等。
条件查询效率低下。发生故障不支持回滚,无法支持事务。
产品:Redis,Riak(Github)
2.列族数据
列族数据库一般采用列族数据库模型,一个列族也可放入内存中。
产品:BigTable,HBase,Cassandra
3.文档数据库
文档是数据库的最小单位。通过键来定位一个文档,可以看做键值数据库的衍生品。但文档数据库查询效率更高。数据结构复杂,不需要特定的数据模式。可根据来构建索引,也可以基于文档内容来构建索引。
产品:MongoDB,CouchDB
4.图数据库
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:最终一致性
强一致性:执行一次更新操作后,后去其他读操作能够保证读到最新的数据。
弱一致性:不能保证一次更新后,读到最新数据。
最终一致性是一段时间后数据一致就可以了,不是每时每刻都保持实时一致。