33 lines
992 B
Markdown
33 lines
992 B
Markdown
# 分表实现
|
|
|
|
首先定义一个`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`方法是操作查询的时候,通过查询条件返回的表名的方法 |