优化nodejs mysql插入

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 数据库中手动执行计数查询来检查插入。

以上是关于优化nodejs mysql插入的主要内容,如果未能解决你的问题,请参考以下文章

MySQL批量SQL插入性能优化

第31天MYSQL进阶-写优化- 插入优化(SQL 小虚竹)

MySQL批量插入优化

MySQL 普通注册插入优化。

MySQL批量SQL插入性能优化

MySQL 进阶 索引 -- SQL优化(插入数据优化:导入本地文件数据主键优化order by优化group by优化limit优化count优化update优化)