Miglioramento dell'accesso ai dati tramite gli indici secondari - Amazon DynamoDB

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à.

Miglioramento dell'accesso ai dati tramite gli indici secondari

Amazon DynamoDB offre l'accesso rapido agli elementi in una tabella specificando i valori della chiave primaria. Tuttavia, molte applicazioni potrebbero trarre vantaggio dalla presenza di una o più chiavi secondarie (o alternative) disponibili, per permettere un accesso ai dati efficiente con altri attributi rispetto alla chiave primaria. A tale scopo, puoi creare uno o più indici secondari in una tabella ed emettere delle richieste Query o Scan rispetto a tali indici.

Un indice secondario è una struttura di dati contente un sottoinsieme di attributi di una tabella, oltre a una chiave alternativa per il supporto delle operazioni Query. Puoi recuperare dati dall'indice tramite una Query, nello stesso modo in cui utilizzi Query con una tabella. Una tabella può presentare più indici secondari, che consentono alle applicazioni di accedere a molti modelli di query diversi.

Nota

Puoi inoltre eseguire un'operazione Scan su un indice nello stesso modo in cui esegui eseguiresti una Scan su una tabella.

Ciascun indice secondario è associato esattamente a una tabella della quale ottiene i dati. Questa è denominata tabella di base dell'indice. Quando crei un indice, è necessario definire una chiave alternativa dell'indice (chiave di partizione e chiave di ordinamento). Vengono definiti anche gli attributi che si desidera siano proiettati, o copiati, dalla tabella di base nell'indice. DynamoDB copia questi attributi dell'indice insieme agli attributi della chiave primaria dalla tabella di base. Puoi scansionare o eseguire una query sull'indice nello stesso modo in cui lo faresti su una tabella.

Ciascun indice secondario viene gestito automaticamente da DynamoDB. Quando aggiungi, modifichi o elimini item nella tabella di base, verranno aggiornati tutti gli indici della tabella sulla base di tali modifiche.

DynamoDB supporta due tipi di indici secondari:

  • Indice secondario globale: un indice con una chiave di partizione e una chiave di ordinamento che possono essere differenti da quelle presenti sulla tabella di base. Un indice secondario viene considerato globale perché le query possono riferirsi a tutti i dati di una tabella di base, in tutte le partizioni. Un indice secondario locale è memorizzato nel suo spazio di partizione lontano dalla tabella di base e viene dimensionato separatamente dalla tabella di base.

  • Indice secondario locale: un indice con la stessa chiave di partizione della tabella di base ma con una chiave di ordinamento diversa. Un indice secondario è locale nel senso che l'ambito di ogni partizione di un indice secondario locale è rappresentato da una partizione di tabella di base con lo stesso valore di chiave di partizione.

Per un confronto tra gli indici secondari globali e gli indici secondari locali, guarda questo video.

Quando determini il tipo di indice da utilizzare, è consigliabile prendere in considerazione i requisiti della tua applicazione. Nella tabella riportata di seguito sono riportate le differenze principali tra un indice secondario globale e un indice secondario locale.

Caratteristica Indice secondario globale Indice secondario locale
Schema della chiave La chiave primaria di un indice secondario globale può essere sia semplice (chiave di partizione) che composita (chiave di partizione e chiave di ordinamento). La chiave primaria di un indice secondario locale deve essere composita (chiave di partizione e chiave di ordinamento).
Attributi della chiave La chiave di partizione e la chiave di ordinamento (se presente) dell'indice possono essere costituite da qualsiasi attributo della tabella di base di tipo stringa, numero o binario. La chiave di partizione dell'indice è lo stesso attributo della chiave di partizione della tabella di base. La chiave di partizione può essere qualsiasi attributo della tabella di base di tipo stringa, numero o binario.
Limitazioni della dimensione per valore di chiave di partizione Non sono previste limitazioni sulle dimensioni per gli indici secondari globali. Per ciascun valore della chiave di partizione, la dimensione totale tutti gli elementi indicizzati deve essere minore o uguale a 10 GB.
Operazioni di indici online Gli indici secondari globali possono essere creati al momento della creazione di una tabella. È inoltre possibile aggiungere un nuovo indice secondario globale a una tabella esistente oppure eliminare un indice secondario globale esistente. Per ulteriori informazioni, consulta Gestione degli indici secondari globali. È possibile creare indici secondari locali al momento della creazione di una tabella. Non è possibile aggiungere un indice secondario locale a una tabella esistente né eliminare gli indici secondari locali presenti correntemente.
Query e partizioni Un indice secondario globale consente di eseguire una query sull'intera tabella, su tutte le partizioni. Un indice secondario locale consente di eseguire una query su una singola partizione, come specificato dal valore della chiave di partizione nella query.
Consistenza di lettura Tuttavia, le query sugli indici secondari globali supportano solo la consistenza finale. Quando si esegue una query su un indice secondario locale, è possibile scegliere tra consistenza finale o forte consistenza.
Utilizzo del throughput assegnato Ciascun indice secondario globale ha le proprie impostazioni di velocità effettiva assegnata per l'attività di lettura e scrittura. Le query o le scansioni su un indice secondario globale utilizzano unità di capacità dall'indice, non della tabella di base. Lo stesso vale per gli aggiornamenti dell'indice secondario globale a causa delle scritture nella tabella. Un indice secondario globale associato a tabelle globali consuma unità di capacità di scrittura. Le query o le scansioni su un indice secondario locale utilizzano unità di capacità di lettura della tabella di base. Quando si scrive su una tabella, vengono aggiornati anche i relativi indici secondari locali; tali aggiornamenti utilizzano unità di capacità di scrittura della tabella di base. Un indice secondario globale associato a tabelle globali consuma unità di capacità di scrittura replicate.
Attributi proiettati Con le query o le scansioni dell'indice secondario globale, è possibile richiedere solo gli attributi proiettati nell'indice. DynamoDB non recupera alcun attributo dalla tabella. Se si esegue una query o una scansione sull'indice secondario globale, è possibile richiedere gli attributi che non sono proiettati sull'indice. DynamoDB recupera automaticamente tali attributi dalla tabella.

