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 essa tabela. Se você precisar usar as colunas de atributo de uma tabela de dados para consultar informações, crie um índice secundário para acelerar as consultas. Ao criar esse índice, 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 de dados.
Os índices secundários classificam-se em globais e locais. Para obter mais informações sobre o recurso de índice secundário, consulte Índice secundário.
Você pode criar uma ou mais tabelas de índice ao criar uma tabela de dados chamando a operação CreateTable. Para obter mais informações, consulte Criar uma tabela de dados.
Pré-requisitos
Uma instância OTSClient inicializada. Para obter mais informações, consulte Inicializar um cliente Tablestore.
-
Uma tabela de dados criada com o parâmetro MaxVersions definido como 1. O parâmetro TimeToLive da tabela de dados deve atender a uma das seguintes condições:
O parâmetro TimeToLive da tabela de dados está definido como -1, o que significa que os dados na tabela nunca expiram.
O parâmetro TimeToLive da tabela de dados está definido como um valor diferente de -1 e as operações de atualização na tabela são proibidas.
Colunas predefinidas especificadas para a tabela de dados.
Observações de uso
O nome da tabela de índice deve ser diferente do nome de qualquer tabela de séries temporais ou tabela de dados existente.
Ao criar um índice secundário, o Tablestore adiciona automaticamente as colunas de chave primária da tabela de dados não especificadas como colunas de índice ao índice secundário como colunas de chave primária deste.
Ao criar um índice secundário local, a primeira coluna de chave primária da tabela de índice deve ser igual à primeira coluna de chave primária da tabela de dados.
Parâmetros
|
Parâmetro |
Descrição |
|
MainTableName |
O nome da tabela de dados. |
|
IndexMeta |
As informações de esquema da tabela de índice. As informações de esquema contêm os seguintes itens:
|
|
IncludeBaseData |
Especifica se os dados existentes da tabela de dados devem ser incluídos na tabela de índice. Se você definir o parâmetro IncludeBaseData como true, a tabela de índice conterá os dados existentes da tabela de dados. Se você definir o parâmetro IncludeBaseData como false, a tabela de índice não conterá os dados existentes da tabela de dados. |
Exemplos
Criar um índice secundário global
O código de exemplo a seguir mostra como criar um índice secundário global que inclui os dados existentes da tabela de dados para a qual o índice é criado. No exemplo, as colunas de chave primária da tabela de dados são pk1 e pk2. A coluna de chave primária e a coluna de atributo especificadas para o índice secundário global são definedcol1 e definedcol2, respectivamente. As colunas de chave primária da tabela de índice consistem em definedcol1, pk1 e pk2. A coluna de atributo da tabela de índice é definedcol2.
func CreateGlobalIndexSample(client *tablestore.TableStoreClient, tableName string) {
// Specify the metadata of the index table.
indexMeta := new(tablestore.IndexMeta)
// Specify the definedcol1 column of the data table as the primary key column of the index table.
indexMeta.AddPrimaryKeyColumn("definedcol1")
// Specify the definedcol2 column of the data table as the attribute column of the index table.
indexMeta.AddDefinedColumn("definedcol2")
// Specify the name of the index table.
indexMeta.IndexName = "<INDEX_NAME>"
indexReq := &tablestore.CreateIndexRequest{
// Specify the data table for which you want to create the index table and apply the settings that you specified for the index table.
MainTableName:tableName,
IndexMeta: indexMeta,
/**
You can set the IncludeBaseData parameter to true to synchronize the existing data of the data table to the index table. This way, you can use the index table to query all data in the data table.
The amount of time required to synchronize the existing data of the data table to the index table varies based on the amount of data in the data table.
*/
IncludeBaseData: true,
}
resp, err := client.CreateIndex(indexReq)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create index finished", resp)
}
}
Criar um índice secundário local
O código de exemplo a seguir mostra como criar um índice secundário local que inclui os dados existentes da tabela de dados para a qual o índice é criado. 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 local são pk1 e definedcol1. A coluna de atributo especificada para o índice secundário local é definedcol2. As colunas de chave primária da tabela de índice consistem em pk1, definedcol1 e pk2. A coluna de atributo da tabela de índice é definedcol2.
func CreateGLocalIndexSample(client *tablestore.TableStoreClient, tableName string) {
// Specify the metadata of the index table.
indexMeta := new(tablestore.IndexMeta)
// Set the first primary key column of the index table to the first primary key column of the data table.
indexMeta.AddPrimaryKeyColumn("pk1")
// Specify the definedcol1 column of the data table as the primary key column of the index table.
indexMeta.AddPrimaryKeyColumn("definedcol1")
// Specify the definedcol2 column of the data table as the attribute column of the index table.
indexMeta.AddDefinedColumn("definedcol2")
// Set the index type to IT_LOCAL_INDEX.
indexMeta.IndexType = tablestore.IT_LOCAL_INDEX
// Specify the name of the index table.
indexMeta.IndexName = "<INDEX_NAME>"
indexReq := &tablestore.CreateIndexRequest{
// Specify the data table for which you want to create the index table and apply the settings that you specified for the index table.
MainTableName:tableName,
IndexMeta: indexMeta,
/**
You can set the IncludeBaseData parameter to true to synchronize the existing data of the data table to the index table. This way, you can use the index table to query all data in the data table.
The amount of time required to synchronize the existing data of the data table to the index table varies based on the amount of data in the data table.
*/
IncludeBaseData: true,
}
resp, err := client.CreateIndex(indexReq)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create index finished", resp)
}
}
Referências
Após criar um índice secundário, você pode usá-lo para ler uma única linha de dados ou dados cujos valores de chave primária estejam dentro de um intervalo específico. Para obter mais informações, consulte Usar um índice secundário para ler dados.
Você pode excluir um índice secundário que não utiliza mais. Para obter mais informações, consulte Excluir um índice secundário.