理解mysql_分库分表的一些认识

垂直切分:
    垂直分表: 将原有表中的字段拆分成多个表
    垂直分库: 微服务中盛行, 每个业务子系统有自己独立的数据库。
                   好处:结构清晰
                   缺点:增加系统复杂度,需要各个系统对外暴露接口。

水平切分:
       水平分表: 表结构一致。 将原有记录按一定规律拆分到多个相同结构的表里面去。通常是用hash取模的方式来实现。
       水平分库分表: 将相同表结构分拆到不同数据库里面去。

分库分表带来的问题和解决方案:
  ● 主键id的问题
            采用单库单表的id生成规则,会出现主键冲突的情况。 即要兼顾索引性能、又要考虑唯一。通常的做法有以下几种:
            1、借助redis来生成全局唯一的主键id
            2、采用64 位UUID做唯一主键
            方法2占用空间大,不建议使用。
            考虑到路由,在主键信息里面需要包含机器id。
  ● join查询问题
            列表查询不显示总页数,也不做多个表的union,只查询某个表的记录信息。
            记录明细查询, 需要在应用程序代码层面上去做适配, 根据主键id去定位需要到哪台设备上去找数据。 前提是要求主键id需要包含机器id。
  ● 事务控制问题
            采用二阶段提交的方式控制事务。涉及到服务服务化提供,需要注意服务提供的幂等性控制。
  ● 报表统计问题
              现在流行的做法是离线分析、流式计算根据模板出报表。

猜你喜欢

转载自maozhr520.iteye.com/blog/2384771