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à.
Differenze tra un database relazionale (SQL) e DynamoDB nella gestione degli indici
Gli indici consentono di accedere a modelli di query alternativi e possono velocizzare le query. Questa sezione confronta e contrappone la creazione e l'utilizzo dell'indice in Amazon SQL DynamoDB.
Che si stia utilizzando un database relazionale o DynamoDB, è necessario eseguire con attenzione la creazione dell'indice. Ogni volta che una scrittura si verifica su una tabella, tutti gli indici della tabella devono essere aggiornati. In un ambiente di scrittura con tabelle di grandi dimensioni, questa operazione può consumare grandi quantità di risorse di sistema. In un ambiente di sola lettura o pressoché di sola lettura, questa operazione non costituisce un problema, ma devi assicurarti che gli indici vengano effettivamente utilizzati dall'applicazione e non occupino semplicemente spazio.
Argomenti
Differenze tra un database relazionale (SQL) e DynamoDB durante la creazione di un indice
Confronta l'CREATE INDEX
istruzione SQL con l'UpdateTable
operazione in Amazon DynamoDB.
Creazione di un indice con SQL
In un database relazionale, un indice è una struttura di dati che ti consente di eseguire query veloci su colonne diverse in una tabella. È possibile utilizzare l'CREATE
INDEX
SQListruzione per aggiungere un indice a una tabella esistente, specificando le colonne da indicizzare. Dopo aver creato l'indice, puoi eseguire una query sui dati della tabella come di consueto, ma ora il database può utilizzare l'indice per trovare rapidamente le righe specificate nella tabella anziché eseguire la scansione dell'intera tabella.
Dopo aver creato un indice, il database lo gestisce automaticamente. Ogni volta che modifichi i dati nella tabella, l'indice viene modificato automaticamente per riflettere le modifiche nella tabella.
In MySQL, creeresti un indice come il seguente.
CREATE INDEX GenreAndPriceIndex ON Music (genre, price);
Creazione di un indice in DynamoDB
In , puoi creare e usare un per scopi simili.
Gli indici in DynamoDB sono diversi dalle rispettive controparti relazionali. Quando crei un indice secondario globale, specifica una chiave di partizione e opzionalmente una chiave di ordinamento. Dopo aver creato l'indice secondario, è possibileQuery
oScan
proprio come faresti con un tavolo. DynamoDB non dispone di un ottimizzatore di query, quindi un indice secondario viene utilizzato solo quandoQuery
oScan
esso.
DynamoDB supporta due diversi tipi di indici:
-
Indici secondari globali: la chiave primaria dell'indice può essere qualsiasi due attributi della relativa tabella.
-
Indici secondari locali: la chiave di partizione dell'indice deve essere uguale a quella della chiave di partizione della tabella. Tuttavia, la chiave di ordinamento può essere un qualsiasi altro attributo.
assicura che i dati in un sono consistenti con la tabella. Puoi richiedere operazioni Query
o Scan
ad elevata consistenza su una tabella o un indice secondario locale. Tuttavia, gli indici secondari globali supportano solo la consistenza finale.
È possibile aggiungere un indice secondario globale a una tabella esistente utilizzando l'operazione UpdateTable
e specificando GlobalSecondaryIndexUpdates
.
{ TableName: "Music", AttributeDefinitions:[ {AttributeName: "Genre", AttributeType: "S"}, {AttributeName: "Price", AttributeType: "N"} ], GlobalSecondaryIndexUpdates: [ { Create: { IndexName: "GenreAndPriceIndex", KeySchema: [ {AttributeName: "Genre", KeyType: "HASH"}, //Partition key {AttributeName: "Price", KeyType: "RANGE"}, //Sort key ], Projection: { "ProjectionType": "ALL" }, ProvisionedThroughput: { // Only specified if using provisioned mode "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }
Dovrai fornire i seguenti parametri a UpdateTable
:
-
TableName
— La tabella a cui verrà associato l'indice. -
AttributeDefinitions
— I tipi di dati per gli attributi dello schema chiave dell'indice. -
GlobalSecondaryIndexUpdates
— Dettagli sull'indice che desideri creare:-
IndexName
: un nome per l'indice. -
KeySchema
— Gli attributi utilizzati per la chiave primaria dell'indice. -
Projection
- Specifica gli attributi che vengono copiati (proiettati) dalla tabella nell'indice. In questo caso,ALL
significa che tutti gli attributi sono copiati. -
ProvisionedThroughput (for provisioned tables)
— Il numero di letture e scritture al secondo necessarie per questo indice. Questo valore è separato dalle impostazioni di throughput assegnato dalla tabella.
-
Parte di questa operazione comporta la compilazione dei dati dalla tabella nel nuovo indice. Durante la compilazione la tabella rimane disponibile. Tuttavia, l'indice non è pronto fino a quando l'attributo Backfilling
cambia da true a false. Puoi utilizzare l'operazione DescribeTable
per visualizzare questo attributo.
Differenze tra un database relazionale (SQL) e DynamoDB durante l'interrogazione e la scansione di un indice
Confronta l'interrogazione e la scansione di un indice utilizzando l'SELECTistruzione in SQL con le Scan
operazioni Query
and in Amazon DynamoDB.
Argomenti
Interrogazione e scansione di un indice con SQL
In un database relazionale, non si lavora direttamente con gli indici. Si eseguono invece query sulle tabelle emettendo istruzioni SELECT
in modo che l'ottimizzatore di query possa fare uso di qualsiasi indice.
Un ottimizzatore di query è un componente del sistema di gestione di database relazionali (RDBMS) che valuta gli indici disponibili e determina se possono essere utilizzati per velocizzare una query. Se è possibile utilizzare gli indici per velocizzare una query, RDBMS accede prima all'indice e poi lo utilizza per individuare i dati nella tabella.
Di seguito sono SQL riportate alcune affermazioni che possono essere utilizzate GenreAndPriceIndexper migliorare le prestazioni. Supponiamo che la tabella Music contenga i dati sufficienti che l'ottimizzatore di query decida di usare questo indice, piuttosto che scansionare l'intera tabella.
/* All of the rock songs */ SELECT * FROM Music WHERE Genre = 'Rock';
/* All of the cheap country songs */ SELECT Artist, SongTitle, Price FROM Music WHERE Genre = 'Country' AND Price < 0.50;
Esecuzione di query e scansione di un indice in DynamoDB
In DynamoDB, le operazioni Query
e Scan
vengono eseguite direttamente sull'indice, nello stesso modo in cui vengono eseguite su una tabella. È possibile utilizzare API DynamoDB o PartiQL SQL (un linguaggio di query compatibile) per interrogare o scansionare l'indice. Devi specificare TableName
e IndexName
.
Di seguito sono riportate alcune domande su GenreAndPriceIndexDynamoDB. Lo schema della chiave per l'indice è composto dagli attributi Genre e Price.