我們知道Node.JS以異步單線程的方式工作。 我已經使用MongoDB好幾個月了,老實說,我發現查詢語言不是很強大,很好。聚合框架帶來了重要的功能,但是像內部查詢這樣的SQL功能非常之遠(注意我並不是在談論大量的連接)。 所以我發現自己多次提供這個缺乏可怕的結果集遍歷(foreach),以形成我想要的結果。處理cpu綁定操作
很明顯,它不適用於大型數據集。在Node.JS環境中,這些事情是真正的災難,因爲我阻止整個服務器爲單個請求提供服務。
你如何處理這些類型的CPU綁定任務?
我們知道Node.JS以異步單線程的方式工作。 我已經使用MongoDB好幾個月了,老實說,我發現查詢語言不是很強大,很好。聚合框架帶來了重要的功能,但是像內部查詢這樣的SQL功能非常之遠(注意我並不是在談論大量的連接)。 所以我發現自己多次提供這個缺乏可怕的結果集遍歷(foreach),以形成我想要的結果。處理cpu綁定操作
很明顯,它不適用於大型數據集。在Node.JS環境中,這些事情是真正的災難,因爲我阻止整個服務器爲單個請求提供服務。
你如何處理這些類型的CPU綁定任務?
理想情況下,您不重建結果。您設計了一個MongoDB可以處理的查詢,以獲得您想要的結果......可能會更好地打開與該特定問題相關的問題,因爲可能會丟失某些內容。但是,假設您確實發現了一個異常(這不太可能),並且您需要構建一大組數據來解決瓶頸問題。有一個很好的機會可以再次優化此操作...您應該打開與此問題相關的問題,以瞭解可以進行哪些改進。
可以說,你確實是一個非常罕見的例外,以上所有都不適用於你。你有幾個(更復雜)選項可以選擇:
請注意選擇1 & 2上面還允許您與其他語言,這將是更適合的接口處理大量數據。
實際上,整個Node.js架構基於單線程事件循環,所以任何CPU綁定函數都會阻塞整個服務器,直到函數完成其操作。
在可能的解決方法可能是
這是一個例子http://stackoverflow.com/questions/39474513/real-virtual-field-inherited-fields。最終目的(在問題中沒有解釋)是獲取與每個標籤相關的所有文檔。基本上是一個SQL GROUP BY,除了docBs從被引用的docA繼承標籤之外。我在最後一步中用3個步驟和3個嵌套的foreach解決了一個瘋狂的異步系列 – alfredopacino