簡體   English   中英

使用節點JavaScript將批量數據插入MySQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM