Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrInvalidID = errors.New("invalid id format") ErrIDGeneratorNotFound = errors.New("id generator not found") ErrShardingModelNotFound = errors.New("sharding table model not found when migrating") ErrDiffSuffixDML = errors.New("can not query different suffix table in one sql") ErrMissingShardingKey = errors.New("sharding key required and use operator =") ErrColumnAndExprMisMatch = errors.New("column names and expressions mismatch") )
Functions ¶
This section is empty.
Types ¶
type TableSharding ¶
type TableSharding interface {
gorm.Plugin
ShardingIDGen(ctx context.Context) (id uint64, err error)
ShardingByValues(ctx context.Context, src []map[string]any) (dst map[string][]map[string]any, err error)
ShardingByModelList(ctx context.Context, src ...any) (dst map[string][]any, err error)
}
func DefaultTableSharding ¶
func DefaultTableSharding(config TableShardingConfig) TableSharding
type TableShardingConfig ¶
type TableShardingConfig struct {
// Database name
Database string
// Table name
Table string
// ShardingKeys required, specifies the table columns you want to use for sharding the table rows.
// For example, for a product order table, you may want to split the rows by `user_id`.
ShardingKeys []string
// ShardingKeyExpr optional, specifies how to calculate sharding key by columns, e.g. tenant_id << 16 | user_id
ShardingKeyExpr gval.Evaluable
// ShardingKeyByRawValue optional, specifies sharding key with snake values, e.g. xxx_region1_az1, xxx_region1_az2
ShardingKeyByRawValue bool
// ShardingKeysForMigrating optional, specifies all sharding keys
ShardingKeysForMigrating []string
// NumberOfShards required, specifies how many tables you want to sharding.
NumberOfShards uint
// CustomSuffix optional, specifies shard table a custom suffix, e.g. user_%02d means <main_table_name>_user_01
CustomSuffix string
// PrimaryKeyGenerator optional, generates id if id is a sharding key and is zero
PrimaryKeyGenerator idgen.Generator
}
Click to show internal directories.
Click to hide internal directories.