Se si intende creare una o più tabelle con gli indici secondari, è necessario farlo in sequenza. Ad esempio, sarebbe necessario creare la prima tabella e attendere che il relativo stato divenga ACTIVE per poter creare la tabella successiva, dunque attendere che il suo stato divenga ACTIVEe così via. Se si prova a creare più tabelle contemporaneamente con un indice secondario, DynamoDB restituisce una LimitExceededException.

Ogni indice secondario utilizza la stessa classe di tabella e modalità di capacità della tabella di base a cui è associato. Per ogni indice secondario, è necessario specificare quanto segue:

  • Tipo di indice da creare, ovvero un indice secondario globale o un indice secondario locale.

  • Un nome dell'indice. Le regole di denominazione per gli indici sono le stesse regole per le tabelle, come elencate in Quote di servizio, account e tabelle in Amazon DynamoDB. Il nome deve essere univoco per la tabella di base a cui è associato, ma puoi utilizzare lo stesso nome per gli indici associati a tabelle di base diverse.

  • Lo schema delle chiavi dell'indice. Ciascun attributo dello schema della chiave di indicizzazione deve essere un attributo di tipo String, Number o Binary. Non sono consentiti altri tipi di dati, tra cui documenti e set. Altri requisiti della schema della chiave dipendono dal tipo di indice:

    • Per un indice secondario globale, la chiave di partizione può essere qualsiasi attributo scalare della tabella di base. È facoltativa una chiave di ordinamento, che può essere anch'essa qualsiasi attributo scalare della tabella di base.

    • Per un indice secondario locale, la chiave di partizione deve essere uguale alla chiave di partizione della tabella di base; la chiave di ordinamento deve essere un attributo non chiave della tabella di base.

  • Gli attributi aggiuntivi, se presenti, da proiettare dalla tabella di base nell'indice. Questi attributi si aggiungono agli attributi di chiave della tabella, proiettati automaticamente in ciascun indice. Puoi proiettare attributi di qualsiasi tipo di dati, tra cui scalari, documenti e set.

  • Le impostazioni di throughput assegnato dell'indice, se necessario:

    • Per un indice secondario globale, è necessario specificare le impostazioni delle unità di capacità di lettura e scrittura. Queste impostazioni di throughput assegnato sono indipendenti dalle impostazioni della tabella di base.

    • Per un indice secondario locale, non è necessario specificare le impostazioni delle unità di capacità di lettura e scrittura. Tutte le operazioni di lettura e scrittura su un indice secondario locale utilizzano le impostazioni di velocità effettiva assegnata della relativa tabella di base.

Per la massima flessibilità delle query, è possibile creare fino a 20 indici secondari globali (quota predefinita) e fino a 5 indici secondari locali per tabella.

La quota di indici secondari globali per tabella è cinque per le seguenti regioni AWS :

  • AWS GovCloud (Stati Uniti orientali)

  • AWS GovCloud (Stati Uniti occidentali)

  • Europa (Stoccolma)

Per ottenere un elenco dettagliato di indici secondari su una tabella, utilizza l'operazione DescribeTable. DescribeTable restituisce il nome, la dimensione dell'archiviazione e il numero di elementi per ogni indice secondario nella tabella. Questi valori non vengono aggiornati in tempo reale, bensì ogni circa sei ore.

È possibile accedere ai dati in un indice secondario utilizzando l'operazione Query o Scan. È necessario specificare il nome della tabella di base e il nome dell'indice che si desidera utilizzare, gli attributi da restituire nei risultati e qualsiasi espressione di condizione o filtro da applicare. DynamoDB può restituire i risultati in ordine crescente o decrescente.

Quando elimini una tabella, verranno eliminati anche tutti gli indici associati alla tabella.

Per le best practice, consulta Best practice per l'uso di indici secondari in DynamoDB..