日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame數(shù)據(jù)庫ORM-使用配置

配置文件

我們推薦使用配置組件來管理數(shù)據(jù)庫配置,并使用?g?對(duì)象管理模塊中的?g.DB?("數(shù)據(jù)庫分組名稱")方法獲取數(shù)據(jù)庫操作對(duì)象,數(shù)據(jù)庫對(duì)象將會(huì)自動(dòng)讀取配置組件中的相應(yīng)配置項(xiàng),并自動(dòng)初始化該數(shù)據(jù)庫操作的單例對(duì)象。數(shù)據(jù)庫配置管理功能使用的是配置管理組件實(shí)現(xiàn)(配置組件采用接口化設(shè)計(jì)默認(rèn)使用文件系統(tǒng)實(shí)現(xiàn)),同樣支持多種數(shù)據(jù)格式如:?toml/yaml/json/xml/ini?。默認(rèn)并且推薦的配置文件數(shù)據(jù)格式為?yaml?。

成都創(chuàng)新互聯(lián)長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為寶山企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站制作,寶山網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

簡單配置

一個(gè)簡單的數(shù)據(jù)庫配置如下:

database:
  default:
    type:  "mysql"
    link:  "root:12345678@tcp(127.0.0.1:3306)/test"
  user:
    type:  "mysql"
    link:  "root:12345678@tcp(127.0.0.1:3306)/user"

也可以將?type?數(shù)據(jù)庫類型寫到?link?配置項(xiàng)中,以上簡化為:

database:
  default:
    link:  "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  user:
    link:  "mysql:root:12345678@tcp(127.0.0.1:3306)/user"

不同數(shù)據(jù)類型對(duì)應(yīng)的?link?如下:

 類型  link配置  更多參數(shù)
 ?mysql?  mysql: 賬號(hào):密碼@tcp(地址:端口)/數(shù)據(jù)庫名稱  mysql
 ?pgsql?  pgsql: user=賬號(hào) password=密碼 host=地址 port=端口 dbname=數(shù)據(jù)庫名稱  pq
 ?mssql?   mssql: user id=賬號(hào);password=密碼;server=地址;port=端口;database=數(shù)據(jù)庫名稱;encrypt=disable  GO-mssqldb
 ?sqlite?  sqlite: 文件絕對(duì)路徑 (如: /var/lib/db.sqlite3)  go-sqlite3
 ?oracle?  oracle: 賬號(hào)/密碼@地址:端口/數(shù)據(jù)庫名稱  go-oci8

完整配置

完整的?config.yaml?數(shù)據(jù)庫配置項(xiàng)的數(shù)據(jù)格式形如下:

database:
  分組名稱:
    host:                  "地址"
    port:                  "端口"
    user:                  "賬號(hào)"
    pass:                  "密碼"
    name:                  "數(shù)據(jù)庫名稱"
    type:                  "數(shù)據(jù)庫類型(mysql/pgsql/mssql/sqlite/oracle)"
    link:                  "(可選)自定義數(shù)據(jù)庫鏈接信息,當(dāng)該字段被設(shè)置值時(shí),以上鏈接字段(Host,Port,User,Pass,Name)將失效,但是type必須有值"         
    role:                  "(可選)數(shù)據(jù)庫主從角色(master/slave),不使用應(yīng)用層的主從機(jī)制請(qǐng)均設(shè)置為master"
    debug:                 "(可選)開啟調(diào)試模式"
    prefix:                "(可選)表名前綴"
    dryRun:                "(可選)ORM空跑(只讀不寫)"
    charset:               "(可選)數(shù)據(jù)庫編碼(如: utf8/gbk/gb2312),一般設(shè)置為utf8"
    weight:                "(可選)負(fù)載均衡權(quán)重,用于負(fù)載均衡控制,不使用應(yīng)用層的負(fù)載均衡機(jī)制請(qǐng)置空"
    timezone:              "(可選)時(shí)區(qū)配置,例如:local"
    maxIdle:               "(可選)連接池最大閑置的連接數(shù)"
    maxOpen:               "(可選)連接池最大打開的連接數(shù)"
    maxLifetime:           "(可選)連接對(duì)象可重復(fù)使用的時(shí)間長度"
    createdAt:             "(可選)自動(dòng)創(chuàng)建時(shí)間字段名稱"
    updatedAt:             "(可選)自動(dòng)更新時(shí)間字段名稱"
    deletedAt:             "(可選)軟刪除時(shí)間字段名稱"
    timeMaintainDisabled:  "(可選)是否完全關(guān)閉時(shí)間更新特性,true時(shí)CreatedAt/UpdatedAt/DeletedAt都將失效"

完整的數(shù)據(jù)庫配置項(xiàng)示例(?YAML?):

