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 万のレコードがあります。私が直面している問題は、コードを実行すると、ノード アプリケーションのメモリ フットプリントが蓄積し始め、しばらくするとノード アプリケーションがメモリ不足エラーで終了することです。
回避策として、顧客テーブルのクエリをチャンクで開始しました。フィールドで並べ替えてから、そのフィールドの値に対応するすべてのレコードを読み取ります。すべてのレコードが読み取られたら、接続を切断してデータベースに再接続し、次の値のすべてのレコードを読み取ります。
このようにして、コードのメモリ フットプリントがチェックされ、メモリ不足エラーがないことに気付きました。
誰かが同様の問題に直面しているかどうか、そしてそれを解決する方法を知りたいだけですか? モジュールを修正して、それを処理するか、他の解決策を講じることは可能ですか。
お手伝いありがとう