http://www.mongodb.org/display/DOCS/Indexes#Indexes-Basics
También el Node.JS MongoDB Driver
se comporta de esta manera: (. Búsqueda de function ensureIndex
en el archivo collection.js
)
https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js
2) Se crea un índice si no es en el 'caché conductor
El mismo identificador se utiliza con un significado diferente aquí, que me parece confuso.
El controlador python y el controlador ruby almacenan información en la memoria sobre los índices que se crearon recientemente, y llaman a este comportamiento 'caché'.
No informan a la base de datos sobre este almacenamiento en caché.
El resultado de este mecanismo es, si se llama a create_index
o ensure_index
por primera vez con un valor TTL (tiempo de vida), entonces el controlador insertará el índice en la base de datos y recordará esta inserción y también almacenar el Información TTL en la memoria. Lo que se almacena en caché aquí es la hora y el índice que fue.
La próxima vez que llame al ensure_index
con el mismo índice de la misma colección en la misma instancia del controlador, el comando ensure_index
solo volverá a insertar el índice si los segundos TTL no han transcurrido desde la primera llamada.
Si llama al create_index
, el índice siempre se insertará, sin importar cuánto tiempo pasó desde la primera llamada, y por supuesto también si esta es la primera llamada.
Este es el controlador pitón, buscar def ensure_index
en el archivo collection.py
:
https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/collection.py
Y el conductor rubí, buscar def ensure_index
en el archivo collection.rb
:
https://github.com/mongodb/mongo-ruby-driver/blob/master/lib/mongo/collection.rb
(Tenga en cuenta que las diferentes instancias de cliente no saben sobre el almacenamiento en caché de los demás, esta información se mantiene en la memoria solo y es por instancia. Si reinicia la aplicación cliente, la nueva instancia desconoce las antiguas inserciones de índice "en caché". También otros clientes no saben, no se dicen entre sí.)
Todavía no podía entender por completo, lo que sucede en el DB, cuando el controlador de python o el controlador de ruby insertan un índice que ya está allí.Sospecho que no hacen nada en este caso, lo que tiene más sentido y también coincide con el comportamiento del Interactive Shell
y el controlador JS.
En mongo 3.x ensureIndex está ** [en desuso] (http://stackoverflow.com/a/30314946/1090562) ** y, por lo tanto, es mejor dejar de usarlo. Incluso si todavía está en la versión 2.6, es mejor estar preparado de antemano y asegurarse de que haya menos sorpresas en la futura migración. –