NoSQL
NoSQL
一、什么是NoSQL
- NoSQL:not only SQL,非关系型数据库
- NoSQL是一个通用术语
- 指不遵循传统RDBMS模型的数据库
- 数据是非关系的,且不使用SQL作为主要查询语言
- 解决数据库的可伸缩性和可用性问题
- 不针对原子性或一致性问题
二、为什么使用NoSQL
- 互联网的发展,传统关系型数据库存在瓶颈
- 高并发读写
- 高存储量
- 高可用性
- 高扩展性
- 低成本
三、NoSQL和关系型数据库对比
主要有以下一些区别:
四、NoSQL的特点
-
最终一致性
-
应用程序增加了维护一致性和处理事务等职责
-
冗余数据存储
-
NoSQL != 大数据
- NoSQL产品是为了帮助解决大数据存储问题
- 大数据不仅仅包含数据存储的问题
Hadoop
Kafka
Spark, etc
五、NoSQL基本概念
- 三大基石
CAP、BASE、 最终一致性 - Indexing(索引)、Query(查询)
- MapReduce
- Sharding
5.1 CAP理论
- 数据库最多支持3个中的2个
a)Consistency(一致性)
b)Availability(可用性)
c)Partition Tolerance(分区容错性) - NoSQL不保证“ACID”
- 提供“最终一致性”
5.2 BASE
- Basically Availble(基本可用)
保证核心可用 - Soft-state(软状态)
状态可以有一段时间不同步 - Eventual Consistency(最终一致性)
系统经过一定时间后,数据最终能够达到一致的状态
- 核心思想是即使无法做到强一致性,但应用可以选择适合的方式达到最终一致性
5.3 最终一致性
- 最终结果保持一致性,而不是时时一致
- 如账户余额,库存量等数据需强一致性
- 如catalog等信息不需要强一致性
Causal consistency(因果一致性)
Read-your-writes consistency:
Session consistency
六、索引和查询
- Indexing(索引)
- 大多数NoSQL是按key进行索引
- 部分NoSQL允许二级索引
- HBase使用HDFS,append-only
a)批处理写入Logged
b)重新创建并排序文件
- Query(查询)
- 没有专门的查询语言,通常使用脚本语言查询
- 有些开始支持SQL查询
- 有些可以使用MapReduce代码查询
七、MapReduce、Sharding
-
MapReduce
- 不是Hadoop的MapReduce,概念相关
- 可进行数据的处理查询
-
Sharding(分片)
- 一种分区模式
- 可以复制分片
作用:有利于灾难恢复
八、NoSQL分类
主要分为以下四类:
8.1 值存储数据库(Key-Value)
- 通常用hash table来实现
可以通过key来添加、查询或者删除数据 - 常应用于内容缓存
储存用户信息,比如会话、配置文件、参数等等 - 不适用场景
需要事务支持场景
8.2 列存储数据库(Wide Column Store)
- 将数据储存在列簇
一个列簇存储经常被一起查询的相关数据
每一个列族包含kv键值对的“列”,可以随行变化 - 应用于分布式数据存储与管理
- 优点
a)查找速度快
b)可扩展性强
c)容易进行分布式扩展
8.3 文档型数据库(Document Store)
- 将数据以文档的形式存储
a)文档通常为JSON对象,也可以使用XML
b)每个文档都有属性和值
c)值可以是简单数据类型或复杂数据类型
数组、到其他数据库中的文档的链接或子文档 - 应用
存储、索引并管理面向文档的数据或类似的半结构化数据 - 优点
a)数据结构要求不严格,表结构可变
b)可以使用它储存不同的信息
8.4 图数据库(Graph Databases)
- 将数据以图的方式储存
- 适用的场景
a)在一些关系性强的数据中
b)推荐引擎
NoSQL和BI、大数据的关系
-
BI(Business Intelligence):商务智能
a)它是一套完整的解决方案
b)BI应用涉及模型,模型依赖于模式
c)BI主要支持标准SQL,对NoSQL支持弱于关系型数据库 -
NoSQL和大数据相关性较高
通常大数据场景采用列存储数据库,如:HBase和Hadoop