Node.js数据处理分配

我需要一个使用node.js来分发数据处理的策略。 我试图弄清楚是否使用工作池并将这些工作组中的任务分离出来是最好的方法,或者使用像http://strawjs.com/这样的基于pipe道/节点的系统是最好的方式。

我拥有的步骤如下(针对单个作业):

  1. 提取包含GIS ShapeFiles的zip文件
  2. 使用ogr2​​ogr将文件转换为GeoJSON
  3. 非规范化GeoJSON文件中的数据
  4. 将数据转换为我在MongoDB中使用的格式
  5. 将数据插入到MongoDB集合中

主要的问题是,当使用像吸pipe这样的基于pipe道/节点的系统时,我不知道如何合并来自不同GeoJSON文件的数据。

我明白如何去做工作池的工作。 但是我不知道如何把工人分配到几台机器上。

我已经尝试过使用asynchronous模块在单个机器上的单线程中进行这种简单的方法。 这适用于小数据集。 但在生产中,我需要能够在相当频繁的时间间隔内支持数百万个文档。

使用node.js的原因是,我们已经有了一个可扩展node.jsstream程的坚实基础架构,我们几乎在生产环境的每个方面都使用node.js。

作者秸秆在这里。

你可以很容易地在多台机器上运行稻草。

设置一个专用的Redis服务器,并在任意数量的独立工作机上运行一个Straw拓扑结构,并使用该Redis服务器(通过您传递给Topo的configuration)。

通过在拓扑中使用命名pipe道,可以将不同的机器连接在一起。 就像在一台机器上运行一样。

一个有用的技术是让多个秸秆节点从同一个pipe道获得input。 他们将自动负载平衡自己。

此外,Straw还为每个节点使用一个单独的OS进程,因此在多核机器上,它将比单个Node.js进程更好地使用内核。

让我知道如果你需要更多的信息或帮助。

Interesting Posts