Condividi tramite


Indicizzazione in background

SI APPLICA A: MongoDB vCore

L'indicizzazione in background è una tecnica che consente a un sistema di database di eseguire operazioni di indicizzazione su una raccolta senza bloccare altre query o aggiornamenti. Azure Cosmos DB per MongoDB vCore accetta la richiesta di indicizzazione in background e la esegue in modo asincrono in background.

Se si usano livelli o carichi di lavoro più piccoli con esigenze di I/O più elevate, è consigliabile definire indici predefiniti in raccolte vuote ed evitare di basarsi sull'indicizzazione in background.

Importante

È consigliabile creare unique indici in una raccolta vuota perché vengono creati in primo piano, che comporta il blocco di letture e scritture.

È consigliabile creare indici in base ai predicati di query in anticipo, mentre la raccolta è ancora vuota. Impedisce la contesa delle risorse se viene eseguito il push in una raccolta di grandi dimensioni di lettura/scrittura.

Monitorare la compilazione dell'indice

È possibile ottenere informazioni sullo stato di avanzamento della compilazione dell'indice usando il comando currentOp().

db.currentOp("db_name":"<db_name>", "collection_name":"<collection_name>")
  • db_name è un parametro facoltativo.
  • collection_name è un parametro facoltativo.
// 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
}

Limiti

  • Non è possibile creare indici univoci in background. È consigliabile crearli in una raccolta vuota e quindi caricare i dati.
  • L'indicizzazione in background viene eseguita in sequenza all'interno di una singola raccolta. Tuttavia, il numero di compilazioni simultanee di indici su raccolte diverse è configurabile (impostazione predefinita: 2).

Passaggi successivi