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

Chỉ mục MongoDB / Mongoose làm cho truy vấn nhanh hơn hay làm chậm nó?

Bạn đang đọc nhầm

Bạn đang đọc sai mục đích của khối được trích dẫn ở đó là gì .ensureIndex() (hiện không được dùng nữa, nhưng vẫn được gọi bằng mã mongoose) thực sự hoạt động ở đây trong ngữ cảnh.

Trong mongoose, bạn xác định một chỉ mục ở cấp giản đồ hoặc mô hình phù hợp với thiết kế của bạn. Những gì mongoose "tự động" làm cho bạn là khi kết nối nó dựa trên từng mô hình đã đăng ký và sau đó gọi .ensureIndex() thích hợp phương pháp cho các định nghĩa chỉ mục được cung cấp.

Điều này thực sự làm gì?

Trong hầu hết các trường hợp, sau khi bạn đã khởi động ứng dụng của mình trước đó và .ensureIndexes() phương thức đã được chạy là Hoàn toàn không có gì . Điều đó hơi quá lời, nhưng ít nhiều nó cũng đúng.

Bởi vì định nghĩa chỉ mục đã được tạo trên bộ sưu tập máy chủ, một cuộc gọi thường xuyên không thực hiện bất kỳ điều gì. Tức là nó không giảm chỉ mục và "tạo lại". Vì vậy, chi phí thực về cơ bản là không có gì, một khi bản thân chỉ mục đã được tạo.

Tạo chỉ mục

Vì mongoose chỉ là một lớp trên đầu API tiêu chuẩn, nên createIndex() phương thức chứa tất cả thông tin chi tiết về những gì đang xảy ra.

Có một số chi tiết cần xem xét ở đây, chẳng hạn như việc xây dựng chỉ mục có thể xảy ra trong "nền", và mặc dù điều này ít xâm phạm đến ứng dụng của bạn nhưng nó phải trả giá riêng. Đáng chú ý là kích thước chỉ mục từ việc tạo "nền" sẽ lớn hơn so với khi bạn tạo nó ở nền trước, chặn các hoạt động khác.

Ngoài ra, tất cả các chỉ mục đều phải trả phí, đặc biệt là về việc sử dụng đĩa cũng như chi phí bổ sung để ghi thông tin bổ sung bên ngoài dữ liệu thu thập.

Ưu điểm của một chỉ mục là việc "tìm kiếm" các giá trị có trong một chỉ mục sẽ nhanh hơn nhiều so với việc tìm kiếm thông qua toàn bộ tập hợp và phù hợp với các điều kiện có thể có.

Đây là những "sự đánh đổi" cơ bản liên quan đến các chỉ mục.

Dạng triển khai

Quay lại khối được trích dẫn từ tài liệu, có một mục đích thực sự đằng sau lời khuyên này.

Nó là điển hình trong các mẫu triển khai và đặc biệt là với việc di chuyển dữ liệu để thực hiện những việc theo thứ tự sau:

  1. Đưa dữ liệu vào các bộ sưu tập / bảng có liên quan
  2. Bật các chỉ mục trên dữ liệu bảng / bộ sưu tập có liên quan đến nhu cầu của bạn

Điều này là do có một chi phí liên quan đến việc tạo chỉ mục và như đã đề cập trước đó, bạn nên lấy kích thước tối ưu nhất từ ​​việc tạo chỉ mục, cũng như tránh việc mỗi lần chèn tài liệu cũng có chi phí viết mục nhập chỉ mục khi bạn thực hiện "tải" hàng loạt.

Vì vậy, đó là những gì các chỉ mục dành cho, đó là chi phí và lợi ích và thông điệp trong tài liệu mongoose được giải thích.

Nói chung, tôi khuyên bạn nên đọc Chỉ mục cơ sở dữ liệu cho họ là gì và họ làm gì. Hãy nghĩ đến việc đi bộ vào thư viện để tìm một cuốn sách. Có một chỉ số thẻ ở đó ở lối vào. Bạn có dạo quanh thư viện để tìm cuốn sách mình muốn không? Hay bạn tra nó trong mục lục thẻ để tìm nó ở đâu? Chỉ mục đó khiến ai đó mất thời gian để tạo và cũng giữ cho nó được cập nhật, nhưng nó giúp "bạn" tiết kiệm thời gian dạo quanh toàn bộ thư viện để bạn có thể tìm thấy sách của mình.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose - gây ra bởi ::11000 E11000 chỉ số lỗi chính trùng lặp?

  2. Tại sao cơ sở dữ liệu của ứng dụng Meteor đã được chạy một lần (và không bao giờ được tải) lại chiếm gần 3GB?

  3. MongoDB Node kiểm tra xem objectid có hợp lệ không

  4. Kiến trúc cho nhiều bản ghi dữ liệu, DB hay tệp?

  5. Android Studio:kết nối với máy chủ MongoDB bằng Trình điều khiển Java Mongo