我正在运行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数组也非常大。
哪种方法最有效?
答案 0 :(得分:1)
在这种情况下,如果性能很重要,那么在您打算运行应用程序的硬件上进行自己的测试是一个好主意。网络延迟,磁盘延迟和可用RAM等因素会起作用 - 以及数据库服务器与其他查询或任务的繁忙程度。
在许多场景中,您可能希望前一个操作最快,因为它只需要通过MySQL查询分析器一次,并且数据可以批量写入持久存储而不是尽可能多的小写 - 尽管再一次取决于您的数据库和操作系统正在使用的刷新配置选项。
大写的缺点是数据库需要等到它有整个查询才能处理它,因为它必须检查整个写是否有效,并且根据MySQL表格式,它可能会锁定表阻止其他操作继续进行。较短的较小写入可以更快地完成工作。
另请注意,MySQL有一个max_allowed_packet设置,需要增加真正的大写。
TLDR - 如果它很重要,请测试它们并使用适合您特定应用的功能。