2011-10-16 12 views
5

Tôi đang sử dụng MongoDB cho ứng dụng web của chúng tôi. Giả sử sẽ có một 'find()' trên MongoDB cho các yêu cầu gửi đến. Cách/địa điểm được khuyến nghị để thêm chỉ mục vào bộ sưu tập MongoDB là gì?Cách/địa điểm được đề xuất để tạo chỉ mục trên bộ sưu tập MongoDB cho một ứng dụng web

Một số tùy chọn mà tôi có thể nghĩ đến: -

1) 'EnsureIndex' trên bộ sưu tập khi khởi tạo ứng dụng. [Nhưng làm thế nào tôi sẽ 'đảm bảo' ngay từ lần đầu tiên ứng dụng khởi tạo? vì sẽ không có bất kỳ dữ liệu nào tại chỗ]

2 'EnsureIndex' trước mọi hoạt động 'tìm' (trên yêu cầu web)? nhưng đây không phải là chi phí ngay cả khi 'EnsureIndex' sẽ không tạo chỉ mục nếu nó đã được tạo?

Bất kỳ tùy chọn nào khác?

Xin cảm ơn trước.

Trả lời

4

Tôi sẽ đặt nó khi bạn khởi tạo ứng dụng. Nếu bộ sưu tập không tồn tại khi bạn gọi EnsureIndex, chỉ mục (và bộ sưu tập) sẽ được tạo tại thời điểm đó.

Tôi giả định rằng bạn biết một loại ưu tiên bạn sẽ chạy các loại truy vấn nào trên dữ liệu và loại dữ liệu nào bạn sẽ đưa vào chỉ mục, tất nhiên.

+3

+1 Cũng đáng nói rằng 'db.coll.ensureIndex ({foo: 1})' có thể tạo chỉ mục trên trường 'foo' ngay cả khi bộ sưu tập trống. – Nikhil

0

Rõ ràng chạy EnsureIndex khi bạn khởi động ứng dụng. Nó không quan trọng nếu bạn gọi EnsureIndex trên một bộ sưu tập trống (vì nó sẽ thêm dữ liệu sau đó vào chỉ mục).

Ngoài ra, tùy thuộc vào thuộc tính của bạn dựa trên truy vấn nào. Nếu bạn truy vấn ví dụ dựa trên người dùng đã đăng nhập, thì bạn nên thêm chỉ mục trên id người dùng.

0

Bạn có thể tạo tập lệnh khởi tạo cho bộ sưu tập được chạy từ dòng lệnh của máy chủ (tài liệu Mongo thảo luận cách viết kịch bản Mongo và chạy chúng từ CLI). Sau đó, nó có chạy bất cứ khi nào mongod bắt đầu? Kịch bản lệnh chỉ có thể gọi hàm sureIndex() trên đối tượng thu thập.

Các vấn đề liên quan