【问题标题】:Optimize nodejs mysql insertion优化nodejs mysql插入
【发布时间】:2018-04-08 21:30:46
【问题描述】:

我一直在开发一个用于 mongodb 到 mysql 转换的 ETL 工具,该工具托管在 github 上 mongodb-to-mysql-conversion。目前,在转换 mongodb 文档后,插入查询被发送执行,但插入速度最大为每秒 600 次插入。 mysql for nodejs 中的插入查询/秒是否有限制?如果是这样,那么如何增加呢?否则有没有没有这个限制的框架?整个转换代码在main conversion code

为插入查询创建数组是有限制的,因为所有文档中可能包含不同的键,这将导致查询列名的差异。

【问题讨论】:

    标签: mysql node.js mongodb query-optimization sql-insert


    【解决方案1】:

    (评论太长)

    我在代码中看到了很多“休眠”。它们可能是有充分理由的,但可能会影响插入率。

    我看到一些代码显然将行“批处理”到INSERT(到 MySQL)。但不清楚有多少是一起分批的。 100-1000 在某种程度上是最佳的。 (一次一个会慢 10 倍;一次超过 1000 个会进入“收益递减”并且可能会导致与大尺寸相关的低效率。)

    批量大小是多少?

    传输的总行数是多少?

    您确定减速是在 MySQL 方面,而不是 Mongo 或 NodeJs 方面吗?

    这里的代码批处理插入的事实令人鼓舞。但根据我的经验,许多“框架”没有考虑扩展到玩具大小的项目之外。

    让我们看看SHOW CREATE TABLE。有几件事可能会影响插入速度。

    在 MySQL 中使用键值数据的建议:不要抽出所有可能的列。 拉出对搜索和过滤最重要的列;将其余部分留在 JSON(或类似)列中以供应用程序处理。更多:http://mysql.rjweb.org/doc.php/eav

    【讨论】:

    • 目前集群中每个节点的batchsize为1000。从 mongodb 读取和解析速度非常快。瓶颈是mysql插入。我通过在 mysql 数据库中手动执行计数查询来检查插入。
    猜你喜欢
    • 1970-01-01
    • 2013-05-22
    • 2011-06-14
    • 2018-09-30
    • 2015-08-28
    • 2014-11-15
    • 2010-12-18
    • 1970-01-01
    相关资源
    最近更新 更多