加载数据infile从节点js执行缓慢

时间:2015-09-30 15:25:39

标签: mysql node.js bash

我正在尝试使用下一个查询从我在节点js中编写的脚本中的表中插入超过600,000行。

var sql =   " LOAD DATA LOCAL INFILE '/tmp/insertFile18.csv'" + 
                    " INTO TABLE `pricing_leasing`"  +  
                    " FIELDS TERMINATED BY ','  LINES TERMINATED BY '+-'";

问题是它永远不会结束(我在午餐时间等了1个小时),也没有出错。 我直接在bash中执行,速度非常快,不到一分钟。 然后我决定在nodejs中编写一个小脚本,除了执行脚本之外什么都不做,它在2分钟内完成就可以了。

我的问题是,如果我只是在bash中执行查询,或者在它自己的节点中运行js脚本它是否正常工作,但如果我之前有更多的东西(在不同的表和文件操作上的其他查询)它会变慢

更新

function uploadFile() {

var deferred    = GLOBAL.q.defer(),
    strFileName = "/tmp/insertFile" + GLOBAL.company.id + ".csv",
    cb = function ( err ) {
        //fs.unlinkSync( strFileName );
        if ( err ) {
            console.log( err ); 
            GLOBAL.objRstOfInsert['success'] = false;
        } else {
            // Update return structure with success message
            GLOBAL.objRstOfInsert['success'] = true;
        }
        console.log("finished uploads");
        deferred.resolve();
    };

    var lstInsertPricingColumns = '(`sourcecompany_id`,'+
                            '`company_id`,'+
                            '`price`,`active`,`row_hash`)';

    var sql =   " LOAD DATA LOCAL INFILE '" + strFileName + "'" + 
                " INTO TABLE " + GLOBAL.company.tableInsert +   
                " FIELDS TERMINATED BY ','  LINES TERMINATED BY '+-'"+ 
                lstInsertPricingColumns;

    GLOBAL.db['rates'].query( sql, cb );
    return deferred.promise;
} 

1 个答案:

答案 0 :(得分:1)

问题是云服务器的ram低于我的本地。然后我猜文件太大了。我修复了拆分多个较小的文件以执行加载数据,现在工作正常。

感谢。