亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 golang 中使用全局 mongo (mgo) 數據庫有什么缺點?

在 golang 中使用全局 mongo (mgo) 數據庫有什么缺點?

Go
慕工程0101907 2023-07-04 10:02:53
如果我們使用全局變量來處理數據庫操作而不是將其作為參數傳遞給函數和方法或將其存儲為結構中的字段,是否有任何缺點?這些缺點是什么(如果有的話)?假設我們在一個名為 Database 的項目中創建一個包,在該包內定義一個名為 DB 的變量var DB *mgo.Database,然后在項目的 main 函數中用我們的 mongo 數據庫填充它: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與我們的數據庫進行交互。請注意,將會有很多 goroutine 使用database.DB(如果有什么區別的話)該問題不基于意見,請花更多時間閱讀和理解我再次重復這個問題不是基于意見,請花更多時間閱讀和理解
查看完整描述

1 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

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


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


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

整個地方有一個顯著的缺點:您只使用底層連接池的一個連接,實際上確保了所有請求都按順序處理。


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


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

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

defer s.Close()

對于“并行”請求(有一些關于并行請求的警告,為了簡潔起見,我省略了這些警告)。


查看完整回答
反對 回復 2023-07-04
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號