单个批处理查询或映射查询以提高效率?

时间:2016-10-23 10:53:15

标签: mysql node-mysql

我正在运行node-mysql,用于将数据插入到运行DynamoDB的MySQL数据库中。

我可以选择表演迷你'在for循环中插入查询:

var myData= [{"key": "abc", "value": "xyz"},{..},{..}]
var mapData = myData.map(function(data){
    var key = data.key;
    var value = data.value;
    var payload = {
      key: key,
      value: value
    };

    connection.query("INSERT INTO mytable SET ?", payload, function(err,result){
       //Do stuff
    });
});

或者我可以使用嵌套数组方法:

myData = [["key", "value"], [.., ..], [.., ..]]
connection.query("INSERT INTO mytable (key, value) VALUE ?", [myData], function(err, result){
  //Do Stuff..
});

我的数据库非常大,myData数组也非常大。

哪种方法最有效?

1 个答案:

答案 0 :(得分:1)

在这种情况下,如果性能很重要,那么在您打算运行应用程序的硬件上进行自己的测试是一个好主意。网络延迟,磁盘延迟和可用RAM等因素会起作用 - 以及数据库服务器与其他查询或任务的繁忙程度。

在许多场景中,您可能希望前一个操作最快,因为它只需要通过MySQL查询分析器一次,并且数据可以批量写入持久存储而不是尽可能多的小写 - 尽管再一次取决于您的数据库和操作系统正在使用的刷新配置选项。

大写的缺点是数据库需要等到它有整个查询才能处理它,因为它必须检查整个写是否有效,并且根据MySQL表格式,它可能会锁定表阻止其他操作继续进行。较短的较小写入可以更快地完成工作。

另请注意,MySQL有一个max_allowed_packet设置,需要增加真正的大写。

TLDR - 如果它很重要,请测试它们并使用适合您特定应用的功能。