分析流数据的节点脚本

时间:2018-12-01 23:02:49

标签: node.js performance csv stream profiling

我编写了一个节点脚本,该脚本使用csv npm模块(csv-parsecsv-stringifystream-transform)从两个文件流式传输约40万行CSV行pipe方法并写入一个输出CSV文件。对于每一行,都将删除,更改或添加某些字段。(*)我也使用Ramda,希望它可以使脚本可并行化并提高性能。

首先,我已使用parsetransform{parallel: 1}步骤强制为顺序模式,并得到了以下结果:

$ time node index.js
INFO: loaded 252 geonames.
loadGeoNames: 50.537ms

real    3m1.603s
user    2m49.417s
sys     0m4.578s

现在,通过50并行回调,我节省了8秒:

$ time node index.js
INFO: loaded 252 geonames.
loadGeoNames: 43.098ms

real    2m53.249s
user    2m47.690s
sys     0m3.554s

然后我将该值更改为100并得到以下结果:

$ time node index.js
INFO: loaded 252 geonames.
loadGeoNames: 47.953ms

real    2m46.461s
user    2m42.621s
sys     0m3.578s

所以相差15秒,看起来并不多。另外,我希望读取40万行(从两个CSV文件)并将其写入一个文件(也就是CSV),但是我对此领域的经验并不多。

我不知道预期的性能应该/应该是什么。如何找出脚本在哪里花费时间?

脚本本身在这里: https://github.com/jfix/geoip-converter/blob/master/index.js

FWIW,我正在具有8 GB RAM的2010 Macbook Pro上运行它。

(*)更具体地说,该脚本将GeoIP数据从一种格式转换为另一种格式,因为MaxMind已停止更新所谓的“旧版”格式,但可以将新格式(传播多个文件)转换为旧的,这就是我在这里所做的。我已经在回购自述文件中添加了一些背景信息。

0 个答案:

没有答案