我正在使用 Go 和 MongoDB 做關于 restAPI 的作業。但我仍然想知道:至于我是否應該在模型級別創建一個字典來存盤資料,它將幫助我更快地檢索資料而無需訪問 MongoDB。但是這里最大的問題是同步MongoDB下和我創建的字典中的資料。
在檔案 models/account.go 中我有一個結構帳戶,在 MongoDB 中我還有一個集合帳戶來保存網站的所有帳戶資訊。我應該創建 Accountlist 來將所有資料存盤在資料庫中以提高性能嗎?
來源如下:
var AccountList map[int]*Account
type Account struct {
ID int
UserName string
Password string
Email string
Role string
}
uj5u.com熱心網友回復:
與軟體中的許多事情一樣,“視情況而定”。
關于所涉及的系統、資料查詢、變異的頻率等方面的資訊不足,無法給出具體的答案。但因為這是作業,我們可以給出情景。
您問題的根源是:您應該快取資料庫中的結果嗎?
真的需要嗎?
在學術上,過度優化是可以的。您可以使用技術并了解它們的作業原理。在現實世界中,我們應該在實施之前了解對某事的需求在哪里。解決方案越復雜,做出正確的權衡就越重要。
當您要更頻繁地使用結果而不是更改它們時,快取是最好的,并且從存盤中獲取是昂貴的。
“昂貴”可能會有所不同。以秒為單位的一項操作可能會很昂貴。但也可以在 100 毫秒內完成數十、數百或數千個操作。
你應該怎么做?
你指出了幾個缺點。最重要的是:
但是這里最大的問題是同步MongoDB下和我創建的字典中的資料。
對于任何分布式系統來說,同步都是最重要的事情。
如果您有一個服務器實體,那么如何快取值并不重要。但是一旦你開始添加實體,事情就會變得復雜。
快取的常見模式是使用分布式鍵值存盤。它們允許您存盤可以在應用程式之間共享的結果 - 并使它們無效。
- 應用程式檢查密鑰是否存在于存盤中。
- 如果是這樣,請使用它。
- 如果沒有,則從源獲取并更新快取以備下次使用。
- 另外,在資料需要更新時使密鑰無效。
有很多產品可以使用。Redis 很流行,memcached 的作品。但是由于您使用的是 Go,請查看groupcache:https ://github.com/mailgun/groupcache 。它由 Google 撰寫以簡化dl.google.com,并由 Mailgun 擴展以支持 TTL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514598.html
標籤:mongodb休息去
