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