1. 分表概念
单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
也有一种策略是冷热分表。
1.1 分表策略
垂直分表: 将一张包含多个字段的表按照字段功能进行拆分,提高查询效率和减少冗余数据。
水平分表:按照数据的某个维度(如时间范围)进行拆分,将数据分散到多个表中,提高查询和写入性能。
1.2 分表算法
分片键是用来决定数据分布的依据,选择合适的分片键可以使数据均匀分布并提高查询性能。常见的分片键有用户 ID、时间戳等。
选定了分表键之后,经过算法处理后,得到的结果一定是一致的,不可变的。
通常情况下,当我们对 order 表进行分表的时候,比如我们要分成 128 张表的话,那么得到的 128 表应该是:order_0000、order_0001、order_0002…..order_0126、order_0127
2. Gorm 分表中间件
参考我的仓库: (https://github.com/unix2dos/sharding)
在gorm分表中间件的基础上,修改了以下问题。
- 修改了 DoubleWrite 开启后,查询也是双查的问题。(https://github.com/go-gorm/sharding/issues/115)
- 修改了分表插件,不同表只能支持同一个分表配置的问题。
2.1 使用
1 | func main() { |