@andreas-jung benar dalam ensure_index()
adalah pembungkus create_index()
, saya pikir kebingungan muncul dengan frasa:
Saat indeks dibuat (atau dipastikan) oleh PyMongo, indeks itu "diingat" selama ttldetik.
Bukan karena indeks bersifat sementara atau "sementara", yang terjadi adalah selama jumlah detik yang ditentukan, panggilan ke ensure_index()
mencoba membuat indeks yang sama lagi tidak memiliki efek apa pun dan tidak panggil create_index()
di bawahnya, tetapi setelah "cache" itu kedaluwarsa, panggilan ke ensure_index()
akan panggil lagi create_index()
di bawahnya.
Saya sangat memahami kebingungan Anda karena sejujurnya dokumen PyMongo tidak menjelaskan cara kerjanya dengan baik, tetapi jika Anda menuju ke dokumen Ruby, penjelasannya sedikit lebih jelas:
- (String) sure_index(spec, opts ={})
Memanggil create_index dan menyetel tanda untuk tidak melakukannya lagi selama X menit lagi. Kali ini dapat ditetapkan sebagai opsi saat menginisialisasi objek Mongo::DB sebagai opsi[:cache_time] Perubahan apa pun pada indeks akan disebarkan melalui terlepas dari waktu cache (mis. perubahan arah indeks)
Parameter dan opsi untuk metode ini sama dengan parameter untukCollection#create_index.
Contoh:
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
Saya tidak mengklaim driver bekerja persis sama, hanya saja untuk tujuan ilustrasi penjelasan mereka sedikit lebih baik IMHO.