Gestione degli indici Amazon DocumentDB - 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à.

Gestione degli indici Amazon DocumentDB

Creazione di indici Amazon DocumentDB

La creazione di indici in Amazon DocumentDB richiede l'adozione di 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 per la creazione di nuovi indici:

  • Supporto della versione di Amazon DocumentDB - Mentre l'indicizzazione a singolo worker è supportata su tutte le versioni di Amazon DocumentDB, l'indicizzazione di più worker è 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 principale 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 di Amazon DocumentDB.

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

    Nota

    I worker paralleli non sono supportati su classi di istanze 2xlarge e inferiori.

  • Numero minimo di lavoratori: il numero minimo di lavoratori che è possibile configurare è uno. L'impostazione predefinita per la creazione di indici 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 degli indici. Le dimensioni dei dati per gli indici potrebbero essere maggiori rispetto a quando utilizzi 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 questo post di blog per una spiegazione completa dei tipi di indice supportati su Amazon DocumentDB.

Nozioni di base

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

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 utilizzando due worker paralleli sul cluster:

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

    Aumenta la velocità del processo 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 avanza la creazione dell'indice. Tuttavia, più aumenta il numero di lavoratori, maggiore è il carico sulle vCPU e sull'IO di lettura dell'istanza principale. Assicurati che il cluster disponga di risorse sufficienti per gestire l'aumento del carico di lavoro senza compromettere gli altri carichi di lavoro.

Indicizzazione dello stato di avanzamento

Il processo di creazione dell'indice funziona inizializzando, scansionando le raccolte, ordinando le chiavi e, infine, inserendo le chiavi tramite un generatore di indici. Il processo prevede fino a sei fasi se viene eseguito in primo piano e fino a nove fasi quando viene eseguito in background. È possibile visualizzare le metriche di stato come 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 db.currentOp() comando nella shell mongo. Un completamento al 100% dell'ultima fase mostra che tutti gli indici sono stati creati con successo:

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

Tipi di compilazione dell'indice

I quattro tipi di build di indici sono:

  • Foreground: la build dell'indice in primo piano blocca tutte le altre operazioni del database fino alla creazione dell'indice. La build in primo piano di Amazon DocumentDB è composta da cinque fasi.

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

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

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

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: scansione della raccolta

3

3

3

3

indice dell'edificio: ordinamento delle chiavi 1

4

4

4

4

indice dell'edificio: ordinamento delle chiavi 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 worker è 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 solo lavoratore.

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

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

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

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

  • convalida: 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 dell'indice trovate nelle due fasi precedenti. L'unità di misura è «blocchi».

Esempio di output di compilazione dell'indice

Nell'esempio di output riportato di seguito (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 build. 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 «currentIndexBuildName», «msg» e «progress» non sono supportati su 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 }