[英]Inserting bulk data into MySQL using node JavaScript
我正在嘗試從SQL Server提取數據並插入MySQL。 我拿到了1 lac的唱片。 記錄的獲取已正確完成,但是在將記錄插入MySQL的過程中,它不會立即插入數據。 我需要刷新MySQL以查看新記錄。
var sql = require('mssql');
var mysql = require("mysql");
var config = {
user : 'sa',
password : '******',
server : 'serverurl',
database : 'DB',
stream : true //work with large amount of rows
};
var connection1 = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root',
database : 'test'
});
connection1.connect();
var connection = new sql.Connection(config, function(err) {
if(err)
console.log(err);
var request = new sql.Request(connection);
// request.stream = true; // You can set streaming differently for each request
request.query('select TOP 100000 * FROM ShipmentAuditLog WITH (NOLOCK)'); // or request.execute(procedure);
request.on('recordset',function(col){
console.time('Time-Taken');
});
// Emitted for each row
request.on('row', function(row) {
syncing(row);
// console.log('Row Inserted');
});
request.on('error', function(err) {
console.log(err);
});
// Emitted for the last one
request.on('done', function(returnValue) {
console.timeEnd('Time-Taken');
connection.close();
});
});
var syncing = function(row){
connection1.query('INSERT INTO shipmentauditlog SET ?', row, function(err,res) {
if(err)
console.log(err);
// else
// console.log('Added');
});
};
當嘗試將成千上萬的偽記錄插入MySQL數據庫時,我設法重新創建了相同的效果。 顯然,這會使日志超載(因為符合ACID),所以您有兩種選擇-盡管在插入過程中放寬了ACID的符合性(請參閱此答案 ),盡管通常這是一個非常糟糕的想法,或者使用更好的解決方案NodeJS批量插入記錄,而不是一個接一個地插入。
我建議您閱讀一次,具體取決於記錄的大小,一次讀取20或30條記錄,並建立一個多插入以將數據添加到MySQL。 有關MySQL文檔,請參見此鏈接 。
因此,您最終將改為執行以下操作:
'INSERT INTO shipmentauditlog VALUES (1,2,3), (1,2,3), (1,1,1), (1,1,3);'
如果這是一次大規模的一次性操作,另一種選擇是使用NodeJS讀取所有記錄,並創建包含所有數據的TXT文檔。 MySQL對大量數據的批量加載提供了很好的支持。 因為MySQL會從文件中批量讀取數據並將其插入,因此速度會更快。 如果必須加載大量數據,那將是我的首選。 請參閱MySQL文檔以獲取全部詳細信息。
一個簡單的例子是:
LOAD DATA INFILE 'mydata.txt' INTO TABLE shipmentauditlog
FIELDS TERMINATED BY ',';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.