2

我需要使用node.js分發數據處理策略。如果使用工作池並將這些工作人員中的任務組隔離是最好的方法,或者使用基於管道/節點的系統(如http://strawjs.com/),我試圖計算出 是最好的方法。Node.js數據處理分佈

我已經有以下幾種(單個作業)的步驟:

  1. 提取含GIS形狀文件
  2. 將文件轉換爲GeoJSON的使用ogr2​​ogr
  3. 進行非標準化的數據一個zip文件以GeoJSON文件
  4. 將數據轉換到我在MongoDB中
  5. 的Upsert數據使用到MongoDB中收集的格式

主要問題是,當使用基於管道/節點的系統(如吸管)時,我不知道如何合併來自不同GeoJSON文件的數據。

我瞭解如何在工作人員池中完成工作。但我不知道如何在幾臺機器上分配工人。

我試過在一臺機器上使用 異步模塊在單線程中做到這一點的天真方式。這適用於小數據集。但在生產中,我需要 能夠在相當頻繁的時間間隔內支持數百萬個文檔。

使用node.js的原因是我們已經有了一個堅實的基礎架構,可以爲 擴展node.js流程,我們幾乎在我們生產環境的每個方面都使用node.js。

+0

我建議你到谷歌的「nginx + node.js集羣」,閱讀一些文章,畫出一些UML部署,序列圖(解決方案),並用它來減少你的問題。問題太廣泛,沒有提供代碼是downvote和密切的原因。如何合併JSON對象或JSON數組已在Stack Overflow中得到了解答,例如,這裏http://stackoverflow.com/questions/10384845/merge-two-json-objects-in-to-one-object – xmojmr

回答

3

作者稻草在這裏。

你可以很容易地在多臺機器上運行稻草。

設置專用的Redis服務器,並在任意數量的獨立工作機上運行稻草拓撲,並使用該Redis服務器(通過您傳遞給Topo的配置)。

通過在拓撲中使用命名管道,可以將不同的機器連接在一起。它們基本上就像在一臺機器上運行一樣。

一個有用的技術是讓多個秸稈節點從同一個管道獲取它們的輸入。他們將自動進行負載平衡。另外,Straw爲每個節點使用一個單獨的OS進程,因此在多核機器上,它將比單個Node.js進程更好地使用內核。

讓我知道你是否需要更多信息或幫助。