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

Làm cách nào để lưu 1 triệu bản ghi vào mongodb không đồng bộ?

Nó bị nổ tung bởi vì bạn không đợi một cuộc gọi không đồng bộ hoàn tất trước khi chuyển sang lần lặp tiếp theo. Điều này có nghĩa là bạn đang xây dựng một "chồng" các hoạt động chưa được giải quyết cho đến khi điều này gây ra sự cố. Tên của trang web này một lần nữa là gì? Lấy hình ảnh?

Vì vậy, đây không phải là cách tốt nhất để tiếp tục với "Bulk" phụ trang. May mắn thay, trình điều khiển MongoDB cơ bản đã nghĩ về điều này, ngoài vấn đề gọi lại được đề cập trước đó. Trên thực tế, có một "API hàng loạt" có sẵn để làm cho điều này tốt hơn rất nhiều. Và giả sử bạn đã lấy trình điều khiển gốc làm db sự vật. Nhưng tôi chỉ thích sử dụng .collection trình truy cập từ mô hình và "async" mô-đun để làm cho mọi thứ rõ ràng:

var bulk = Model.collection.initializeOrderedBulkOp();
var counter = 0;

async.whilst(
  // Iterator condition
  function() { return count < 1000000 },

  // 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 = Model.collection.initializeOrderedBulkOp();
        callback(err);
      });
    } else {
      callback();
    }
  },

  // When all is done
  function(err) {
    if ( counter % 1000 != 0 ) 
        bulk.execute(function(err,result) {
           console.log( "inserted some more" );
        });        
    console.log( "I'm finished now" ;
  }
);

Sự khác biệt ở đó là sử dụng cả hai phương thức gọi lại "không đồng bộ" khi hoàn thành thay vì chỉ tạo một ngăn xếp, nhưng cũng sử dụng "API hoạt động hàng loạt" để giảm thiểu các lệnh gọi ghi không đồng bộ bằng cách gửi mọi thứ trong câu lệnh cập nhật hàng loạt gồm 1000 mục nhập.

Điều này không chỉ không chỉ "xây dựng một chồng" thực thi chức năng như mã ví dụ của riêng bạn, mà còn thực hiện các giao dịch "dây" 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 "lô" có thể quản lý cho cam kết của máy chủ .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring Boot không thể cập nhật bộ sưu tập đã phân đoạn trên azure cosmos db (MongoDb)

  2. Đọc từ bản sao thứ cấp được đặt trong mongodb thông qua javascript

  3. Tác động đến hiệu suất của kiểu dữ liệu chỉ mục trong MongoDB?

  4. MongoDB (máy chủ v 2.6.7) với trình điều khiển C # 2.0:Cách lấy kết quả từ InsertOneAsync

  5. Tại sao có sự vi phạm quyền truy cập khi kết nối với MongoDB từ C ++?