# 负载策略
通过xorm.NewEngineGroup创建EngineGroup时,第三个参数为policies,我们可以通过该参数来指定Slave访问的负载策略。如创建EngineGroup时未指定,则默认使用轮询的负载策略。
xorm中内置五种负载策略,分别为随机访问负载策略,权重随机访问负载策略,轮询访问负载策略,权重轮询访问负载策略和最小连接数访问负载策略。开发者也可以通过实现GroupPolicy接口,来实现自定义负载策略。
1. 随机访问负载策略
~~~
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
conns := []string{
"postgres://postgres:root@localhost:5432/test?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test1?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test2?sslmode=disable",
}
var err error
eg, err = xorm.NewEngineGroup("postgres", conns, xorm.RandomPolicy())
}
~~~
2. 权重随机访问负载策略
~~~
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
conns := []string{
"postgres://postgres:root@localhost:5432/test?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test1?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test2?sslmode=disable",
}
var err error
//此时设置的test1数据库和test2数据库的随机访问权重为2和3
eg, err = xorm.NewEngineGroup("postgres", conns, xorm.WeightRandomPolicy([]int{2, 3}))
}
~~~
3. 轮询访问负载策略
~~~
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
conns := []string{
"postgres://postgres:root@localhost:5432/test?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test1?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test2?sslmode=disable",
}
var err error
eg, err = xorm.NewEngineGroup("postgres", conns, xorm.RoundRobinPolicy())
}
~~~
4. 权重轮询访问负载策略
~~~
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
conns := []string{
"postgres://postgres:root@localhost:5432/test?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test1?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test2?sslmode=disable",
}
var err error
//此时设置的test1数据库和test2数据库的轮询访问权重为2和3
eg, err = xorm.NewEngineGroup("postgres", conns, xorm.WeightRoundRobinPolicy([]int{2, 3}))
}
~~~
5. 最小连接数访问负载策略
~~~
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
conns := []string{
"postgres://postgres:root@localhost:5432/test?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test1?sslmode=disable;",
"postgres://postgres:root@localhost:5432/test2?sslmode=disable",
}
var err error
eg, err = xorm.NewEngineGroup("postgres", conns, xorm.LeastConnPolicy())
}
~~~
6. 自定义负载策略
实现GroupPolicy接口来实现自定义负载策略。
~~~
type GroupPolicy interface {
Slave(*EngineGroup) *Engine
}
~~~
- xorm
- 创建Orm引擎
- 定义表结构体
- 名称映射规则
- 前缀映射,后缀映射和缓存映射
- 使用Table和Tag改变名称映射
- Column属性定义
- 表结构操作
- 获取数据库信息
- 表操作
- 创建索引和唯一索引
- 同步数据库结构
- 导入导出SQL脚本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相关功能API
- SqlMap配置文件及SqlTemplate模板加密存储及解析
- 手动管理SqlMap配置及SqlTemplate模板
- 插入数据
- ORM方式插入数据
- 执行SQL命令插入数据
- 创建时间Created
- 查询和统计数据
- ORM方式查询和统计数据
- 查询条件方法
- 临时开关方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查询
- 执行SQL查询
- 执行SQL查询的11种常用方式
- 查询返回json或xml字符串
- 链式查询据操返回某条记录的某个字段的值
- SqlTemplateClient执行过程
- 关于数据库分页查询
- 更新数据
- ORM方式更新数据
- Update方法
- 乐观锁Version
- 更新时间Updated
- 执行SQL命令更新数据
- 删除数据
- ORM方式删除数据
- Delete方法
- 软删除Deleted
- 执行SQL命令删除数据
- 事务处理
- 简单事务模型
- 嵌套事务模型
- 八种事务类型及事务传播机制
- 简单事务相关API
- 嵌套事务相关API
- 嵌套事务示例代码
- 主从数据库(Master/Slave)读写分离
- 创建引擎组
- 负载策略
- 引擎组其他配置方法
- 数据库读写分离
- 批量混合SQL操作
- SQL Builder
- 缓存
- 事件
- 数据导出
- Dump数据库结构和数据
- 查询结果集导出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet页数据导出
- 日志
- 连接池
- xorm 工具
- 常见问题
- 感谢支持