Se a ordem dos resultados da consulta não for relevante, use o recurso de varredura paralela para obtê-los com maior eficiência.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e preenchida. Para mais informações, consulte Criar tabelas de dados e Gravar dados.
Índice de pesquisa criado para a tabela de dados. Para mais informações, consulte Criar um índice de pesquisa.
Parâmetros
|
Parâmetro |
Descrição |
|
|
tableName |
Nome da tabela de dados. |
|
|
indexName |
Nome do índice de pesquisa. |
|
|
scanQuery |
query |
Instrução de consulta do índice de pesquisa. A operação aceita consultas por termo, difusa, por intervalo, geográfica e aninhada, semelhantes às da operação Search. |
|
limit |
Número máximo de linhas retornadas em cada chamada ParallelScan. |
|
|
maxParallel |
Número máximo de tarefas de varredura paralela por requisição. Esse valor varia conforme o volume de dados: volumes maiores exigem mais tarefas paralelas. Use a operação ComputeSplits para consultar o número máximo de tarefas paralelas por requisição. |
|
|
currentParallelId |
ID da tarefa de varredura paralela na requisição. Valores válidos: [0, Valor de maxParallel). |
|
|
token |
Token usado para paginar os resultados da consulta. A resposta da requisição ParallelScan inclui o token da próxima página, permitindo recuperar os dados subsequentes. |
|
|
aliveTime |
Período de validade da tarefa de varredura paralela atual, que corresponde também à validade do token. Unidade: segundos. Valor padrão: 60. Recomendamos manter o valor padrão. Se a próxima requisição não ocorrer dentro desse período, não será possível consultar dados adicionais. O tempo de validade do token é renovado a cada nova requisição enviada. Nota
As sessões expiram antecipadamente se houver alteração dinâmica de índices nos esquemas, falha em um único servidor ou balanceamento de carga no lado do servidor. Nesses casos, recrie as sessões. |
|
|
columnsToGet |
Nome da coluna a ser retornada no resultado do agrupamento. Adicione o nome da coluna em Columns. Para retornar todas as colunas do índice de pesquisa, use a operação ReturnAllFromIndex, que oferece uma sintaxe mais concisa. Importante
Não é possível usar ReturnAll neste contexto. |
|
|
sessionId |
ID de sessão da tarefa de varredura paralela. Chame a operação ComputeSplits para criar uma sessão e consultar o número máximo de tarefas de varredura paralela compatíveis com a requisição. |
|
Exemplos
O código de exemplo abaixo demonstra como executar uma varredura paralela:
// 1. Obtain the session ID.
let computeSplits = await new Promise((resolve, reject) => {
client.computeSplits({
tableName: tableName,
searchIndexSplitsOptions: {
indexName: indexName,
}
}, function (err, data) {
if (err) {
console.log('computeSplits error:', err.toString());
reject(err);
} else {
console.log('computeSplits success:', data);
resolve(data)
}
})
})
// 2. Specify query conditions.
const scanQuery = {
query: {
queryType: TableStore.QueryType.MATCH_ALL_QUERY,
},
limit: 1000,
aliveTime: 30,
token: undefined,
currentParallelId: 0,
maxParallel: 1,
}
// 3. Create a ParallelScan request. In this example, a synchronous request is created. You can create an asynchronous request based on your business requirement.
const parallelScanPromise = function () {
return new Promise(function (resolve, reject) {
client.parallelScan({
tableName: tableName,
indexName: indexName,
columnToGet: {
returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX,
},
sessionId: computeSplits.sessionId,
scanQuery: scanQuery,
}, function (err, data) {
if (err) {
console.log('parallelScan error:', err.toString());
reject(err);
} else {
console.log("parallelScan, rows:", data.rows.length)
resolve(data)
}
});
})
}
let totalCount = 0 // Specify that the total number of rows that meet the query conditions is returned.
let parallelScanResponse = await parallelScanPromise()
totalCount = totalCount + parallelScanResponse.rows.length
// 4. Pull data by using an iterator until all data is pulled.
while (parallelScanResponse.nextToken !== null && parallelScanResponse.nextToken.length > 0) {
scanQuery.token = parallelScanResponse.nextToken
parallelScanResponse = await parallelScanPromise()
totalCount += parallelScanResponse.rows.length
}
console.log("total rows:", totalCount)
FAQ
Referências
-
Os índices de pesquisa aceitam os seguintes tipos de consulta: consulta por termo, consulta por termos, consulta match all, consulta match, consulta match phrase, consulta por prefixo, consulta por intervalo, consulta por curinga, consulta booleana, consulta geográfica, consulta aninhada, consulta vetorial e consulta exists. Escolha o tipo adequado conforme sua necessidade de negócio.
Para ordenar ou paginar as linhas que atendem aos critérios de consulta, use o recurso de classificação e paginação. Para mais informações, consulte Classificação e paginação.
Caso precise consolidar o conjunto de resultados com base em uma coluna específica, aplique o recurso de colapso (distinct). Assim, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais informações, consulte Colapso (distinct).
Para analisar dados em uma tabela de dados, como obter valores extremos, soma e contagem total de linhas, execute operações de agregação ou instruções SQL. Para mais informações, consulte Agregação e Consulta SQL.
Para obter rapidamente todas as linhas correspondentes aos critérios de consulta sem ordenação, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.