转发请注明出处,有什么错误的或者理解不透彻的希望大家进行评论指出或者进行讨论
普通数据库:
当我们使用单个数据库例如MySql时,会出现数据存储的瓶颈问题,例如
1.数据量的总大小一个数据库放不下
2.数据的索引(B+ Tree)一个机器的内存放不下
3.一台数据库读写混合,一个数据库实例承受不住访问压力。
图示:
由于以上原因的出现便出现了 Redis+MySql+垂直拆分;
Redis+MySql+垂直拆分:
随着访问量的增加,我们不得不考虑性能问题,Web开发不仅仅专注于功能,同时也需要追求性能,数据库的读写是读写硬盘数据,而缓冲是读写内存。所以大家都会使用缓冲技术来减少对数据库的压力,这时便可以使用Redis,Redis还可以在多个WEB应用之间实现缓冲的共享,同时在加上数据库的垂直拆分(采用多个数据库集群的方式)。大大加强了数据的读写问题。如图所示:
但是随着业务的扩展,这显然也会遇到数据读写瓶颈,于是出现了Redis配合数据库的主从复制。
Redis+MySql+主从复制:
为了提高性能,我们可以进一步使用Redis配合MySql-master-slave主从复制提高性能,查询走从库,增加删除修改走写库(结合Spring的AOP后续会写关于数据库读写分离的文章,希望大家持续关注zlt尼玛银行)。图解如下所示:
目前看来已经很完美了,但是很不幸,主从复制的主库会出现写库的瓶颈,没办法只能集群mysql-master-slave,分表分库,实现水平拓展咯。
Redis+分表分库+MySql集群主从复制:
对边上边的发展过程,补充一下,在访问数据库之前都会经过一个Redis缓冲,是为了减小数据库的访问压力,同时Redis可以做一个集群,并且Redis是单线程的。
接下来我们做回的是将使用MySql Cluster (集群),分表分库,不同的表走不同的Mysql主从复制库。如图所示:
目前:
从以上的内容我们可以发现NoSql是WEB的开发必不可少的,希望大家多多关注zlt尼玛银行Redis系列。