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

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

數據庫中的所有數據都應該映射到模型嗎?

數據庫中的所有數據都應該映射到模型嗎?

Go
米脂 2023-02-28 20:31:54
我正在使用 Go 和 MongoDB 在 restAPI 上做作業。但我仍然想知道:至于我是否應該創建一個字典來存儲模型級別的數據,這將幫助我在不訪問 MongoDB 的情況下更快地檢索數據。但是這里最大的問題是同步MongoDB下的數據和我創建的字典里的數據。在文件 models/account.go 中我有一個 struct Account ,在 MongoDB 中我也有一個 collection Account 來保存網站的所有賬戶信息。我應該創建 Accountlist 來存儲數據庫中的所有數據以提高性能嗎?來源如下:var AccountList map[int]*Accounttype Account struct {    ID       int    UserName string    Password string    Email    string    Role     string}
查看完整描述

1 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

與軟件中的許多事情一樣,“視情況而定”。

關于所涉及的系統、數據被查詢、修改的頻率等方面的信息不足,無法給出具體的答案。但是因為這是作業,我們可以給出場景。

你的問題的根源是:你應該緩存數據庫中的結果嗎?

真的需要嗎?

在學術上,過度優化是可以的。您可以使用技術并了解它們的工作原理。在現實世界中,我們應該在實施之前了解對某些東西的需求在哪里。解決方案越復雜,做出正確的權衡就變得越重要。

當您要更頻繁地使用結果而不是更改結果時,緩存是最好的,并且從存儲中獲取是昂貴的。

“昂貴”可能會有所不同。以秒為單位的一項操作可能代價高昂。但以 100 毫秒為單位測量的數十、數百或數千個操作也可以如此。

你應該怎么做?

你指出了幾個缺點。最重要的是:

但是這里最大的問題是同步MongoDB下的數據和我創建的字典里的數據。

同步對于任何分布式系統來說都是最重要的事情。

如果您只有一個服務器實例,那么您如何緩存值并不重要。但是一旦開始添加實例,事情就會變得復雜。

一種常見的緩存模式是使用分布式鍵值存儲。它們允許您存儲可以在應用程序之間共享的結果——并使它們無效。

  • 應用程序檢查存儲中是否存在密鑰。

  • 如果是這樣,請使用它。

  • 如果不是,則從源中獲取并為下次更新緩存。

  • 另外,在數據需要更新時使密鑰無效。

有很多產品可供使用。Redis 很流行,memcached 很管用。但由于您使用的是 Go,請查看groupcachehttps://github.com/mailgun/groupcache。它由 Google 編寫以簡化dl.google.com,并由 Mailgun 擴展以支持 TTL。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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