Freigeben über


Indizierung im Hintergrund

Die Indizierung im Hintergrund ist eine Technik, mit der ein Datenbanksystem Indizierungsvorgänge für eine Auflistung ausführen kann, ohne andere Abfragen oder Aktualisierungen zu blockieren. Azure DocumentDB akzeptiert die Indizierungsanforderung im Hintergrund und führt sie asynchron aus.

Wenn Sie kleinere Ebenen oder Workloads mit hoher E/A-Auslastung verwenden, definieren Sie vordefinierte Indizes für leere Sammlungen, und verzichten Sie auf die Hintergrundindizierung.

Von Bedeutung

Erstellen Sie eindeutige Indizes für eine leere Sammlung, da eindeutige Indizes im Vordergrund erstellt werden und Lese- und Schreibvorgänge blockieren. Definieren Sie Indizes basierend auf Abfrage-Prädikaten, bevor Sie Daten einfügen, während die Auflistung noch leer ist. Dadurch wird der Ressourcenkonflikt in großen Sammlungen mit hohem Lese- und Schreibdatenverkehr reduziert.

Überwachen des Indexaufbaus

Wir erfahren mehr über den Fortschritt des Indexbuilds mithilfe des Befehls currentOp().

db.currentOp("db_name":"<db_name>", "collection_name":"<collection_name>")
  • db_name ist ein optionaler Parameter.
  • collection_name ist optionaler Parameter.
// 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
}

Einschränkungen

  • Eindeutige Indizes können nicht im Hintergrund erstellt werden. Es ist am besten, sie in einer leeren Sammlung zu erstellen und dann die Daten zu laden.
  • Die Hintergrundindizierung erfolgt sequenziell innerhalb einer einzelnen Sammlung. Die Anzahl der gleichzeitigen Indexbuilds für verschiedene Auflistungen ist jedoch konfigurierbar (Standard: 2).

Nächste Schritte