业界方案问题

垂直拆分

优点:降低负载,提高可用性

缺点:

  • 无法降低单表数据量
  • 不能无限扩容
  • 存在单点故障
  • join 等多表操作受限
  • 存在跨库事务

水平拆分

优点:

  • 降低单表数据量
  • 理论上可无限扩容(NoSQL 通常采取这种方案)
  • 不存在单点故障

缺点:

  • join 等多表操作进一步受限
  • 存在跨库事务
  • 扩容成本高

如何分

hash 分表

常见的分表方案。

range 分表

建立时间 range,按 range 分表。

混合分表

先 hash,再 range。

怎么查

  • SQL 路由(route)和结果合并(merge)
  • 多表 join
  • 多维度查询
  • 跨库事务

路由要定义 dsl,用语言解析表达式。

做广播表的查询的结果就是一张逻辑表查询转成多张表查询。

如果要做无分表键的查询,不如做影子表做侧维度。但影子表依赖于数据迁移服务。数据迁移服务的存在在日常的数据库运维中非常重要,它可以支持任意的 etl 的形式来同步异构数据。但这会带来成本上的坑。