在单机Mysql时可能出现:
- 数据量太大
- 数据的索引太大
- 访问量,读写混合量太大
进而出现Memcached(缓存)+ Mysql + 垂直拆分(读写分离)
通过多台数据库服务器分配读写的任务分摊压力,使用缓存来保存以提高效率
分库分表 + 水平拆分 + Mysql集群
早年MyISAM:表锁,高并发下会出现锁问题
现今Innodb:行锁
所以通过分库分表来减少写的压力,将读写统一为一个集群,通过多集群分摊压力提高效率
NoSql的出现
用户的各类信息爆发式增长,数据量过多,Mysql等关系型数据库不够用,为了解决这类情况需要用到NoSql数据库
什么是NoSQL
NoSQL = Not only Sql,泛指非关系型数据库
关系型数据库:表格,行,列
非关系型数据库:不需要一个固定的存储格式,可以简单地进行横向扩展
NoSQL特点
- 方便扩展
- 大数据量高性能
- 数据类型多样,不需要事先设计数据库
- 传统RDBMS
- 结构化组织
- SQL
- 数据和关系都存在单独的表中
- 数据操作,数据定义语言
- 严格的一致性
- 基础的事务
- ······
- NoSQL
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库存储(社交关系)
- CAP定理和BASE(异地多活)
- 高性能,高可用,高可扩展
- ······
NoSQL的四大分类
KV键值对
- Redis
- Tair
- memecache
文档型数据库(bson格式)
- MongoDB
- ConthDB
列存储数据库
- HBase
- 分布式文件系统
图关系数据库
- Neo4j InfoGrid