假設我想生成一百萬條記錄並將它們插入數據庫。如果需要一個小時,沒問題。當向數據庫插入大量記錄時,如何編寫節點腳本以減少內存使用量?
我已經得到了生成假的零售數據庫:
var records = retailGen.generateOrders(numberOfRecords);
確定這是沒有問題的,它可以產生一百萬條記錄相當迅速。當我排隊了大量的記錄,並遍歷這些問題就來了(每個記錄包含一個或多個事務,insertTransaction是一個異步調用DB):
_fn = function(record) {
var transaction, _j, _len, _ref, _results;
_ref = record.transactions;
for (_j = 0, _len = _ref.length; _j < _len; _j++) {
transaction = _ref[_j];
insertTransaction(transaction);
}
};
for (n = _i = 0; 0 <= runs ? _i < runs : _i > runs; n = 0 <= runs ? ++_i : --_i) {
_fn(records[n]);
}
它就會堆積所有這些異步調用了並淹沒內存,最終導致操作系統癱瘓,以至於我無法做任何事情。我想知道更多有經驗的js程序員如何解決這個問題。該腳本有效,但數量變大時效果不佳。
我寧願用純js而不是圖書館來解決這個問題 - 這將是一個更好的學習體驗。我考慮將下一個記錄的插入插入到第一個插入的「完成」回調中,但接下來感覺就像是強制節點是同步的(很好,非常同步)。
是的,這與我所做的相似:我只是在bash腳本中放置一個循環並調用節點腳本。不喜歡這個解決方案,覺得我應該能夠做得更好。 – jcollum
更快更快或者你的意思是?你更好的目標是什麼? – Sesertin
不訴諸bash腳本等我想知道如何做這種節點的速率限制。 – jcollum