多维度架构之分库分表
分库和分表是架构必经之路,我想问问你是怎么分库和分表?
很多系统在设计之初就没有考虑过后期的分库与分表,甚至开发团队没有架构和DBA人员,开发团队也比较年轻,对于数据库的架构定义非常随意,满足当前需求即可。
实际上数据库结构等同于建筑里面的地基,地基没有打好,后面的优化都是徒劳的,最终不得不重构数据库结构。
那么你是怎样分库分表的?
切分策略
数据的切分策略有两种方式,分别是:水平(横向)切分和垂直(纵向)切分。
技术手段也有四种方法,分别是:类别、范围、Hash和冷热数据。
一旦使用了分库分表技术,后面的很多技术就受到影响,技术上就要妥协。
垂直切分
将某个分类数据,某个范围内的数据或者符合Hash值的数据存储到不同的数据库或者表中。
垂直切分的优点:缩小单表结果集,提高查询速度
垂直切分的缺点:索引不连续,必须合并查询,很多SQL语句会受到限制,例如join(原本不需要),count,order by,事务处理变得复杂。
水平切分
由于数据表字段太多,对于大型系统也会产生负担,水平切分就是将表中的某些字段独立到新的表中,然后通过一对一外键关联两张表。
水平切分优点:缩小结果集,对于使用 select * 返回数据的查询立