1、入门概述
(1)为什么用 NoSQL
下面按顺序逐步演进!!!
I、单机 MySQL
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxUERNlXWE5UeVpHW3BjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3QzM5IjNwMTM3ITNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
II、Memcached(缓存) + MySQL + 垂直拆分
III、MySQL 主从读写分离
IV、分表分库 + 水平拆分 + MySQL 集群
V、MySQL 的扩展性瓶颈
VI、今天是什么样子
VII、为什么使用 NoSQL
(2)NoSQL 是什么
(3)NoSQL 能干嘛
- 易扩展:NoSQL 数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性,数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。
- 大数据量高性能:NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般 MySQL 使用 Query Cache,每次表的更新 Cache 就失效,是一种大粒度的 Cache,在针对 web2.0 的交互频繁的应用,Cache 性能不高。而 NoSQL 的 Cache 是记录级的,是一种细粒度的 Cache,所以 NoSQL 在这个层面上来说就要性能高很多了。
-
多样灵活的数据模型:NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,
增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。
- 传统 RDBMS VS NOSQL:
- RDBMS
- 高度组织化结构化数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
- NoSQL
- 代表着不仅仅是 SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键 - 值对存储,列存储,文档存储,图形数据库
- RDBMS
(4)常见的 NoSQL 数据库
- Redis
- Memcache
- MongDB
2、3 V + 3 高
(1)大数据时代的 3 V
- 海量 Volume
- 多样 Variety
- 实时 Velocity
(2)互联网需求的 3 高
- 高并发
- 高可用
- 高性能
3、NoSQL 数据模型简介
(1)聚合模型
- key - value 键值
- Bson
- 列族
- 图形
4、NoSQL 数据库的四大分类
(1)key - value 键值
- 新浪:BerkeleyDB + redis
- 美团:redis + tair
- 阿里、百度:memcache + redis
(2)文档型数据库(Bson 格式比较多)
- CouchDB
- MongoDB
(3)列存储数据库
- Cassandra, HBase
- 分布式文件系统
(4)图关系数据库
- 朋友圈、社交网络、广告推荐
- Neo4J, InfoGrid
(5)四者对比
5、在分布式数据库中 CAP 原理 + Base
(1)传统的 ACID
- A (Atomicity) 原子性:原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
- C (Consistency) 一致性:一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
- I (Isolation) 隔离性:所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
- D (Durability) 持久性:持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
(2)CAP
- C:Consistency(强一致性)
- A:Availability(可用性)
- P:Partition tolerance(分区容错性)
(3)CAP 的 3 进 2
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。
所以我们只能在一致性和可用性之间进行权衡,没有 NoSQL 系统能同时保证这三点。