Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Differenze tra un database relazionale (SQL) e DynamoDB nella gestione degli indici

Modalità Focus
Differenze tra un database relazionale (SQL) e DynamoDB nella gestione degli indici - 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à.

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

Gli indici consentono di accedere a modelli di query alternativi e possono velocizzare le query. In questa sezione viene eseguito il confronto delle operazioni di creazione e utilizzo dell'indice in SQL e in Amazon 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.

Differenze tra un database relazionale (SQL) e DynamoDB durante la creazione di un indice

Confrontare l'istruzione CREATE INDEX in SQL con l'operazione UpdateTable 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. Puoi utilizzare l'istruzione SQL CREATE INDEX 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, puoi creare un indice simile al 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, è possibileQueryoScanproprio come faresti con un tavolo. DynamoDB non dispone di un ottimizzatore di query, quindi un indice secondario viene utilizzato solo quandoQueryoScanesso.

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

Confrontare l'esecuzione di query e scansione di un indice usando l'istruzione SELECT (SELEZIONA) in SQL con le operazioni Query e Scan in Amazon DynamoDB.

Esecuzione di query 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 dei sistemi di gestione di database relazionali (RDBMS) che valuta gli indici disponibili e determina se possono essere utilizzati per accelerare una query. Se gli indici possono essere utilizzati per accelerare una query, RDBMS accede prima all'indice e quindi lo utilizza per individuare i dati nella tabella.

Ecco alcune istruzioni SQL 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. Puoi utilizzare l'API DynamoDB o PartiQL, un linguaggio di query compatibile con SQL, per eseguire query o effettuare la scansione dell'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.

DynamoDB API
// All of the rock songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre", ExpressionAttributeValues: { ":genre": "Rock" }, };

Questo esempio utilizza un ProjectionExpression per indicare che si vogliono solo alcuni degli attributi, piuttosto che tutti, nei risultati.

// All of the cheap country songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre and Price < :price", ExpressionAttributeValues: { ":genre": "Country", ":price": 0.50 }, ProjectionExpression: "Artist, SongTitle, Price" };

Di seguito è riportata una scansione in corso. GenreAndPriceIndex

// Return all of the data in the index { TableName: "Music", IndexName: "GenreAndPriceIndex" }
PartiQL for DynamoDB

Con PartiQL, puoi utilizzare l’istruzione Select PartiQL per eseguire query e scansioni sull'indice.

// All of the rock songs SELECT * FROM Music.GenreAndPriceIndex WHERE Genre = 'Rock'
// All of the cheap country songs SELECT * FROM Music.GenreAndPriceIndex WHERE Genre = 'Rock' AND Price < 0.50

Quanto segue è una scansione in corso GenreAndPriceIndex.

// Return all of the data in the index SELECT * FROM Music.GenreAndPriceIndex
Nota

Per esempi di codice che utilizzano Select, consulta Istruzioni SELECT PartiQL per DynamoDB.

// All of the rock songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre", ExpressionAttributeValues: { ":genre": "Rock" }, };

Questo esempio utilizza un ProjectionExpression per indicare che si vogliono solo alcuni degli attributi, piuttosto che tutti, nei risultati.

// All of the cheap country songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre and Price < :price", ExpressionAttributeValues: { ":genre": "Country", ":price": 0.50 }, ProjectionExpression: "Artist, SongTitle, Price" };

Di seguito è riportata una scansione in corso. GenreAndPriceIndex

// Return all of the data in the index { TableName: "Music", IndexName: "GenreAndPriceIndex" }
PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.