NoSQL演变历程:
1、关系数据库
网站访问量不大,用单个数据库可以应对。
2、Memcached+Mysql (用缓存缓解读压力)
随着数据量、网站的访问量暴增,大部分网站都出现性能问题,开始比较流行的是通过文件缓存的方式缓解数据库压力,但多台web服务器不能够共享缓存,并且I/O操作非常之多。
于是就出现了Memcached技术,这是一个独立的分布式内存缓存服务器,能够为多台web服务器提供共享的缓存。
3、Mysql主从复制(实现读写分离,缓解读写压力)
Memcached只能缓解读的压力,于是出现Mysql 主从复制技术
主从复制:是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。假设有4台服务器,1主3从,当新增数据至数据库服务器的时候,那么同时复制此数据进入到从数据库服务器中。数据复制是为了容灾备份,缓存备份,保证数据的完整性。
读写分离:增删改、读分别从不同的数据库服务器中进行。分工明确,再结合缓存可进一步提升性能。
4、分表分库 + 水平拆分 + MySQL集群
在主从复制、读写分离、Memcached技术的使用后,这时性能在读方面得到很大提升,这时增删改的主数据库由于数据量持续猛增,开始出现瓶颈。由于myisam使用表锁,在高并发下会出现严重的锁问题,大量的高并发Mysql应用开始使用InnoDB引擎代替myisam,由于数据量的指数级增长,只能继续对架构进行演变。与此同时,开始流行使用分库分表来缓解写压力和数据增长的扩展问题。这个时候,Mysql推出了表分区。
分库分表:把原本存储在一个库的数据分块存储到多个库上;把原本存储于一个表的数据分块存储到多个表上。
分库分表分为:垂直切分、水平切分。
垂直切分:将表按照功能模块、关系密切程度划分出来,部署到不同的库上。
水平切分:当一个表中的数据量过大时,我们把表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。
5、NoSQL
NoSQL数据库在以下的这几种情况下比较适用:
1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境
NoSQL数据库的四大分类表格分析
目前接触过 Redis、Neo4J。
往期回顾
长按关注







