rest/plugins/sharding
fancl 61ffcec858 初始化仓库 2024-12-11 17:29:01 +08:00
..
README.md 初始化仓库 2024-12-11 17:29:01 +08:00
condition.go 初始化仓库 2024-12-11 17:29:01 +08:00
scope.go 初始化仓库 2024-12-11 17:29:01 +08:00
sharding.go 初始化仓库 2024-12-11 17:29:01 +08:00
sharding_test.go 初始化仓库 2024-12-11 17:29:01 +08:00
types.go 初始化仓库 2024-12-11 17:29:01 +08:00

README.md

分表实现

首先定义一个gorm的模型,然后实现shadring.Model接口,比如如下示例

// 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方法是操作查询的时候,通过查询条件返回的表名的方法