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

Tôi có nên sử dụng chỉ mục thưa thớt cho cờ boolean trong mongodb không?

Lá cờ thưa thớt hơi kì cục. Để hiểu khi nào sử dụng nó, bạn phải hiểu tại sao "thưa thớt" lại tồn tại ngay từ đầu.

Khi bạn tạo một chỉ mục đơn giản trên một trường, sẽ có một mục nhập cho mỗi tài liệu, ngay cả những tài liệu không có trường đó.

Ví dụ:nếu bạn có chỉ mục trên {rarely_set_field : 1} , bạn sẽ có một chỉ mục được điền gần hết bằng null bởi vì trường đó không tồn tại trong hầu hết các trường hợp. Điều này gây lãng phí dung lượng và tìm kiếm không hiệu quả.

{sparse:true} tùy chọn sẽ loại bỏ null giá trị, vì vậy bạn sẽ nhận được một chỉ mục chỉ chứa các mục nhập khi {rarely_set_field} được xác định.

Quay lại trường hợp của bạn.

Bạn đang hỏi về việc sử dụng boolean + thưa. Nhưng thưa thớt không thực sự ảnh hưởng đến "boolean", thưa thớt ảnh hưởng "được đặt so với không được đặt".

Trong trường hợp của bạn, bạn đang cố gắng tìm nạp unfinished . Để tận dụng sparse khóa không phải là giá trị boolean, mà là thực tế là unfinished các mục nhập có khóa đó và các mục nhập "đã hoàn thành" không có khóa nào cả.

{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished

Có vẻ như bạn đang sử dụng Hàng đợi

Bạn chắc chắn có thể tận dụng thông tin ở trên để triển khai một chỉ mục thưa thớt. Tuy nhiên, nó thực sự có vẻ như bạn đang sử dụng Hàng đợi. MongoDB có thể phục vụ dưới dạng Hàng đợi, đây là hai ví dụ .

Tuy nhiên, nếu bạn nhìn vào Hàng đợi, họ không làm theo cách bạn đang làm. Cá nhân tôi đang sử dụng MongoDB làm Hàng đợi cho một số hệ thống sản xuất và nó chạy khá tốt, nhưng hãy kiểm tra tải dự kiến ​​của bạn như một Hàng đợi chuyên dụng sẽ hoạt động tốt hơn nhiều.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách chạy nhiều ứng dụng với một mongodb duy nhất bằng docker

  2. 10 mẹo để cải thiện bảo mật MongoDB của bạn

  3. Định cấu hình QueryDSL cho Spring Data và MongoDB với Gradle

  4. Nhận tất cả các tên trường trong một bộ sưu tập mongodb?

  5. Các trường được tính toán theo nhóm trong MongoDB