浅谈分库分表的“读扩散”问题
分库分表
我们平时做项目开发。一开始,通常都先用一张数据表,而一般来说数据表写到2kw条数据之后,底层B+树的层级结构就可能会变高,不同层级的数据页一般都放在磁盘里不同的地方,换言之,磁盘IO就会增多,带来的便是查询性能变差。
于是,当我们单表需要管理的数据变得越来越多,就不得不考虑数据库分表。而这里的分表,分为水平分表和垂直分表。
垂直分表的原理比较简单,一般就是把某几列拆成一个新表,这样单行数据就会变小,B+树里的单个数据页(固定16kb)内能放入的行数就会变多,从而使单表能放入更多的数据。
垂直分表没有太多可以说的点。下面,我们重点说说最常见的水平分表。
水平分表有好几种做法,但不管是哪种,本质上都是将原来的 user
表,变成 user_0, user1, user2 .... uerN
这样的N多张小表。
从读写一张user大表,变成读写 user_1 … userN 这样的N张小表。