我有一個應用程序(內置流星),爲最終用戶提供了一些臨時報告功能。我已經通過使用聚合管道爲給定查詢生成結果來構建該功能。這使得它非常快速,我使用$out
將結果直接推送到結果表中。是否動態創建和刪除MongoDB中的集合以創建可伸縮性問題?
結果表包括一個queryID,其中,客戶端用來找出哪些是正確的結果。
不幸的是,正如您可能知道的(並且我發現的),一旦您有多個用戶同時運行報表,因爲$out
在推送新查詢之前刪除了整個結果表。
我看到三個可能的解決方法:
- 運行聚集,但手動結果推到結果集
$out
結果到一個臨時集合(動態命名,以避免衝突),然後手動複製從那裏的結果到結果收集,立即放棄臨時的一個。當我認爲我可以使用copyTo()
時,這是有道理的,但在Meteor中這似乎不可能,所以我認爲這種選擇在這種情況下相對於#1沒有多大意義。$out
結果到一個臨時集合(動態命名,以避免衝突),並讓客戶端直接從那裏拉其結果。然後,我會在24小時後定期刪除額外的收藏(就像我今天在主要收藏中的具體查詢結果一樣)。
#3將是迄今爲止最快的 - 手動複製行花費的時間會縮短查詢運行所花費的時間。但我很擔心創建和刪除這麼多集合的影響。
我們不是在談論數百萬用戶在這裏,但如果每天500名用戶平均分別運行10-20報告,有可能是數據庫中的任一個時刻的額外5-10K集合。這似乎很多。也許我可以更聰明地以某種方式清理它們,儘管我不能立即刪除它們,因爲用戶可能希望使用不同的報告打開多個選項卡。即使如此,我們仍有可能談論數百到數千個藏品。
這會是一個問題嗎?
是我應該考慮,而不是有其他的辦法?
其他建議?
謝謝!