2017-09-17 25 views
2

我需要一些關於如何在monogoDB中構建數據的建議。我有這個應用程序,用戶可以查看,添加,編輯和刪除信用卡和借記卡交易。以下是數據的外觀。 Transactions Table管理數據庫中不斷變化的數據

這裏的餘額列是動態的。例如,如果某人添加了10-09-2017的交易日期,則此時餘額字段中的所有金額都需要更改以反映新的交易。現在,我沒有在數據庫中保存這個平衡字段,並且每當用戶加載頁面,重新加載頁面,以及編輯,刪除和添加事務時,都會計算它。現在速度很快,但我認爲,在將來,當用戶有很多交易時,它們將變慢,因爲這些計算需要在用戶顯示數據表之前完成。有沒有更有效的方法來做到這一點?

另外我正在客戶端進行計算,所以負載在客戶端的設備上,而不是在服務器上。我認爲如果它在服務器端,並且許多用戶開始使用它,那麼API請求會變得更慢並且在一段時間後不會無法使用。這是正確的方式嗎? PS:也很難確保讀者理解我的問題,但我已經盡力了。請讓我知道,如果我應該更詳細地解釋這一點,或者如果我應該添加更多的細節。

回答

2

這不是關於mongodb的問題,它是關於用戶界面的問題。 你真的會一次顯示整個交易歷史嗎? 您應該使用分頁(最簡單)或滾動重新加載以加載您的數據。

之前你因爲平衡細胞計算的問題,它更可能是你的經驗,因爲問題:

  • 從網絡(幾乎可以肯定)加載速度慢,因爲DOM大小的
  • 慢網頁互動(也許)

顯示前100到500個事務,並以某種方式提供用戶加載先前的條目。

更新 - 對於服務器端的平衡計算:

你可以計算出在服務器端的平衡,並將其存儲用作緩存的第二集合。如果事務插入發生在過去,則重新計算緩存。爲了加快速度,您可以使用快照: 在第三個集合中,您可以按特定時間間隔(例如,具有以下數據結構:

{ Balance: 150000, Date: 2017-02-03, LastTransactionId: 546 } 

當一個事務插入了過去,拿最近的快照,過去的時刻之前重新計算基於高速緩存。這樣,你。可以保持重新計算的交易數量相當小。

+0

謝謝你的回答。即使我像你說的那樣執行分頁,爲了獲得餘額,我仍然需要計算從交易一開始到上一次交易的餘額。每次在交易清單上進行CRUD操作對嗎? –

+0

交易是否改變?由於交易是過去的事件,它們應該是不可變的。新的交易總是在最後附加。那麼,重新計算它們的原因是什麼? – mbnx

+0

使用可以在添加新交易時指定日期。例如,如果他們上週忘記添加交易並且發現了它,他們可以輸入上週的日期並輸入交易,因此交易之後的所有餘額都需要更改。 –