背景:随着业务发展,数据量越来越大,MySQL中单表数据量达到1000w时性能就变得非常差。分库分表技术应运而生。
这些技术看似很高深,其实不难,其核心就是对数据库数据进行划分,将数据放到不同的表、不同数据库中。具体如何划分则需要根据实际业务操作。
讲一讲分区表
分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表的索引只是在各个底层表上各自加上一个相同的索引,从存储引擎的角度来看,底层表和一个普通表没有任何不同,存储引擎也无须知道这是一个普通表还是一个分区表的一部分。
事实上,这个方案也不错,它对用户屏蔽了sharding的细节,即使查询条件没有sharding column,它也能正常工作(只是这时候性能一般)。
不过它的缺点很明显:很多的资源都受到单机的限制,例如连接数,网络吞吐等!虽然每个分区可以独立存储,但是分区表的总入口还是一个MySQL示例。从而导致它的并发能力非常一般,远远达不到互联网高并发的要求!
分库分表
分库分表是为了解决数据量过大而导致数据库性能下降的问题,一般而言当单表的数据量达到1000w行或100G以后,由于查询维度较多,即使添加从库和索引,很多操作性能性能仍然下降严重。
分库分表:
- 垂直分库
- 垂直