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 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, 5.0 e 8.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 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
I lavoratori paralleli non sono supportati su classi di istanze 2xlarge e inferiori.
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: per una spiegazione completa dei tipi di indice supportati su Amazon DocumentDB, consulta Come indicizzare su Amazon
DocumentDB nel blog del database. AWS
Nozioni di base
Per iniziare la creazione dell'indice su una raccolta, usa il createIndexes comando. 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:
Crea indici utilizzando due worker paralleli sul cluster:
db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx"}]})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 createIndexesAumentate 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 db.currentOp() comando 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.
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 fino alla 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.
Background (univoco): le compilazioni di indici in background per un singolo documento (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 univoca utilizza una fase aggiuntiva (ordinamento delle chiavi 2) per cercare le chiavi duplicate. La build di sfondo (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: 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».
convalida: 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 «currentIndexBuildName», «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
}
Gestione degli indici Amazon DocumentDB
Index bloat
Amazon DocumentDB utilizza Multi-Version Concurrency Control (MVCC) per gestire transazioni simultanee. Quando i documenti vengono eliminati o aggiornati, le versioni precedenti rimangono nelle raccolte e negli indici come versioni «morte». Il processo di garbage collection recupera automaticamente lo spazio da queste versioni obsolete per operazioni future.
L'ingrandimento dell'indice si verifica quando gli indici di una raccolta diventano più grandi a causa dell'accumulo di voci di indice morte o obsolete o della frammentazione all'interno delle pagine. La percentuale riportata rappresenta la quantità di spazio nell'indice che può essere utilizzata dalle voci future dell'indice. Questo ingrossamento consuma spazio sia nella cache del buffer che nella memoria. Se vuoi rimuovere il gonfiore, dovrai ricostruire gli indici.
Esempio Esempio
Esegui il comando seguente per determinare lo spazio di archiviazione inutilizzato per il tuo indice:
db.coll.aggregate({$indexStats:{}});
Il risultato è simile a questo:
{ "name" : "_id_", "key" : { "_id" : 1 }, "host" : "devbox-test.localhost.a2z.com:27317", "size" : NumberLong(827392), "accesses" : { "ops" : NumberLong(40000), "docsRead" : NumberLong(46049), "since" : ISODate("2025-04-03T21:44:51.251Z") }, "cacheStats" : { "blksRead" : NumberLong(264), "blksHit" : NumberLong(140190), "hitRatio" : 99.8121 }, "unusedStorageSize" : { "unusedSizeBytes" :409600, "unusedSizePercent" :49.51} }
È possibile ricostruire gli indici senza tempi di inattività utilizzando il reIndex comando, che richiede una scansione dell'intera raccolta. Per informazioni, consulta Manutenzione dell'indice utilizzando ReIndex .
Manutenzione dell'indice utilizzando ReIndex
reIndexè un comando usato per ricostruire un indice. Viene in genere utilizzato quando un indice è danneggiato o inefficiente. Nel tempo, gli indici possono accumulare spazio inutilizzato a causa di numerosi aggiornamenti, inserimenti o eliminazioni, con conseguente riduzione delle prestazioni. La reindicizzazione aiuta a rimuovere lo spazio inutilizzato e a ripristinare l'efficienza dell'indice.
Linee guida ReIndex
reIndexè supportato solo su Amazon DocumentDB 5.0.Amazon DocumentDB supporta
reindexun singolo indice in background, che consente l'utilizzo di più lavoratori. Il vecchio indice è utilizzabile tramite interrogazioni durante l'esecuzione delreIndexprocesso.Amazon DocumentDB supporta l'indicizzazione del rapporto sullo stato di avanzamento tramite.
currentOpPuoi vedere fasi di creazione dell'indice simili a quelle Fasi di creazione dell'indice visualizzate durante la creazione dell'indice. L'unica differenza è che hareIndexsempre otto fasi, indipendentemente dal fatto che sia unico o meno. Non esiste una fase «indice di costruzione: ordinamento delle chiavi 2».reIndexpuò essere eseguito contemporaneamente a qualsiasi comando ad eccezione dei comandi relativi all'indice sulla stessa raccolta:createIndexes,,dropIndexese.collModrenameCollectionreIndexattualmente non è supportato per gli indici testuali, geospaziali, vettoriali e parziali.
compilazione ReIndex
Usa il seguente comando per ricostruire il tuo indice:
db.runCommand({ reIndex: "collection-name", index: "index-name"})
Facoltativamente, puoi anche controllare il numero di lavoratori assegnati al processo di ricostruzione:
db.runCommand({ reIndex: "collection-name", index: "index-name", workers:number})