View a markdown version of this page

Creazione dell'indice - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creazione dell'indice

La creazione di indici in Amazon DocumentDB richiede una serie di decisioni:

  • Quanto velocemente deve essere completato?

  • La raccolta può essere inaccessibile durante la compilazione?

  • Quanta potenza di calcolo di un'istanza può essere allocata alla build?

  • Che tipo di indice deve essere creato?

Questa sezione ti aiuta a rispondere a queste domande e fornisce i comandi e gli esempi di monitoraggio per creare un indice Amazon DocumentDB sulla tua raccolta di cluster basata su istanze.

Linee guida

Le seguenti linee guida includono limiti di base e compromessi di configurazione nella creazione di nuovi indici:

  • Supporto delle versioni di Amazon DocumentDB: mentre l'indicizzazione di un singolo lavoratore è supportata in tutte le versioni di Amazon DocumentDB, l'indicizzazione di più lavoratori è supportata solo nelle versioni 4.0 e 5.0 di Amazon DocumentDB.

  • Compromesso in termini di prestazioni: l'aumento del numero di lavoratori nel processo di creazione dell'indice aumenta l'utilizzo della CPU e l'IO di lettura sull'istanza primaria del database Amazon DocumentDB. Le risorse necessarie per creare un nuovo indice non saranno disponibili per il carico di lavoro in esecuzione.

  • Cluster elastici: l'indicizzazione parallela non è supportata sui cluster elastici Amazon DocumentDB.

  • Numero massimo di lavoratori: il numero massimo di lavoratori che puoi configurare dipende dalla dimensione dell'istanza principale nel cluster di database. È la metà del numero totale di vCPU sull'istanza primaria del cluster di database. Ad esempio, è possibile eseguire un massimo di 32 worker su un'istanza db.r6g.16xlarge con 64 vCPU.

Nota

La creazione parallela dell'indice è supportata sulle istanze 2xlarge e successive.

  • Numero minimo di lavoratori: il numero minimo di lavoratori che puoi configurare è uno. L'impostazione predefinita per la creazione dell'indice su cluster basati su istanze è di due worker. Tuttavia, è possibile ridurre il numero di lavoratori a uno utilizzando l'opzione «worker threads». Questo eseguirà il processo con un solo lavoratore.

  • Compressione dell'indice: Amazon DocumentDB non supporta la compressione dell'indice. Le dimensioni dei dati per gli indici potrebbero essere maggiori rispetto a quando si utilizzano altre opzioni.

  • Indicizzazione di più raccolte: metà delle vCPU sull'istanza principale del cluster di database può essere utilizzata per i lavoratori configurati che eseguono la creazione di indici su più raccolte.

  • Tipi di indice: consulta l'elenco Tipi di indice dei tipi di indice supportati su Amazon DocumentDB.

Tipi di compilazione dell'indice

I quattro tipi di build dell'indice sono:

  • Foreground: la build dell'indice in primo piano blocca tutte le altre operazioni del database sulla raccolta in cui l'indice viene creato, fino al completamento della creazione dell'indice. La build in primo piano di Amazon DocumentDB è composta da cinque fasi.

  • Foreground (unique): le build con indice in primo piano a documento singolo (univoco) bloccano altre operazioni del database, ad esempio le normali compilazioni in primo piano. A differenza della build di base in primo piano, la build univoca utilizza una fase aggiuntiva (ordinamento delle chiavi 2) per cercare le chiavi duplicate. La build in primo piano (unica) è composta da sei fasi.

  • Background: la creazione dell'indice in background consente di eseguire altre operazioni del database in primo piano durante la creazione dell'indice. La build in background di Amazon DocumentDB è composta da otto fasi.

  • Sfondo (univoco): le compilazioni di indici in background per un singolo documento (univoco) consentono di eseguire altre operazioni del database in primo piano durante la creazione dell'indice. A differenza della build di base in background, la build univoca utilizza una fase aggiuntiva (ordinamento delle chiavi 2) per cercare le chiavi duplicate. La build di sfondo (unica) è composta da nove fasi.

Il tipo di build dell'indice predefinito è foreground.

Per creare un indice in background, aggiungete il parametro «background»: true durante la creazione dell'indice.

Nozioni di base

Per iniziare la creazione dell'indice su una raccolta, utilizzate il comando createIndexes. Per impostazione predefinita, il comando eseguirà due worker paralleli che aumentano la velocità del processo di creazione dell'indice di due volte.

Ad esempio, il seguente processo di comando dimostra come creare un indice per il campo «user_name» in un documento e aumentare la velocità del processo di indicizzazione a quattro worker:

  1. Crea indici in background utilizzando due worker paralleli sul cluster:

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "background":true }]})
  2. Per ottimizzare la velocità del processo di creazione dell'indice, è possibile specificare il numero di lavoratori utilizzando l'opzione «worker threads» («workers»:<number>) nel comando db.runCommand createIndexes.

    Aumentate la velocità del processo fino a quattro lavoratori paralleli:

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "workers":4}]})
Nota

