使用节点js将非阻塞插入到数据库中

时间:2018-02-14 18:31:02

标签: node.js optimization blocking

我的Node Js应用程序的一部分包括读取文件,经过一些(轻量级,逐行)处理后,将这些记录插入数据库。

原始代码就是这么做的。问题是该文件可能包含逐行插入的疯狂数量的记录。根据我做的一些测试,一个10000行的文件完全阻止了应用程序大约10秒钟。

我的考虑是:

  1. 批量立即创建整个对象。这意味着读取文件,通过对每行进行一些计算来准备对象,将其推送到最终对象,最后使用Sequelize的bulkcreate。有两个缺点:

    1. 巨大的插入物可以像数千个单行插入一样阻挡。

    2. 这可能会导致很难为未插入的行生成报告。

  2. 批量创建较小,合理的对象。这意味着读取文件,通过计算迭代每个n(例如2000)行并将其添加到对象,然后使用Sequelize的bulkcreate作为对象。对象准备和bulkcreate将异步运行。缺点:

    1. 设置对象长度似乎是任意的。

    2. 此外,它似乎也是我的一个技巧,而对于这种特殊情况,可能存在现有且经过验证的解决方案。

  3. 将这部分代码移到另一个进程中。理想情况下,将cpu使用限制在此过程的合理级别(idk。如果可以完成或智能的话)。

  4. 只需为此创建一个新流程(以及代码的其他阻止部分)。

  5. 这不是帮助我写一些代码'问题的类型。我已经环顾四周,似乎有足够的文档。但我想使用适当的工具投资一个有效的解决方案。欢迎其他想法。

0 个答案:

没有答案