Diferenças entre um banco de dados relacional (SQL) e o DynamoDB ao gerenciar índices
Índices dão a você acesso a padrões de consulta alternativos, e você pode agilizar as consultas. Esta seção compara e contrasta a criação e o uso de índices no SQL e no Amazon DynamoDB.
Caso esteja usando um banco de dados relacional ou o DynamoDB, você deve ser criterioso com a criação do índice. Sempre que uma gravação ocorre em uma tabela, todos os índices da tabela devem ser atualizados. Em um ambiente que exige muita gravação com tabelas grandes, isso pode consumir grandes quantidades de recursos do sistema. Em um ambiente somente leitura ou em sua maioria de leitura, essa não é uma grande preocupação. Entretanto, você deve garantir que os índices estejam realmente sendo usados por seu aplicativo, e não simplesmente ocupando espaço.
Tópicos
Diferenças entre um banco de dados relacional (SQL) e o DynamoDB ao criar um índice
Compare a instrução CREATE INDEX
em SQL com a operação UpdateTable
no Amazon DynamoDB.
Criar um índice com o SQL
Em um banco de dados relacional, índice é uma estrutura de dados que permite realizar consultas rápidas em diferentes colunas em uma tabela. Você pode usar a instrução SQL CREATE
INDEX
para adicionar um índice a uma tabela existente, especificando as colunas a serem indexadas. Após a criação do índice, você pode consultar os dados na tabela como sempre, mas agora o banco de dados pode usar o índice para localizar rapidamente as linhas especificadas na tabela, em vez de verificar toda a tabela.
Depois que você cria um índice, o banco de dados o mantém para você. Sempre que você modifica os dados na tabela, o índice é modificado automaticamente para refletir as alterações da tabela.
No MySQL, você pode criar um índice da forma a seguir.
CREATE INDEX GenreAndPriceIndex ON Music (genre, price);
Criar um índice no DynamoDB
No DynamoDB você pode criar e usar um índice secundário para atender a objetivos semelhantes.
Os índices no DynamoDB são diferentes dos seus equivalentes relacionais. Ao criar um índice secundário, você deve especificar os atributos de chave: uma chave de partição e uma chave de classificação. Depois de criar o índice secundário, você pode usar a operação Query
ou Scan
da mesma forma como faria com uma tabela. O DynamoDB não tem um otimizador de consultas. Portanto, um índice secundário é usado apenas quando você usa a operação Query
ou Scan
.
O DynamoDB aceita dois tipos diferentes de índices:
-
Os índices secundários globais: a chave primária do índice pode ser qualquer dois atributos de sua tabela.
-
Índices secundários locais: a chave de partição do índice deve ser a mesma que a chave de partição de sua tabela. No entanto, a chave de classificação pode ser qualquer outro atributo.
O DynamoDB garante que os dados em um índice secundário sejam finais consistentes com sua tabela. Você pode solicitar operações Query
ou Scan
altamente consistentes em uma tabela ou em um índice secundário local. No entanto, índices secundários globais somente oferecem suporte à consistência eventual.
É possível adicionar um índice secundário global a uma tabela existente usando a operação UpdateTable
e especificando 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 } } } ] }
Você deve fornecer os parâmetros a seguir para UpdateTable
:
-
TableName
: a tabela à qual o índice será associado. -
AttributeDefinitions
: os tipos de dados dos atributos de esquema de chaves do índice. -
GlobalSecondaryIndexUpdates
: detalhes sobre o índice que você deseja criar:-
IndexName
: um nome para o índice. -
KeySchema
: os atributos que são usados para a chave primária do índice. -
Projection
: atributos da tabela que são copiados para o índice. Neste caso,ALL
significa que todos os atributos são copiados. -
ProvisionedThroughput (for provisioned tables)
: o número de leituras e gravações por segundo que são necessários para este índice. (Isso é separado das configurações de throughput provisionado da tabela.)
-
Parte dessa operação envolve backfilling de dados da tabela para o novo índice. Durante o backfilling, a tabela permanece disponível. No entanto, o índice não está pronto até que seu atributo Backfilling
mude de verdadeiro para falso. Você pode usar a operação DescribeTable
para visualizar esse atributo.
Diferenças entre um banco de dados relacional (SQL) e o DynamoDB ao consultar e varrer um índice
Compare a consulta e a verificação de um índice usando a instrução SELECT em SQL com as operações Query
e Scan
no Amazon DynamoDB.
Consultar e verificar um índice com o SQL
Em um banco de dados relacional, você não trabalha diretamente com índices. Em vez disso, você consulta tabelas, emitindo instruções SELECT
, e o otimizador de consultas pode fazer uso de índices.
Um otimizador de consultas é um componente do sistema de gerenciamento de banco de dados relacional (RDBMS - relational database management system) que avalia os índices disponíveis e determina se eles podem ser usados para agilizar uma consulta. Se os índices puderem ser usados para acelerar uma consulta, o RDBMS acessará o índice primeiro e, em seguida, o usará para localizar os dados na tabela.
Estas são algumas instruções SQL que podem usar GenreAndPriceIndex para melhorar a performance. Presumimos que a tabela Music tenha dados suficientes para que o otimizador de consultas decida usar esse índice, em vez de simplesmente verificar a tabela inteira.
/* 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;
Consultar e verificar um índice no DynamoDB
No DynamoDB, execute as operações Query
e Scan
diretamente no índice, como faria em uma tabela. É possível usar a API do DynamoDB ou do PartiQL (uma linguagem de consultas compatível com SQL) para consultar ou verificar o índice. Você deve especificar TableName
e IndexName
.
As seguintes são algumas consultas sobre GenreAndPriceIndex no DynamoDB. (O esquema de chaves desse índice consiste em Genre e Price.)