这里写目录标题
什么是NoSQL
- NoSQL:not only SQL,非关系型数据库
- NoSQL是一个通用术语
指不遵循传统RDBMS模型的数据库
数据是非关系的,且不使用SQL作为主要查询语言
解决数据库的可伸缩性和可用性问题
不针对原子性或一致性问题
为什么使用NoSQL
- 互联网的发展,传统关系型数据库存在瓶颈
(1)高并发读写
(2)高存储量
(3)高可用性
(4)高扩展性
(5)低成本
NoSQL与关系型数据库的区别
对比 | NoSQL | 关系型数据库 |
---|---|---|
常用数据库 | HBase,MongoDB,Redis | Oracle,DB2, MySQL |
存储格式 | 文档,键值对,图结构 | 表格是,行和列 |
存储规范 | 鼓励冗余 | 规范性,避免重复 |
存储扩展 | 横向发展,分布式 | 纵向扩展(横向扩展有限) |
查询方式 | 结构化查询语言SQL | 非结构化查询 |
事务 | 不支持事务一致性 | 支持事务 |
性能 | 读写性能高 | 读写性能差 |
成本 | 简单易部署,开源,成本低 | 成本高 |
NoSQL的特点
- 最终一致性
- 应用程序增加了维护一致性和处理事务等职责
- 冗余数据存储
- NoSQL!=大数据
NoSQL产品是为了帮助解决大数据存储问题
大数据不仅仅包含数据存储的问题(还包含大数据计算,大数据采集,大数据应用等)
NoSQL基本概念
- 三大基石
CAP,BASE,最终一致性 - Indexing(索引),Query(查询)
- MapReduce
- Sharding
(1)CAP理论
数据库最多支持三个中的两个
Consistency(一致性)
Availability(可用性)
Partition Tolerance(分区容错性)
NoSQL不保证"ACID"
提供"最终一致性"
(2)BASE
Basically Available(基本可用):保证核心可用
Soft-state(软状态):状态可以有一段时间不同步
Eventual Consistency(最终一致性):系统经过一定时间后,数据最终能够达到一致的状态
核心思想是即使无法做到强一致性,但应用可以选择适合的方式达到最终一致性
(3)最终一致性
最终结果保持一致性,而不是时时一致
如账户余额,库存量等数据需要强一致性
如catalog等信息不需要强一致性
(4)索引和查询
-
Indexing(索引)
大多数NoSQL是按key进行索引
部分NoSQL允许二级索引
HBase使用HDFS,app-only:批处理写入Logged/重新创建并排序文件 -
Query(查询)
没有专门的查询语言,通常使用脚本语言查询
有些开始支持SQL查询
有些可以使用MapReduce代码查询
(5)MapReduce,Sharding
-
MapReduce
不是Hadoop的MapReduce,概念相关
可进行数据的处理查询 -
Sharding(分片)
一种分区模式
可以复制分片:有利于灾难恢复
NoSQL分类
分类 | 举例 | 典型应用场景 |
---|---|---|
键值存储数据库(key-value) | Redis,MemcacheDB,Voldemort | 内容缓存等 |
列存储数据库(WIDE COLUMN STORE) | Cassandra,Hbase | 应对分布式存储的海量数据 |
文档型数据库(DOCUMENT STORE) | CouchDB,MongoDB | Web应用(可看做键值数据库的升级版) |
图数据库(GRAPH DB) | Neo4j,InfoGrid,Infinite Graph | 社交网络,推荐系统等,专注于构建关系图谱 |
NoSQL和BI,大数据的关系
-
BI(Business Intelligence):商务智能
它是一套完整的解决方案
BI应用涉及模型,模型依赖于模式
BI主要支持标准SQL,对NoSQL支持弱于关系型数据库 -
NoSQL和大数据相关性较高
通常大数据场景采用列存储数据库
如:HBase和Hadoop