# 創建引擎組
在xorm中,通過創建引擎組EngineGroup來實現對從數據庫(Master/Slave)讀寫分離的支持。在[創建引擎](http://www.hmoore.net/xormplus/xorm/167078)章節中,我們已經介紹過了,在xorm里面,可以同時存在多個Orm引擎,一個Orm引擎稱為Engine,一個Engine一般只對應一個數據庫,而EngineGroup一般則對應一組數據庫。EngineGroup通過調用xorm.NewEngineGroup生成,如:
~~~
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)
}
~~~
or
~~~
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
var err error
master, err := xorm.NewEngine("postgres", "postgres://postgres:root@localhost:5432/test?sslmode=disable")
if err != nil {
return
}
slave1, err := xorm.NewEngine("postgres", "postgres://postgres:root@localhost:5432/test1?sslmode=disable")
if err != nil {
return
}
slave2, err := xorm.NewEngine("postgres", "postgres://postgres:root@localhost:5432/test2?sslmode=disable")
if err != nil {
return
}
slaves := []*xorm.Engine{slave1, slave2}
eg, err = xorm.NewEngineGroup(master, slaves)
}
~~~
創建完成EngineGroup之后,并沒有立即連接數據庫,此時可以通過eg.Ping()來進行數據庫的連接測試是否可以連接到數據庫,該方法會依次調用引擎組中每個Engine的Ping方法。另外對于某些數據庫有連接超時設置的,可以通過起一個定期Ping的Go程來保持連接鮮活。EngineGroup可以通過eg.Close()來手動關閉,但是一般情況下可以不用關閉,在程序退出時會自動關閉。
* NewEngineGroup方法
`func NewEngineGroup(args1 interface{}, args2 interface{}, policies ...GroupPolicy) (*EngineGroup, error)`
前兩個參數的使用示例如上,有兩種模式。
模式一:通過給定DriverName,DataSourceName來創建引擎組,每個引擎使用相同的Driver。每個引擎的DataSourceNames是[]string類型,第一個元素是Master的DataSourceName,之后的元素是Slave的DataSourceName。
模式一:通過給定`*xorm.Engine`,`[]*xorm.Engine`來創建引擎組,每個引擎可以使用不同的Driver。第一個參數為Master的`*xorm.Engine`,第二個參數為Slave的`[]*xorm.Engine`。
>NewEngineGroup方法,第三個參數為`policies`,為Slave給定負載策略,該參數將在[負載策略](http://www.hmoore.net/xormplus/xorm/413727)章節詳細介紹,如示例中未指定,則默認為輪詢負載策略。
* Master方法
`func (eg *EngineGroup) Master() *Engine`
返回Master數據庫引擎
* Slave方法
`func (eg *EngineGroup) Slave() *Engine`
依據給定的負載策略返回一個Slave數據庫引擎
* Slaves方法
`func (eg *EngineGroup) Slaves() []*Engine`
返回所以Slave數據庫引擎
* GetSlave方法
`func (eg *EngineGroup) GetSlave(i int) *Engine`
依據一組Slave數據庫引擎`[]*xorm.Engine`下標返回指定Slave數據庫引擎。通過給定DriverName,DataSourceName來創建引擎組,則DataSourceName的第二個元素的數據庫為下標0的Slave數據庫引擎。
* SetPolicy方法
`func (eg *EngineGroup) SetPolicy(policy GroupPolicy) *EngineGroup`
設置引擎組負載策略
- 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 工具
- 常見問題
- 感謝支持