Indexación en segundo plano
SE APLICA A: núcleo virtual de MongoDB
La indexación en segundo plano es una técnica que permite a un sistema de base de datos realizar operaciones de indexación en una colección sin bloquear otras consultas ni actualizaciones. El núcleo virtual de Azure Cosmos DB for MongoDB acepta la solicitud de indexación en segundo plano y la realiza de forma asincrónica en segundo plano.
Si trabaja con niveles o cargas de trabajo más pequeños con mayores necesidades de E/S, se recomienda predefinir índices en colecciones vacías y evitar confiar en la indexación en segundo plano.
Importante
Se recomienda crear índices unique
en una colección vacía a medida que se crean en primer plano, lo que provoca el bloqueo de lecturas y escrituras.
Se recomienda crear índices basados en predicados de consulta de antemano, mientras que la colección sigue vacía. Evita la contención de recursos si se inserta en una colección de gran tamaño de lectura y escritura.
Supervisión de la compilación de índices
Podemos obtener información sobre el progreso de la compilación del índice mediante el comando currentOp()
.
db.currentOp("db_name":"<db_name>", "collection_name":"<collection_name>")
db_name
es un parámetro opcional.collection_name
es un parámetro opcional.
// Output for reviewing build status
{
inprog: [
{
shard: 'defaultShard',
active: true,
type: 'op',
opid: '10000003049:1701252500485346',
op_prefix: Long("10000003049"),
currentOpTime: ISODate("2024-06-24T10:08:20.000Z"),
secs_running: Long("2"),
command: {createIndexes: '' },
op: 'command',
waitingForLock: true
},
{
shard: 'defaultShard',
active: true,
type: 'op',
opid: '10000003050:1701252500499914',
op_prefix: Long("10000003050"),
currentOpTime: ISODate("2024-06-24T10:08:20.000Z"),
secs_running: Long("2"),
command: {
createIndexes: 'BRInventory', },
indexes: [
{
v:2,
key: {vendorItemId: 1, vendorId: 1, itemType: 1},
name: 'compound_idx'
}
],
'$db': 'test'
op: 'command',
waitingForLock: false,
progress: {
blocks_done: Long("12616"),
blocks_done: Long("1276873"),
documents_d: Long("0"),
documents_to: Long("0")
},
msg: 'Building index.Progress 0.0098803875. Waiting on op_prefix: 10000000000.'
}
],
ok: 1
}
Limitaciones
- No se pueden crear índices únicos en segundo plano. Es mejor crearlos en una colección vacía y, a continuación, cargar los datos.
- La indexación en segundo plano se realiza secuencialmente dentro de una sola colección. Sin embargo, el número de compilaciones de índices simultáneos en diferentes colecciones es configurable (valor predeterminado: 2).