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

Tại sao và khi nào cần thiết phải xây dựng lại các chỉ mục trong MongoDB?

Theo tài liệu MongoDB, nói chung không cần phải xây dựng lại các chỉ mục thường xuyên.

LƯU Ý :Mọi lời khuyên về bộ nhớ trở nên thú vị hơn với MongoDB 3.0+, đã giới thiệu API công cụ lưu trữ có thể cắm được . Nhận xét của tôi bên dưới đặc biệt liên quan đến công cụ lưu trữ MMAP mặc định trong MongoDB 3.0 trở về trước. WiredTiger và các công cụ lưu trữ khác có các cách triển khai lưu trữ khác nhau cho dữ liệu và chỉ mục.

Có thể có một số lợi ích trong việc xây dựng lại chỉ mục bằng công cụ lưu trữ MMAP nếu:

  • Một chỉ mục đang sử dụng một lượng không gian lớn hơn dự kiến ​​so với dữ liệu. Lưu ý:bạn cần theo dõi dữ liệu lịch sử và kích thước chỉ mục để có đường cơ sở so sánh.

  • Bạn muốn chuyển từ định dạng chỉ mục cũ hơn sang định dạng mới hơn. Nếu lập chỉ mục là cố vấn, điều này sẽ được đề cập trong ghi chú nâng cấp. Ví dụ:MongoDB 2.0 đã giới thiệu đáng kể cải tiến hiệu suất chỉ mục vì vậy ghi chú phát hành bao gồm một chỉ mục được đề xuất sang định dạng v2.0 sau khi nâng cấp. Tương tự, MongoDB 2.6 đã giới thiệu 2dsphere (v2.0) chỉ mục có một hành vi mặc định khác (thưa thớt theo mặc định). Các chỉ mục hiện có không được xây dựng lại sau khi nâng cấp phiên bản chỉ mục; việc lựa chọn nếu / khi nào để nâng cấp được để cho người quản trị cơ sở dữ liệu.

  • Bạn đã thay đổi _id định dạng cho một tập hợp đến hoặc từ một khóa tăng đơn điệu (ví dụ:ObjectID) thành một giá trị ngẫu nhiên. Điều này hơi bí truyền một chút, nhưng có một tính năng tối ưu hóa chỉ mục chia các nhóm b-tree 90/10 (thay vì 50/50) nếu bạn đang chèn _id s luôn tăng (ref: SERVER-983 ). Nếu bản chất của _id của bạn s thay đổi đáng kể, có thể xây dựng b-tree hiệu quả hơn với chỉ mục lại.

Để biết thêm thông tin về hành vi chung của cây B, hãy xem: Wikipedia:B-tree

Trực quan hóa việc sử dụng chỉ mục

Nếu bạn thực sự tò mò muốn tìm hiểu sâu hơn về phần bên trong chỉ mục, có một số lệnh / công cụ thử nghiệm bạn có thể thử. Tôi hy vọng chúng chỉ giới hạn trong MongoDB 2.4 &2.6:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chỉ mục duy nhất MongoDB không hoạt động

  2. Xóa tệp nhật ký của mongodb có an toàn không?

  3. Giá trị ngày giờ trong MongoDB không được lưu trữ đúng

  4. Sử dụng $ in trong MongooseJS với các đối tượng lồng nhau

  5. MongoDB C # foreach BsonElement