第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 golang 中使用全局 mongo (mgo) 數(shù)據(jù)庫(kù)有什么缺點(diǎn)?

在 golang 中使用全局 mongo (mgo) 數(shù)據(jù)庫(kù)有什么缺點(diǎn)?

Go
慕工程0101907 2023-07-04 10:02:53
如果我們使用全局變量來(lái)處理數(shù)據(jù)庫(kù)操作而不是將其作為參數(shù)傳遞給函數(shù)和方法或?qū)⑵浯鎯?chǔ)為結(jié)構(gòu)中的字段,是否有任何缺點(diǎn)?這些缺點(diǎn)是什么(如果有的話)?假設(shè)我們?cè)谝粋€(gè)名為 Database 的項(xiàng)目中創(chuàng)建一個(gè)包,在該包內(nèi)定義一個(gè)名為 DB 的變量var DB *mgo.Database,然后在項(xiàng)目的 main 函數(shù)中用我們的 mongo 數(shù)據(jù)庫(kù)填充它:func main() {    session, err := mgo.Dial("localhost")    if err != nil {        fmt.Println(err)        return    }    database.DB = session.DB("mydatabase")    // project code    defer session.Close()}之后,我們使用database.DB與我們的數(shù)據(jù)庫(kù)進(jìn)行交互。請(qǐng)注意,將會(huì)有很多 goroutine 使用database.DB(如果有什么區(qū)別的話)該問題不基于意見,請(qǐng)花更多時(shí)間閱讀和理解我再次重復(fù)這個(gè)問題不是基于意見,請(qǐng)花更多時(shí)間閱讀和理解
查看完整描述

1 回答

?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

使用全局初始化的數(shù)據(jù)庫(kù)將其傳遞到需要的地方的過程是完善且合理的。


但是,只需database.DB以類似的方式使用


_ = database.DB.C(foo).Find(q).One(&bar)

整個(gè)地方有一個(gè)顯著的缺點(diǎn):您只使用底層連接池的一個(gè)連接,實(shí)際上確保了所有請(qǐng)求都按順序處理。


所以你更想做的是這樣的:


s := database.DB.Session.Copy()

_ = database.DB.C(foo).With(s).Find(q).One(&bar)

defer s.Close()

對(duì)于“并行”請(qǐng)求(有一些關(guān)于并行請(qǐng)求的警告,為了簡(jiǎn)潔起見,我省略了這些警告)。


查看完整回答
反對(duì) 回復(fù) 2023-07-04
  • 1 回答
  • 0 關(guān)注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)