O recurso de índice secundário permite consultar dados com base na chave primária de uma tabela de dados e nas colunas de índice do índice secundário criado para ela. Se você precisar usar as colunas de atributo de uma tabela de dados para consultar dados, crie um índice secundário para a tabela a fim de acelerar as consultas. Ao criar um índice secundário para uma tabela de dados, defina as colunas de índice ou as colunas de atributo do índice secundário como as colunas predefinidas especificadas durante a criação da tabela. Após criar o índice secundário, utilize-o para consultar os dados.
Os índices secundários dividem-se em globais e locais. Para obter mais informações sobre esse recurso, consulte Overview.
É possível criar uma ou mais tabelas de índice ao criar uma tabela de dados por meio da operação CreateTable. Para obter mais informações, consulte Create a data table.
Pré-requisitos
Uma instância do OTSClient está inicializada. Para obter mais informações, consulte Initialize an OTSClient instance.
-
Uma tabela de dados com o parâmetro max_version definido como 1 foi criada. O parâmetro time_to_live da tabela de dados deve atender a uma das seguintes condições: Para obter mais informações, consulte Create a data table.
O parâmetro time_to_live da tabela de dados está definido como -1, o que indica que os dados na tabela nunca expiram.
O parâmetro time_to_live da tabela de dados está definido com um valor diferente de -1 e as operações de atualização na tabela são proibidas.
As colunas predefinidas estão especificadas para a tabela de dados.
Descrição
Um índice secundário utiliza um esquema de chave primária diferente, composto por colunas de chave primária e colunas predefinidas de uma tabela de dados, para fornecer dimensões de consulta adicionais. Os índices secundários dividem-se em globais e locais. Esses dois tipos de índice possuem modos de sincronização de dados e requisitos de chave primária diferentes. Para obter mais informações, consulte Overview.
Chame createIndex para criar um índice secundário para uma tabela de dados existente. Para criar um ou mais índices secundários junto com uma tabela de dados, configure os esquemas de índice na solicitação createTable. Para obter mais informações, consulte Create a data table.
public CreateIndexResponse createIndex(CreateIndexRequest createIndexRequest)
throws TableStoreException, ClientException
O código de exemplo a seguir cria o índice secundário global example_global_index para example_table. O índice inclui os dados existentes.
IndexMeta indexMeta = new IndexMeta("example_global_index");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");
CreateIndexRequest request =
new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);
Parâmetros
|
Parâmetro |
Descrição |
|
main_table_name |
O nome da tabela de dados. |
|
index_meta |
As informações do esquema da tabela de índice. Essas informações contêm os seguintes itens:
|
|
include_base_data |
Especifica se os dados existentes da tabela de dados serão incluídos na tabela de índice. Se você definir o parâmetro include_base_data como true, a tabela de índice incluirá os dados existentes. Se definir o parâmetro include_base_data como false, a tabela de índice não incluirá os dados existentes. |
Exemplos
Criar um índice secundário global
O código de exemplo a seguir mostra como criar um índice secundário para uma tabela de dados. No exemplo, as colunas de chave primária da tabela de dados são pk1 e pk2. As colunas de chave primária especificadas para o índice secundário são definedcol1 e pk1. As colunas de atributo especificadas para o índice secundário são definedcol2 e definedcol3.
# Specify the metadata of the index table.
# Specify the name, primary key columns, and attribute columns of the index table in sequence.
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['definedcol1', 'pk1'], ['definedcol2', 'definedcol3'])
# Specify the name of the data table and specify that the index table does not include the existing data of the data table.
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# Specify the name of the data table and specify that the index table includes the existing data of the data table.
# After you create the index table, the existing data of the data table is synchronized to the index table. After the existing data is synchronized, you can use the index table to query all data in the data table. The time that is required for synchronization varies based on the amount of data to synchronize.
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)
Criar um índice secundário local
O código de exemplo a seguir demonstra a criação de um índice secundário para uma tabela de dados. Neste cenário, as colunas de chave primária da tabela de dados são pk1 e pk2. As colunas de chave primária definidas para o índice secundário são definedcol1 e pk1. As colunas de atributo configuradas para o índice secundário são definedcol2 e definedcol3.
# Specify the metadata of the index table.
# Specify the name, primary key columns, attribute columns, and type of the index table in sequence.
# The first primary key column of a local secondary index must be the same as the first primary key column of the data table.
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['pk1', 'definedcol1'], ['definedcol2', 'definedcol3'],index_type= SecondaryIndexType.LOCAL_INDEX)
# Specify the name of the data table and specify that the index table does not include the existing data of the data table.
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# Specify the name of the data table and specify that the index table includes the existing data of the data table.
# After you create the index table, the existing data of the data table is synchronized to the index table. After the existing data is synchronized, you can use the index table to query all data in the data table. The time that is required for synchronization varies based on the amount of data to synchronize.
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)
Referências
Após criar um índice secundário, use-o para ler uma única linha de dados ou dados cujo valor de chave primária esteja em um intervalo específico. Para obter mais informações, consulte Use a secondary index to read data.
Exclua um índice secundário que não seja mais utilizado. Para obter mais informações, consulte Delete a secondary index.