《大数据技术原理与应用》暑假学习计划_06 - NoSQL简述
NoSQL概述
没有接触NoSQL时一直不太明白NoSQL的含义,一直觉得NoSQL只是一中新型数据库的名称。但直到前几天学习以后我才确实了解到了NoSQL其真正的魅力。数据库
NoSQL → Not noly SQL数组
NoSQL数据库真正兴起的缘由在于传统关系型数据库没法知足Web2.0的需求,并且关系模型的局限,以及Web2.0关系型数据库的许多特性没有发挥。浏览器
NoSQL数据库具备灵活可扩展性能够在多个节点水平扩展,并且具备灵活的数据模型,以及与底层云计算紧密结合。网络
传统关系型数据库架构
- 传统关系型数据库的优势
- 具备很是完备的关系理论基础
- 具备事务性机制的支持
- 高效的的查询优化机制
- 传统关系型数据库的缺点
- 没法知足海量数据管理需求
- 没法知足高并发的需求
- 没法知足高可扩展性和高可用性需求
传统MySQL集群缺陷并发
- 复杂性:集群部署管理配置复杂
- 延时性:主库压力大时,会带来较大时延
- 扩容问题:整个集群压力过大时,增长机器时需对数据集再次分区,比较复杂
Web2.0一般不须要严格数据库事务,也不须要严格读写实时性,不包含复杂SQL查询,多表链接操做对Web2.0时代彻底是鸡肋。分布式
关系型数据库与NoSQL数据库对比
- 数据库原理
- 关系型数据库:具备完备的关系代数理论做为基础
- NoSQL数据库:NoSQL数据库缺少理论基础
- 数据规模
- 关系型数据库:很难实现横向扩展,纵向扩展十分有限,没法支持海量数据存储
- NoSQL数据库:具备很是好的水平扩展性
- 数据库模式
- 关系型数据库:要定义严格数据库模式,严格遵照事先定义的数据库模式
- NoSQL数据库:数据模式灵活
- 查询效率
- 关系型数据库:适当数据量级查询效率较高
- NoSQL数据库:未构建面向复杂查询的索引,查询性能较差
- 事务一致性
- 关系型数据库:遵循ACID事务模型保证事务一致性
- NoSQL数据库:未构建面向复杂查询的索引,不支持事务强一致性,只保证最终一致性
- 数据完整性
- 关系型数据库:具备保证完整性的完备机制
- NoSQL数据库:不能实现完整性约束
- 可扩展性
- 关系型数据库:扩展性较差
- NoSQL数据库:水平扩展性很是好
- 可用性
- 关系型数据库:规模增大时为保证一致性可用性相对削弱
- NoSQL数据库:可用性较好
- 标准化
- 关系型数据库:遵循SQL标准,标准化较完善
- NoSQL数据库:未造成通用行业标准
- 技术支持
- 关系型数据库:大部分为商业数据库,可得到较强大的技术支持和完备的后续服务
- NoSQl数据库:开源产品,仍属于发展阶段
- 可维护
- 关系型数据库:管理员维护
- NoSQL数据库:没有成熟的基础和实践操做规范维护较复杂
- 应用场景
- 关系型数据库:电信银行等关键业务系统
- NoSQL数据库:互联网企业及一些传统非关键业务
NoSQL数据库四大类型
键值数据库:
数据模型:一堆键值对(键能够是任意类型的数据)高并发
优势:扩展性好,灵活性好,大量读写性能好,是理想的缓冲层解决方案。底层数据库 → 缓冲层 → 浏览器性能
缺点:没法存储结构化信息,条件查询效率较低,不支持值查找学习
列族数据库:
数据模型:列族
相似HBase根据列族进行垂直划分,根据行键进行水平划分。
优势:查找速度快,容易进行分布式扩展,复杂性较低。
缺点:无事务一致性。
NoSQL理论基础
CAP理论
consistency 一致性:全部节点在同一时间必须有一致数据
availabily 可用性
partitiontderance 分区容忍性
CA:将全部事务相关内容放在同一台机器上,避免网络分区(传统关系型数据库)
CP:使用网络分区,等数据以以后再存取数据,短期内没法取到数据,失去可用性
AP:可及时得到数据,但数据可能存在不一致
BASE “碱”
基本可用:容许部分分区失败
软状态:一段时间内数据可能不一样步,有滞后
最终一致性:可能有一段时间不一样步。根据更新数据后各进程访问到数据时间和方式不一样能够区分为
- 因果一致性
- “读己之所写“一致性
- 单调读一致性
- 会话一致性
- 单调写一致性
假设有一个分布式系统,为实现其可靠性,要对数据进行冗余存储
N → 数据冗余份数
W → 更新数据时须要保证写完成的节点数
R → 读取数据时需读取的节点数
- W+R>N → 强一致性
- W+R<=N → 弱一致性(最终一致性时弱一致性的特例)
NewSQL
oldSQL:一种架构支持多类应用
NewSQL:多架构支持多类应用(同时具有oldSQL与NewSQL的优势)
大数据时代:
- NewSQL分析
- oldSQL事务
- NoSQL互联网
文档数据库MongDB
文档数据库MongDB:基于分布式文件系统的开源数据库
- 提供了面向文档存储,操做简单
- 能够设置任何属性的索引,实现更快的排序
- 具备较好的水平可扩展性
- 支持丰富查询表达式,可查询文档内嵌对象及数组
- 可替换已完成文档某个指定数据字段
集合 → MongDB文档组,相似于表。无固定结构,可对集合插入不一样格式和类型的数据
文档数据库中文档就是一个键值对,MongDB文档不须要设相同字段而且相同字段不须要相同数据类型