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

MongoDB:forEach vs fetch + each

Hai câu lệnh về cơ bản thực hiện cùng một điều ở cấp API cốt lõi, đó là lấy con trỏ và chuyển đổi kết quả. Tuy nhiên, có một điểm khác biệt "cốt lõi" về hiệu suất:

  • .forEach() sẽ chuyển dạng kết quả con trỏ "từng cái một" và xử lý hàm trình lặp mà nó được cung cấp.

  • .fetch() mặt khác, nhận được "mảng" từ con trỏ "tất cả cùng một lúc", có nghĩa là tất cả "trong bộ nhớ" trong một lần truy cập.

Vì vậy, không có vấn đề gì thực sự "nhanh hơn" khi thực hiện hoạt động "cốt lõi" là tìm nạp từ con trỏ của truy vấn. Tuy nhiên, việc không đánh giá "biểu thức" trên mỗi lần lặp con trỏ "có thể" nhanh hơn một chút, vì vậy .fetch() có thể giành được một "chút ít" ở đây.

Tất nhiên, tất cả mọi thứ đều nằm trong bộ nhớ, vì vậy cần phải xem xét "chi phí" của việc làm đó. Đồng thời, tại thời điểm .fetch() _.each() vẫn chưa được xử lý, như người ta nói. "Bạn" đạt được "gì khi đu dây mà bạn có thể" thả lỏng "trên đường vòng" .

Nếu không có điểm chuẩn đầy đủ của các trường hợp cụ thể, "thời gian" có thể tương tự nhau. Và điểm chuẩn chung chung sẽ vô dụng trừ khi nó áp dụng cụ thể kích thước của tập dữ liệu mà bạn đang làm việc.

Do đó, trường hợp chung xuất hiện, "Về cùng một" , Tuy nhiên, sử dụng .fetch() sẽ ngốn nhiều bộ nhớ hơn hơn là chỉ lặp lại một con trỏ ngay từ đầu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $ lookup trên ObjectId's trong một mảng

  2. Mongo tổng hợp mảng lồng nhau

  3. Giá trị mặc định không được đặt trong khi sử dụng Cập nhật với Nâng cấp là đúng

  4. Có cách nào để tạo mongodb như chuỗi _id mà không cần mongodb không?

  5. Làm thế nào để duy trì MongoDB - dữ liệu của một vùng chứa Docker đang chạy trong một hình ảnh mới?