Gửi các hoạt động chèn hàng loạt theo lô vì điều này dẫn đến ít lưu lượng truy cập đến máy chủ hơn và do đó thực hiện các giao dịch chuyển khoản hiệu quả bằng cách không gửi tất cả mọi thứ trong các báo cáo riêng lẻ, mà chia thành các phần có thể quản lý cho cam kết của máy chủ. Cũng có ít thời gian hơn để chờ phản hồi trong lệnh gọi lại với cách tiếp cận này.
Cách tiếp cận tốt hơn nhiều với điều này sẽ là sử dụng async mô-đun để thậm chí lặp lại danh sách đầu vào là một hoạt động không chặn. Việc chọn kích thước hàng loạt có thể khác nhau, nhưng việc chọn các thao tác chèn hàng loạt trên 1000 mục nhập sẽ giúp bạn an toàn khi ở dưới giới hạn cứng 16MB BSON, vì toàn bộ "yêu cầu" tương đương với một tài liệu BSON.
Phần sau minh họa bằng cách sử dụng async mô-đun trong khi lặp qua mảng và liên tục gọi hàm trình lặp, trong khi kiểm tra trả về true. Gọi lại khi bị dừng hoặc khi xảy ra lỗi.
var bulk = col.initializeOrderedBulkOp(),
counter = 0,
len = array.length,
buildModel = function(index){
return {
"data": array[index],
"metaData": {
"hash": hash,
"date": timestamp,
"name": name
}
}
};
async.whilst(
// Iterator condition
function() { return counter < len },
// Do this in the iterator
function (callback) {
counter++;
var model = buildModel(counter);
bulk.insert(model);
if (counter % 1000 == 0) {
bulk.execute(function(err, result) {
bulk = col.initializeOrderedBulkOp();
callback(err);
});
} else {
callback();
}
},
// When all is done
function(err) {
if (counter % 1000 != 0) {
bulk.execute(function(err, result) {
console.log("More inserts.");
});
}
console.log("All done now!");
}
);