在互联网系统中,随着业务的增长,数据量也随着同步增长。
这会带来新的大表问题。
例如,一张订单表,很有可能到了几亿甚至几十亿的级别,由此带来的写入和读取性能的下降,会成为业务不容忽视的因素。
那么,如何对这种大表进行拆分呢?
首先能想到的策略就是分库分表。
分库分表又分为垂直拆分和水平拆分两种。
垂直拆分,还是水平拆分?
垂直拆分
如果业务之间的数据可以相互隔离,互不影响,那么垂直拆分是一个很简单的方案。
例如,对于一个订阅通知的服务而言,可能有不同的业务在使用,每个业务有不同的页面,各个业务之间的数据毫无关系,那么,对于每个业务而言,数据量就有限了,很多时候垂直拆分就可以解决问题。
垂直拆分的优点:
1、数据天然隔离,没有全表查询问题
2、改造方案简单
垂直拆分的缺点:
1、数据不均匀,可能不能完美解决大表问题
水平拆分
另一种分库分表的方式是水平拆分。
水平拆分的原理,就是从业务字段中选择一个拆分的字段,在写的时候根据这个字段生成分表的编号,读的时候也根据这个查询条件决定去哪个表查询。
水平拆分也是业务常用的处理大表的方式,但水平拆分并不是毫无缺点的,需要使用水平分库分表,业务方必须要考虑以下问题: