多维度架构之分库分表netkiller:多维度架构之分库分表zhuanlan.zhihu.com
分库和分表是架构必经之路,我想问问你是怎么分库和分表?
很多系统在设计之初就没有考虑过后期的分库与分表,甚至开发团队没有架构和DBA人员,开发团队也比较年轻,对于数据库的架构定义非常随意,满足当前需求即可。
实际上数据库结构等同于建筑里面的地基,地基没有打好,后面的优化都是徒劳的,最终不得不重构数据库结构。
那么你是怎样分库分表的?
任何系统数据流都是漏斗形状的,数据库是漏斗末端,架构设计是尽量在前端计算,合并,拆分,分流,缓存,最终将有价值的数据写入数据库。数据库的访问是结果集越小越好。
基于这种认识,通常分库和分表,我们想到的就是首先垂直分表,这种方式简单易操作。
当前(本年度数据库)(热数据)
2019年数据
2018年数据
以此类推
或者按照月份分表
当前(热数据)
10月数据
9月数据
以此类推
这样分表可以缩小结果集,能快速解决查询瓶颈问题。但是新的挑战来了,由于分表后,索引是独立不连续的,历史数据的查询或遍历数据变的复杂了,要么使用联合查询,