哦,不,沒有設定的開發版,如果你真的想它有這個很好的理由。因此,如果你首先考慮什麼是聚合,MongoDB通常會做些什麼,這應該會變得很清楚。
這是「應該」是在任何明智的聚集管道的 「頭」 是什麼:
db.collection.aggregate([
{ "$match:{ /* Something here */ } },
而這些都是原因:
它使好感至嘗試以減少您正在操作的工作集任何操作。
這也是只有當你有機會使用索引來幫助搜索選擇。這是總是比收集掃描更好。
即使有一個內置的「優化」,看起來這樣的事情,「預測」限制「選中」域,工作集大小的最佳監票是只工作的有效記錄。後一階段的比賽都沒有以這種方式「優化」。(見點)
接下來的事情要考慮的是MongoDB中的一般行爲。因此,服務器進程希望做的,是「消費」爲可用機器內存的多少,因爲它可以爲了保持「工作集」數據(包括集合和/或指數)以「工作」關於該數據的最有效的方法是。
所以真的是在「最佳利益」的數據庫引擎「花」 最它的內存分配的這種方式。正如那樣,您的「聚合」作業和所有的其他並行進程都可以訪問內存空間中的「工作數據」。從其他併發操作
因此,它是MongoDB的「不是最佳的」到「偷」這個內存分配僅有來服務你的跑步聚合操作。
在「編程到硬件要求」條款,以及你知道未來版本允許聚合管道實現「磁盤使用」,以便允許更大的處理。您始終可以實施SSD或其他快速存儲技術。當然,RAM的「10%」對安裝在系統中的RAM數量是主觀的。所以你可以隨時增加那。
這樣做的綜述是,MongoDB的具有作爲「並行數據倉庫」實際工作和不那麼好。它是什麼不是是特定「聚合工作運行員」,不應該這樣對待。
因此,無論「分手」您的工作負載,或增加您的硬件規格,或者簡單地切換大「任務中運行」活動的東西,確實專注於正在運行的作業,如的Hadoop風格的「mapReduce」,並將MongoDB保留爲服務數據的作業。
當然還是,「寫」地方您的設計更改爲簡單「預聚合」所需的數據。
俗話說,「馬的課程」,或使用的工具是什麼,他們設計爲。
我不相信目前有,你可以嘗試寫出一個可以「欺騙」限制的集合 – Sammaye