一、nosql数据库介绍
NoSQL = Not only SQL,非关系型数据库
nosql存储的是非关系型数据,像文档啊,图像啊,很明显这些大的数据单台服务器是不够存储的,所以它支持高可扩展性,分布式计算。常用于分布式系统。
NoSQL数据库的类型:键值数据库(redis)、列族数据库(HBASE)、文档数据库(mongoDB)、图像数据库(Neo4j)、xml数据库(BaseX)
NoSQL数据库的三大理论基石:CAP,最终一致性,BASE
1.CAP
- C(Consistency):一致性,是指写操作之后的读操作,必须返回该值
- A(Availability):可用性,是指快速获取数据,保证每个请求不管成功或者失败都有响应
- P(Partition tolerance):分区容错,是指区间通信可能失败,但分离的系统也能够正常运行,系统中任意信息的丢失或失败不会影响系统的继续运作。
一个分布式系统不可能同时满足这三个指标,一般来说我们认为 CAP 的 P 总是成立,故剩下的 C 和 A 无法同时做到。
当处理CAP的问题时,有几个明显的选择:
- 1.CA:放弃分区容忍性(P),最简单的做法就是把所有事务相关的内容都放到同一台机器上。显然这样严重影响系统的可扩张性,所以不适用于分布式系统。传统数据库都是这种设计原则(mysql,sql server)
- 2.CP:放弃可用性(A),当出现网络分区的情况时,受影响的服务需要等待数据一致,因此在等待期间无法对外提供服务(MongoDB,Hbase)
- 3.AP:放弃一致性(C),允许系统返回不一致的数据(Dynamo,Cassandra)
声明:
放弃分区容忍性(P)就是放弃使用分布式系统。
一致性和可用性,为什么不可能同时成立?
答案很简单,因为可能通信失败(即出现分区容错),大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。一般来说,分区容错无法避免。
2.BASE
BASE的基本含义是基本可用、软状态和最终一致性
- 基本可用:指一个分布式系统的一部分发生问题变得不可用时,其他部分依然可以正常使用,就是允许分区失败的情形出现
- 软状态:指数据的状态可以有一段时间不同步,具有一定的滞后性
- 最终一致性:允许后续的访问操作可以暂时读不到更新后的数据,但经过一段时间后,必须最终读到更新后的数据
3.最终一致性
最终一致性根据更新数据后各进程访问到数据的时间和方式不同,又可以分为:
- 因果一致性:如果进程A通知进程B它更新了一个数据项,那么B的后续访问将得到A写入的最新值。
- 读己之所写一致性:当进程A自己执行一个更新操作之后,它自己总是可以访问到更新过的值,而不是旧值,可视为因果一致性的一个特例
- 单调读一致性:如果进程看到过数据对象的某个值,那么如何后续访问都不会读取那个值之前的历史值
- 会话一致性:它把访问存储系统的进程放到会话的上下文中,只要会话还存在,系统就保证“读己之所写一致性”
- 单调写一致性:系统保证来自同一个进程的写操作顺序执行
二、NoSQL与关系型数据库的比较
1.关系型数据库
-
优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持。
-
劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板,无法较好支持Web2.0应用,事务机制影响了系统的整体性能
应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性
2.NoSQL数据库。
-
优势:可以支持超大规模数据存储,灵活的数据模型可以很好的支持Web2.0应用,具有强大的横向扩展能力。
-
劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难。
应用场景:互联网企业、传统企业的非关键业务(比如数据分析)