《大数据技术原理与应用》暑假学习计划_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文档不需要设相同字段并且相同字段不需要相同数据类型