Partager via


Indexation en arrière-plan

L’indexation en arrière-plan est une technique qui permet à un système de base de données d’effectuer des opérations d’indexation sur une collection sans bloquer d’autres requêtes ou mises à jour. Azure DocumentDB accepte la demande d’indexation en arrière-plan et l’exécute de manière asynchrone en arrière-plan.

Lorsque vous utilisez des paliers ou des charges de travail plus petits avec des E/S élevées, prédéfinissez les index sur des collections vides et évitez de vous appuyer sur l’indexation en arrière-plan.

Important

Créez des index uniques sur une collection vide, car les index uniques sont générés au premier plan et bloquent les lectures et les écritures. Définissez des index en fonction des prédicats de requête avant d’insérer des données pendant que la collection est toujours vide. Cela réduit la concurrence des ressources dans les grandes collections avec un trafic intense en lecture-écriture.

Surveiller la génération d’index

Nous pouvons en savoir plus sur la progression de la génération d’index à l’aide de la commande currentOp().

db.currentOp("db_name":"<db_name>", "collection_name":"<collection_name>")
  • db_name est un paramètre facultatif.
  • collection_name est un paramètre facultatif.
// 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
}

Limites

  • Les index uniques ne peuvent pas être créés en arrière-plan. Il est préférable de les créer sur une collection vide, puis de charger les données.
  • L’indexation en arrière-plan est effectuée séquentiellement au sein d’une collection unique. Toutefois, le nombre de builds simultanées d’index sur différentes collections est configurable (par défaut : 2).

Étapes suivantes