rest/plugins/sharding/README.md

33 lines
992 B
Markdown
Raw Permalink Normal View History

2024-12-11 17:29:01 +08:00
# 分表实现
首先定义一个`gorm`的模型,然后实现`shadring.Model`接口,比如如下示例
```go
// ShardingTable 返回增删改时候操作的数据表
func (model *CdrLog) ShardingTable(scene string) string {
return model.TableName()
}
// ShardingTables 返回查询时候一个范围内的表
func (model *CdrLog) ShardingTables(ctx *sharding.Context) []string {
var (
timestamp int64
)
timeRange := make([]int64, 0)
values := ctx.FindColumnValues("start_stamp")
if len(values) == 0 {
values = ctx.FindColumnValues("create_stamp")
}
if len(values) > 0 {
for _, v := range values {
timestamp, _ = strconv.ParseInt(fmt.Sprint(v), 10, 64)
timeRange = append(timeRange, timestamp)
}
}
return shard.DateTableNames(ctx.Context(), "cdr_logs", shard.ShardTypeDateMonth, timeRange)
}
```
`ShardingTable`方法是操作增删改的是回调具体表名的方法
`ShardingTables`方法是操作查询的时候,通过查询条件返回的表名的方法