分库分表
业界方案问题
垂直拆分
优点:降低负载,提高可用性
缺点:
- 无法降低单表数据量
- 不能无限扩容
- 存在单点故障
- join 等多表操作受限
- 存在跨库事务
水平拆分
优点:
- 降低单表数据量
- 理论上可无限扩容(NoSQL 通常采取这种方案)
- 不存在单点故障
缺点:
- join 等多表操作进一步受限
- 存在跨库事务
- 扩容成本高
如何分
hash 分表
常见的分表方案。
range 分表
建立时间 range,按 range 分表。
混合分表
先 hash,再 range。
怎么查
- SQL 路由(route)和结果合并(merge)
- 多表 join
- 多维度查询
- 跨库事务
路由要定义 dsl,用语言解析表达式。
做广播表的查询的结果就是一张逻辑表查询转成多张表查询。
如果要做无分表键的查询,不如做影子表做侧维度。但影子表依赖于数据迁移服务。数据迁移服务的存在在日常的数据库运维中非常重要,它可以支持任意的 etl 的形式来同步异构数据。但这会带来成本上的坑。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.