【问题标题】:Node.js data processing distributionNode.js 数据处理分发
【发布时间】:2014-06-27 05:31:24
【问题描述】:

我需要一种使用 node.js 分发数据处理的策略。我想弄清楚 如果使用工作池并隔离这些工作人员中的任务组是最好的方法,或者 使用像http://strawjs.com/ 这样的基于管道/节点的系统是可行的方法。

我的步骤如下(针对单个工作):

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

主要问题是我真的不知道如何合并来自不同 GeoJSON 的数据 使用基于管道/节点的系统(如稻草)时的文件。

我了解如何在工作人员池中完成工作。但我不知道如何将工人分配到几台机器上。

我尝试过在单台机器上的单线程中使用 异步模块。这适用于小数据集。但在生产中我需要 能够以相当频繁的间隔支持数百万个文档。

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

【问题讨论】:

  • 我建议你去谷歌搜索“nginx + node.js 集群”,阅读一些文章,画一些 UML 部署,序列图(解决方案建议)并用它来让你的问题不那么广泛。问题太宽泛且未提供代码是反对票和关闭的原因。 Stack Overflow 已经回答了如何合并 JSON 对象或 JSON 数组,例如这里stackoverflow.com/questions/10384845/…

标签: multithreading node.js parallel-processing etl data-processing


【解决方案1】:

这里是 Straw 的作者。

您可以在多台机器上轻松运行 Straw。

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

通过在拓扑中使用命名管道,您可以将不同的机器连接在一起。基本上就好像它们在单机上运行一样。

一个有用的技术是让多个 Straw 节点从同一个管道获取它们的输入。然后它们会自动进行负载平衡。

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

如果您需要更多信息或帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 2017-09-26
    • 2019-03-18
    • 2014-03-18
    • 2018-12-07
    • 2011-05-16
    • 2016-06-28
    • 2018-09-07
    相关资源
    最近更新 更多