MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để cải thiện hiệu suất hàng loạt của MongoDB?

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!");
    }
);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách sao lưu và khôi phục ClusterControl

  2. Thay đổi loại trường bên trong tập hợp mongoDB và $ lookup có sử dụng chỉ mục trên các trường hay không?

  3. MongoDB phiên bản 2.6 vẫn không thành công trên lập chỉ mục địa lý 2dsphere với lý do không thể giải nén các khóa địa lý và hình dạng có thể bị sai

  4. Cách giải quyết TypeError:loại 'danh sách' không thể nhấn mạnh

  5. Đã vượt quá kích thước ngăn xếp cuộc gọi tối đa khi chèn 10000 tài liệu