Maggiore è il numero di lavoratori, più velocemente procede la creazione dell'indice. Tuttavia, maggiore è il numero di lavoratori, maggiore è il carico sulle vCPU e sull'IO di lettura dell'istanza primaria. Assicurati che il cluster sia sufficientemente predisposto per gestire l'aumento del carico senza compromettere gli altri carichi di lavoro.

Stato di avanzamento dell'indicizzazione

Il processo di creazione dell'indice funziona inizializzando, analizzando le raccolte, ordinando le chiavi e, infine, inserendo le chiavi tramite un generatore di indici. Il processo prevede fino a sei fasi quando viene eseguito in primo piano e fino a nove fasi quando viene eseguito in background. È possibile visualizzare le metriche sullo stato, ad esempio la percentuale di completamento, il numero totale di blocchi di archiviazione scansionati, le chiavi ordinate e le chiavi inserite, fase per fase.

Monitora l'avanzamento del processo di indicizzazione utilizzando il comando db.currentOp () nella shell mongo. Il completamento al 100% dell'ultima fase mostra che tutti gli indici sono stati creati con successo:

db.currentOp({"command.createIndexes": { $exists : true } })
Nota

La visualizzazione dello stato di avanzamento dell'indicizzazione è supportata solo su Amazon DocumentDB 5.0.

Fasi di creazione dell'indice

Stage Primo piano Primo piano (unico) Contesto Sfondo (unico)
Inizializzazione 1 1 1 1
indice di costruzione: inizializzazione 2 2 2 2
indice di costruzione: raccolta di scansioni 3 3 3 3
indice degli edifici: chiavi di ordinamento 1 4 4 4 4
indice di costruzione: chiavi di ordinamento 2 5 5
indice di costruzione: inserimento di chiavi 5 6 5 6
convalida: indice di scansione 6 7
convalida: ordinamento delle tuple 7 8
convalida: scansione della raccolta 8 9
  • inizializzazione: createIndex sta preparando il generatore di indici. Questa fase dovrebbe essere molto breve.

  • building index: inizializzazione - Il generatore di indici si sta preparando a creare l'indice. Questa fase dovrebbe essere molto breve.

  • building index: scanning collection - Il generatore di indici sta eseguendo una scansione della raccolta per raccogliere le chiavi dell'indice. L'unità di misura è «blocchi».

Nota

Se più di un lavoratore è configurato per la creazione dell'indice, questo viene visualizzato in questa fase. La fase di «scansione della raccolta» è l'unica fase che utilizza più worker durante il processo di creazione dell'indice. Tutte le altre fasi mostreranno un singolo lavoratore.

  • building index: ordinamento delle chiavi 1 - Il generatore di indici sta ordinando le chiavi di indice raccolte. L'unità di misura è «chiavi».

  • building index: sorting keys 2 - Il generatore di indici ordina le chiavi di indice raccolte che corrispondono a tuple morte. Questa fase esiste solo per la creazione di un indice univoco. L'unità di misura è «chiavi».

  • building index: inserimento di chiavi - Il generatore di indici sta inserendo le chiavi dell'indice nel nuovo indice. L'unità di misura è «chiavi».

  • validazione: indice di scansione - CreateIndex sta scansionando l'indice per trovare le chiavi che devono essere convalidate. L'unità di misura è «blocchi».

  • validazione: ordinamento delle tuple - CreateIndex sta ordinando l'output della fase di scansione dell'indice.

  • convalida: scansione della raccolta - CreateIndex sta scansionando la raccolta per convalidare le chiavi di indice trovate nelle due fasi precedenti. L'unità di misura è «blocchi».

Esempio di output per la creazione dell'indice

Nel seguente esempio di output (creazione dell'indice in primo piano), viene mostrato lo stato della creazione dell'indice. Il campo «msg» riassume l'avanzamento della compilazione indicando la fase e la percentuale di completamento della compilazione. Il campo «workers» indica il numero di lavoratori utilizzati durante quella fase della creazione dell'indice. Il campo «avanzamento» mostra i numeri effettivi utilizzati per calcolare la percentuale di completamento.

Nota

I campi IndexBuildName «current», «msg» e «progress» non sono supportati in Amazon DocumentDB versione 4.0.

{ "inprog" : [{ … "command": { "createIndexes": "test", "indexes": [{ "v": 2, "key": { "user_name": 1 }, "name": "user_name_1" }], "lsid": { "id": UUID("094d0fba-8f41-4373-82c3-7c4c7b5ff13b") }, "$db": "test" }, "currentIndexBuildName": user_name_1, "msg": "Index Build: building index number_1, stage 6/6 building index: 656860/1003520 (keys) 65%", "workers": 1, "progress": { "done": 656861, "total": 1003520 }, … ], "ok" : 1 }

Risorse per la risoluzione dei problemi

Consulta le seguenti risorse sulla risoluzione dei problemi di creazione degli indici: