2016-08-18 101 views
0

我有從web api獲取的門票收藏,現在我擁有大約20,000張門票,但是這個收藏可能會達到100萬或更多。綜合功能與手動計數

我想計算出公司有多少票是公開關閉的。

兩種方式我都:

  1. 店門票分貝,然後使用聚合函數
  2. 而取票我的手動計算使用計數器

告訴我哪種方式好?

P.S集合函數是否昂貴?它會減慢數據庫性能嗎?

+1

預算最好,如果你很少更新數據,但很多時候查詢。如果是另一種情況(罕見閱讀,頻繁更新),那麼你想犧牲一些性能來獲得最新的結果。 –

+0

@sergio請詳細解釋 –

回答

0

可以有不同的方法,但我當然不打算在運行時對這麼多龐大的數據進行聚合,我也不建議你進行預計算並丟棄api數據。

我只是做一個集合來保存所有的api數據,然後創建一個包含開始和結束票數的彙總表,這樣您的數據就會被保留下來,因此也就是您的表現。

而且是啊,聚合框架是昂貴的,並且在這麼多的數據,你明確需要specity allowDiskUse: <boolean>和`

雖然總執行它減慢collection不是 數據庫,wiredTiger Storage Engine不鎖定數據庫,而是鎖定在文檔級別進行讀寫操作。 `

WiredTiger - MongoDB

+0

如果數據很小像20,000那麼? –

+0

現在我在從api獲取數據的同時添加計數器 我將計數存儲在彙總表中,並將api數據存儲在其他表中 這是一個好方法嗎? –

+0

是的,如果數據很小,那就沒關係。那麼聚合不會佔用大量內存,並且效率很高。 – rummykhan

0

指數,說如果oppened和執行計數領域(或全球數,我不明白你的意思「開關開通過公司明智關閉」什麼的)。

將是快,你不會需要一個聚集執行這個簡單的計數哈哈