database:
  default:
    host:          "127.0.0.1"
    port:          "3306"
    user:          "root"
    pass:          "12345678"
    name:          "test"
    type:          "mysql"
    role:          "master"
    debug:         "true"
    dryrun:        0
    weight:        "100"
    prefix:        "gf_"
    charset:       "utf8"
    timezone:      "local"
    maxIdle:       "10"
    maxOpen:       "100"
    maxLifetime:   "30s"

使用該配置方式時(shí),為保證數(shù)據(jù)庫安全,默認(rèn)底層不支持多行?SQL?語句執(zhí)行。為了得到更多配置項(xiàng)控制,請(qǐng)參考推薦的簡化配置,同時(shí)建議您務(wù)必了解清楚簡化配置項(xiàng)中每個(gè)連接參數(shù)的功能作用。

集群模式

?gdb?的配置支持集群模式,數(shù)據(jù)庫配置中每一項(xiàng)分組配置均可以是多個(gè)節(jié)點(diǎn),支持負(fù)載均衡權(quán)重策略,例如:

database:
  default:
  - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
    role: "master"
  - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
    role: "slave"

  user:
  - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
    role: "master"
  - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
    role: "slave"
  - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
    role: "slave"

日志配置

?gdb?支持日志輸出,內(nèi)部使用的是?glog.Logger?對(duì)象實(shí)現(xiàn)日志管理,并且可以通過配置文件對(duì)日志對(duì)象進(jìn)行配置。默認(rèn)情況下?gdb?關(guān)閉了?DEBUG?日志輸出,如果需要打開?DEBUG?信息需要將數(shù)據(jù)庫的?debug?參數(shù)設(shè)置為?true?。以下是為一個(gè)配置文件示例:

database:
  logger:
    path:    "/var/log/gf-app/sql"
    level:   "all"
    stdout:  true
  default:
    link:    "mysql:root:12345678@tcp(127.0.0.1:3306)/user_center"
    debug:   true

其中?database.logger?即為?gdb?的日志配置,當(dāng)該配置不存在時(shí),將會(huì)使用日志組件的默認(rèn)配置。

需要注意:由于?ORM?底層都是采用安全的預(yù)處理執(zhí)行方式,提交到底層的?SQL?與參數(shù)其實(shí)是分開的,因此日志中記錄的完整?SQL?僅作參考方便人工閱讀,并不是真正提交到底層的?SQL?語句。

原生配置(高階,可選)

以下為數(shù)據(jù)庫底層管理配置介紹,如果您對(duì)數(shù)據(jù)庫的底層配置管理比較感興趣,可繼續(xù)閱讀后續(xù)章節(jié)。

數(shù)據(jù)結(jié)構(gòu)

?gdb?數(shù)據(jù)庫管理模塊的內(nèi)部配置管理數(shù)據(jù)結(jié)構(gòu)如下:

