2

MSSQLデータベースへの接続に使用されるTediousモジュールを試していました。

私のコードをお見せしましょう...

var connection = new Connection(config);
connection.on('connect', function(err) {
// If no error, then good to go...
    console.log("Connected");
    executeStatement();
});

connection.on('error', function(err) {
    console.log("Error");
});




function executeStatement() {   
    var stmt = new Request("Select id from customers", function (err,rowCount) {
        if (err) console.log(err);      
        console.log("RowCount: " + rowCount);       
        process.exit(1);
    });

    stmt.on( 'row', function (columns) {            
        console.log("\t\tRow");
        columns.forEach(function(column) {
            console.log(column.value);
        });
    });
    stmt.on('done', function(rowCount, more) {
        console.log(rowCount + ' rows returned');
    }); 
    connection.execSql(stmt);       
}

私のコードは、Customers テーブルからすべてのレコードを取得するクエリを作成します。そして、「行」イベントを聞いてから、列の値を出力します。customers テーブルには 1 億 2000 万のレコードがあります。私が直面している問題は、コードを実行すると、ノード アプリケーションのメモリ フットプリントが蓄積し始め、しばらくするとノード アプリケーションがメモリ不足エラーで終了することです。

回避策として、顧客テーブルのクエリをチャンクで開始しました。フィールドで並べ替えてから、そのフィールドの値に対応するすべてのレコードを読み取ります。すべてのレコードが読み取られたら、接続を切断してデータベースに再接続し、次の値のすべてのレコードを読み取ります。

このようにして、コードのメモリ フットプリントがチェックされ、メモリ不足エラーがないことに気付きました。

誰かが同様の問題に直面しているかどうか、そしてそれを解決する方法を知りたいだけですか? モジュールを修正して、それを処理するか、他の解決策を講じることは可能ですか。

お手伝いありがとう

4

1 に答える 1