分库分表

随着业务的增长,数据库的数据量肯定也会随之增长,对MySQL来说,单表数据量在百万级别内存的读取效率还是可以的,但是当到达千万级别时效率会有较大降低,如果是复杂的查询操作,组合索引对于内存来说也是一笔很大的开销,这时就要从数据库层面优化,而常见的方式就是分库分表。

一、垂直拆分

表结构不一样

垂直分库:专库专用,按照业务将表进行分类,分布到不同的数据库上面,这种拆分往往伴随着服务化的改造,按功能模块将原来强耦合的系统拆分成多个弱耦合的服务,如订单服务、商品服务、交易服务,每个服务都有自己的库,存放业务相关的表。

垂直分表:这是针对数据表列进行拆分,表中列过多或者某些字段过长,占用空间较大,检索表的时候需要执行大量的IO,需要将长度较长的字段进行拆分,单独成表,用原表主键进行唯一标示。

优点:拆分后业务清晰、数据维护简单;

           数据冷热分离、减少IO次数,提高检索效率;

缺点:部分业务表无法jion,需要接口实现、提高业务复杂性;

           事务处理复杂;

二、水平拆分

分库分表,数据结构相同,按行数据以某种规则拆分到不同库或表中。

拆分规则:取模:找到某个字段,以某个字段取模后尽可能平均分布在不同的表中;(数据尽可能均匀,扩展麻烦)

                  日期:按指定日期放到指定的表中;(扩展容易,数据可能不均匀)

优点:解决单表单库数据量大、热点访问性能瓶颈的问题;

缺点:拆分规则相对复杂;

           人为手工定位数据复杂;

           数据多次扩展和数据迁移难度大;

小结:

  • 数据表垂直拆分: 降低单表复杂度
  • 数据库垂直拆分: 功能拆分
  • 水平拆分:分表:解决单表大数据量问题。分库:为了解决单库性能问题。

 

posted @ 2018-07-25 11:44  提拉米苏007  阅读(177)  评论(0编辑  收藏  举报