数据存储架构的发展史,看完这一篇就够了

目录

单机MySQL的美好年代

缓存(Memcached/Redis...)+MySQL+垂直拆分

MySQL主从读写分离

分库分表+水平拆分+MySQL集群

MySQL的扩展性瓶颈

现在的样子


单机MySQL的美好年代

在那个时候,更多的是静态网页,动态交互类型的网站不多。

数据存储架构的发展史,看完这一篇就够了_第1张图片

上述架构下,我们来看看数据存储的瓶颈是什么?

  1. 数据量的总大小,一个机器放不下时;
  2. 数据的索引(B+Tree)一个及其内存放不下时;
  3. 访问量(读写混合)一个实例不能承受。

如果满足上述任意条件,我们该怎么办?

缓存(Memcached/Redis...)+MySQL+垂直拆分

互联网发展至今,随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都出现了性能问题,然而我们的程序不再仅仅专注在功能上,同时也需要追求性能。猿猴们开始大量使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。最开始比较流行的是通过文件缓存来缓解数据库压力,但是每当访问量增大的时候,多台web服务器通过文件缓存的方式不能共享,大量的小文件缓存也带来了比较高的IO压力。此时,Memcached/Redis...自然成为一个非常时尚的技术产品。

数据存储架构的发展史,看完这一篇就够了_第2张图片

MySQL主从读写分离

由于数据库的写入压力增加,Memcached/Redis...只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制的技术来达到读写分离,从而提高读写性能和数据库的可扩展性。MySQL的master-slave模式成为这个时候的网站标配了。

数据存储架构的发展史,看完这一篇就够了_第3张图片

分库分表+水平拆分+MySQL集群

在Memcached的高速缓存、MySQL的主从复制、读写分离的基础上,这时MySQL主库的写入压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。

与此同时,开始流行使用分库分表来缓解写压力和数据增长的扩展问题。这个时候,分库分表成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但新跟那个也不能很好满足互联网的要求,只是在高可用上提供了非常大的保证。

数据存储架构的发展史,看完这一篇就够了_第4张图片

MySQL的扩展性瓶颈

MySQL数据库亚特进场存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小,如果能把这些数据从MySQL中省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正式当前使用MySQL的开发人员面临的问题。

现在的样子

经过时间的洗磨,我们对于整个项目的架构变得越来越通用化、可用性越来越高,各种服务都有相应的技术以及服务器去支撑,慢慢的解决了单个服务承载多个功能的问题。比如说,原本MySQL存储的信息包括:基本数据、图片二进制流、自媒体文件、长文本...,然而现在都有相应的服务去做专门的存储,比如单独搭建FastDFS去存储文件资源,使得MySQL不在去存储各种文件的二进制数据,只需要存储该文件在FastDFS节点的位置即可。

数据存储架构的发展史,看完这一篇就够了_第5张图片

 

你可能感兴趣的:(架构,数据库,mysql,nosql,架构,数据架构,redis)