- 非侵入式设计, 加载插件,指定配置,既可实现分表。
- 轻快, 非基于网络层的中间件,像 Go 一样快
- 支持多种数据库。 PostgreSQL 已通过测试,MySQL 和 SQLite 也在路上。
- 多种主键生成方式支持(Snowflake, PostgreSQL Sequence, 以及自定义支持)Snowflake 支持从主键中确定分表键。
使用说明
// GORM 创建示例,这会插入到 orders_02 表
db.Create(&Order{UserID: 2})
// sql: INSERT INTO orders_2 ...
// 原生 SQL 插入示例,这会插入到 orders_03 表
// 这会抛出 ErrMissingShardingKey 错误,因此此处没有提供 sharding key
fmt.Println(err)
// Find 方法,这会检索 order_02 表
var orders []Order
db.Model(&Order{}).Where("user_id", int64(2)).Find(&orders)
fmt.Printf("%#v\n", orders)
fmt.Printf("%#v\n", orders)
// 这会抛出 ErrMissingShardingKey 错误,因为 WHERE 条件没有包含 sharding key
err = db.Model(&Order{}).Where("product_id", "1").Find(&orders).Error
fmt.Println(err)
// Update 和 Delete 方法与创建、查询类似
db.Exec("UPDATE orders SET product_id = ? WHERE user_id = ?", 2, int64(3))