Compartir a través de


Indexación en segundo plano

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. Azure DocumentDB acepta la solicitud de indexación en segundo plano y la realiza de forma asincrónica en segundo plano.

Al usar niveles o cargas de trabajo más pequeños con E/S elevadas, predefina índices en colecciones vacías y evite confiar en la indexación en segundo plano.

Importante

Cree índices únicos en una colección vacía porque los índices únicos se compilan en primer plano y bloquean las lecturas y escrituras. Defina índices basados en predicados de consulta antes de insertar datos mientras la colección sigue vacía. Esto reduce la contención de recursos en colecciones grandes con tráfico intensivo 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).

Pasos siguientes