优化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插入的主要内容,如果未能解决你的问题,请参考以下文章
第31天MYSQL进阶-写优化- 插入优化(SQL 小虚竹)
MySQL 进阶 索引 -- SQL优化(插入数据优化:导入本地文件数据主键优化order by优化group by优化limit优化count优化update优化)