Partager via


Indexation en arrière-plan

S’APPLIQUE À : MongoDB vCore

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 Cosmos DB for MongoDB vCore accepte la demande d’indexation en arrière-plan et l’exécute de manière asynchrone en arrière-plan.

Si vous utilisez des niveaux ou des charges de travail plus petits avec des besoins d’E/S supérieurs, il est recommandé de prédéfinir des index sur des collections vides et d’éviter de compter sur l’indexation en arrière-plan.

Important

Il est recommandé de créer des index unique sur une collection vide, car celles-ci sont créées au premier plan, ce qui entraîne le blocage des lectures et des écritures.

Il est conseillé de créer des index en fonction des prédicats de requête au préalable, tant que la collection est encore vide. Cela empêche la concurrence des ressources si c’est appliqué sur une grande collection avec de nombreuses opérations de 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 d’index simultanées sur différentes collections est configurable (par défaut : 2).

Étapes suivantes