type Config      map[string]ConfigGroup // 數(shù)據(jù)庫配置對(duì)象
type ConfigGroup []ConfigNode           // 數(shù)據(jù)庫分組配置
// 數(shù)據(jù)庫配置項(xiàng)(一個(gè)分組配置對(duì)應(yīng)多個(gè)配置項(xiàng))
type ConfigNode  struct {
    Host             string        // 地址
    Port             string        // 端口
    User             string        // 賬號(hào)
    Pass             string        // 密碼
    Name             string        // 數(shù)據(jù)庫名稱
    Type             string        // 數(shù)據(jù)庫類型:mysql, sqlite, mssql, pgsql, oracle
Link string // (可選)自定義鏈接信息,當(dāng)該字段被設(shè)置值時(shí),以上鏈接字段(Host,Port,User,Pass,Name)將失效(該字段是一個(gè)擴(kuò)展功能) Role string // (可選,默認(rèn)為master)數(shù)據(jù)庫的角色,用于主從操作分離,至少需要有一個(gè)master,參數(shù)值:master, slave Debug bool // (可選)開啟調(diào)試模式 Charset string // (可選,默認(rèn)為 utf8)編碼,默認(rèn)為 utf8 Prefix string // (可選)表名前綴 Weight int // (可選)用于負(fù)載均衡的權(quán)重計(jì)算,當(dāng)集群中只有一個(gè)節(jié)點(diǎn)時(shí),權(quán)重沒有任何意義 MaxIdleConnCount int // (可選)連接池最大閑置的連接數(shù) MaxOpenConnCount int // (可選)連接池最大打開的連接數(shù) MaxConnLifetime time.Duration // (可選,單位秒)連接對(duì)象可重復(fù)使用的時(shí)間長度 }

?ConfigNode?用于存儲(chǔ)一個(gè)數(shù)據(jù)庫節(jié)點(diǎn)信息;?ConfigGroup?用于管理多個(gè)數(shù)據(jù)庫節(jié)點(diǎn)組成的配置分組(一般一個(gè)分組對(duì)應(yīng)一個(gè)業(yè)務(wù)數(shù)據(jù)庫集群);?Config?用于管理多個(gè)?ConfigGroup?配置分組。

配置管理特點(diǎn):

  1. 支持多節(jié)點(diǎn)數(shù)據(jù)庫集群管理;
  2. 每個(gè)節(jié)點(diǎn)可以單獨(dú)配置連接屬性;
  3. 采用單例模式管理數(shù)據(jù)庫實(shí)例化對(duì)象;
  4. 支持對(duì)數(shù)據(jù)庫集群分組管理,按照分組名稱獲取實(shí)例化的數(shù)據(jù)庫操作對(duì)象;
  5. 支持多種關(guān)系型數(shù)據(jù)庫管理,可通過?ConfigNode.Type?屬性進(jìn)行配置;
  6. 支持?Master-Slave?讀寫分離,可通過?ConfigNode.Role?屬性進(jìn)行配置;
  7. 支持客戶端的負(fù)載均衡管理,可通過?ConfigNode.Weight?屬性進(jìn)行配置,值越大,優(yōu)先級(jí)越高;

特別說明,?gdb?的配置管理最大的特點(diǎn)是,(同一進(jìn)程中)所有的數(shù)據(jù)庫集群信息都使用同一個(gè)配置管理模塊進(jìn)行統(tǒng)一維護(hù),不同業(yè)務(wù)的數(shù)據(jù)庫集群配置使用不同的分組名稱進(jìn)行配置和獲取。

配置方法

這是原生調(diào)用?gdb?模塊來配置管理數(shù)據(jù)庫。如果開發(fā)者想要自行控制數(shù)據(jù)庫配置管理可以參考以下方法。若無需要可忽略該章節(jié)。

接口文檔: https://pkg.go.dev/github.com/gogf/gf/v2/database/gdb

// 添加一個(gè)數(shù)據(jù)庫節(jié)點(diǎn)到指定的分組中
func AddConfigNode(group string, node ConfigNode)
// 添加一個(gè)配置分組到數(shù)據(jù)庫配置管理中(同名覆蓋) func AddConfigGroup(group string, nodes ConfigGroup) // 添加一個(gè)數(shù)據(jù)庫節(jié)點(diǎn)到默認(rèn)的分組中(默認(rèn)為default,可修改) func AddDefaultConfigNode(node ConfigNode)
// 添加一個(gè)配置分組到數(shù)據(jù)庫配置管理中(默認(rèn)分組為default,可修改) func AddDefaultConfigGroup(nodes ConfigGroup) // 設(shè)置默認(rèn)的分組名稱,獲取默認(rèn)數(shù)據(jù)庫對(duì)象時(shí)將會(huì)自動(dòng)讀取該分組配置 func SetDefaultGroup(groupName string) // 設(shè)置數(shù)據(jù)庫配置為定義的配置信息,會(huì)將原有配置覆蓋 func SetConfig(c Config)

默認(rèn)分組表示,如果獲取數(shù)據(jù)庫對(duì)象時(shí)不指定配置分組名稱,那么?gdb?默認(rèn)讀取的配置分組。例如:?gdb.NewByGroup()?可獲取一個(gè)默認(rèn)分組的數(shù)據(jù)庫對(duì)象。簡單的做法,我們可以通過?gdb?包的?SetConfig?配置管理方法進(jìn)行自定義的數(shù)據(jù)庫全局配置,例如:

gdb.SetConfig(gdb.Config {
    "default" : gdb.ConfigGroup {
        gdb.ConfigNode {
            Host     : "192.168.1.100",
            Port     : "3306",
            User     : "root",
            Pass     : "123456",
            Name     : "test",
            Type     : "mysql",
            Role     : "master",
            Weight   : 100,
        },
        gdb.ConfigNode {
            Host     : "192.168.1.101",
            Port     : "3306",
            User     : "root",
            Pass     : "123456",
            Name     : "test",
            Type     : "mysql",
            Role     : "slave",
            Weight   : 100,
        },
    },
    "user-center" : gdb.ConfigGroup {
        gdb.ConfigNode {
            Host     : "192.168.1.110",
            Port     : "3306",
            User     : "root",
            Pass     : "123456",
            Name     : "test",
            Type     : "mysql",
            Role     : "master",
            Weight   : 100,
        },
    },
})

隨后,我們可以使用?gdb.NewByGroup("數(shù)據(jù)庫分組名稱")?來獲取一個(gè)數(shù)據(jù)庫操作對(duì)象。該對(duì)象用于后續(xù)的數(shù)據(jù)庫一系列方法/鏈?zhǔn)讲僮鳌?/p>
文章標(biāo)題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame數(shù)據(jù)庫ORM-使用配置
鏈接分享:http://www.5511xx.com/article/ccejgid.html