@ andreas-jung đúng trong ensure_index()
là một trình bao bọc trên create_index()
, Tôi nghĩ rằng sự nhầm lẫn nảy sinh với cụm từ:
Khi một chỉ mục được tạo (hoặc đảm bảo) bởi PyMongo, nó sẽ được "ghi nhớ" trong ttlseconds.
Không phải chỉ mục là tạm thời hay "tạm thời", điều xảy ra là trong khoảng thời gian được chỉ định của giây, một lệnh gọi đến ensure_index()
cố gắng tạo lại cùng một chỉ mục sẽ không có bất kỳ ảnh hưởng nào và sẽ không gọi create_index()
bên dưới, nhưng sau khi "bộ nhớ đệm" đó hết hạn, một lệnh gọi đến ensure_index()
sẽ gọi lại create_index()
bên dưới.
Tôi hoàn toàn hiểu được sự nhầm lẫn của bạn vì thực sự mà nói thì các tài liệu của PyMongo không thực hiện tốt công việc giải thích cách hoạt động của điều này, nhưng nếu bạn xem qua các tài liệu Ruby, thì lời giải thích sẽ rõ ràng hơn một chút:
- (Chuỗi) ensure_index (spec, opts ={})
Gọi create_index và đặt cờ để không làm như vậy nữa trong X phút nữa. Thời gian này có thể được chỉ định là quá trình ẩn khi khởi tạo Mongo ::DBobject dưới dạng tùy chọn [:cache_time] Mọi thay đổi đối với chỉ mục sẽ được thông báo bất kể thời gian lưu trong bộ nhớ cache (ví dụ:a thay đổi hướng chỉ mục)
Các tham số và tùy chọn cho phương thức này cũng giống như choCollection # create_index.
Ví dụ:
Call sequence:
Time t: @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and sets the 5 minute cache
Time t+2min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- doesn't do anything
Time t+3min : @posts.ensure_index([['something_else', Mongo::ASCENDING]) -- calls create_index and sets 5 minute cache
Time t+10min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and resets the 5 minute counter
Tôi không khẳng định các trình điều khiển hoạt động hoàn toàn giống nhau, chỉ là vì mục đích minh họa, giải thích của họ tốt hơn một chút IMHO.