一、NoSQL
SQL为关系型数据库,NoSQL泛指非关系型数据库,NoSQL不使用SQL作为查询语言,其数据存储可以不需要固定的表模式,一般具备水平可扩展的特性
常见的NoSQL数据库如下:
- HBase
- redis
- membase
以MySQL为例,传统数据库应用出现什么问题,为什么要使用NoSQL?
- 单机时代的MySQL
以C/S结构的程序居多,B/S结构的程序多是静态网页,动态交互类网站并不多。
应用APP -> 数据访问 ->MySQL Instance
这种模式下,一旦数据总量超出一台机器的存储能力时,或者数据的索引在一台机器的内存放不下时,再或数据访问量(读写混合)超出一个实例的承受能力时,只能对数据库整体架构进行重构
- Memcached缓存+MySQL单一实例
为了解决MySQL的性能瓶颈,这个阶段开始采用缓存技术来缓解数据库的压力。早期的文件缓存,当访问量继续增大时,多台机器通过文件缓存不能共享,大量小文件缓存也带来了较大的I/O压力,此时出现了Memcached缓存技术:
应用APP -> 数据访问 ->Cache缓存 ->MySQL Instance
Memcached为一个独立的分布式缓存服务器
- Memcached缓存+主从复制结构(mysql集群)
Memcached只能缓解数据库的“读”的压力,随着“写”的压力增大,开始出现了主从复制技术,来实现读写分离,从而提高读写性能和读库的可扩展性。这个阶段的MySQL的master-slave模式成为主流
- Memcached缓存+主从复制结构(集群)+水平拆分
虽然实现了读写分离,但是MySQL主库的“写”压力出现瓶颈,数据量持续增长。
二、NoSQL和传统的RDBMS
NoSQL和传统的关系型数据库(RDBMS)相比,最大的特征就是:数据存储不需要一个特定的模式,并有强大的水平拓展能力。