Se a ordem dos resultados da consulta não for relevante, use o recurso de varredura paralela para obter os dados com maior eficiência.
O Tablestore SDK for PHP V5.1.0 ou posterior oferece suporte ao recurso de varredura paralela. Antes de usar esse recurso, verifique se você obteve o Tablestore SDK for PHP V5.1.0 ou uma versão mais recente. Para obter informações sobre o histórico de versões do Tablestore SDK for PHP, consulte Histórico de versões do Tablestore SDK for PHP.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e com dados gravados. Para mais detalhes, consulte Criar uma tabela de dados e Gravar dados.
Índice de busca criado para a tabela de dados. Para mais informações, consulte Criar um índice de busca.
Parâmetros
|
Parâmetro |
Descrição |
|
|
table_name |
Nome da tabela de dados. |
|
|
index_name |
Nome do índice de busca. |
|
|
scan_query |
query |
Tipo da consulta. A operação aceita consultas por termo (term query), fuzzy, intervalo (range), geoespaciais (geo) e aninhadas (nested), semelhantes às suportadas pela operação Search. |
|
limit |
Número máximo de linhas retornadas em cada chamada ParallelScan. |
|
|
max_parallel |
Número máximo de tarefas de varredura paralela por requisição. Esse valor varia conforme o volume de dados: quanto maior o volume, mais tarefas são necessárias. Use a operação ComputeSplits para consultar o número máximo de tarefas de varredura paralela por requisição. |
|
|
current_parallel_id |
ID da tarefa de varredura paralela na requisição. Valores válidos: [0, max_parallel). |
|
|
token |
Token usado para paginar os resultados da consulta. Os resultados da requisição ParallelScan contêm o token da próxima página. Use o token para recuperar a próxima página. |
|
|
alive_time |
Período de validade da tarefa de varredura paralela atual. Esse período também define a validade do token. Unidade: segundos. Valor padrão: 60. Recomendamos usar o valor padrão. Se a próxima requisição não for iniciada dentro do período de validade, não será possível consultar mais dados. O tempo de validade do token é atualizado sempre que você envia uma requisição. Nota
As sessões expiram antecipadamente se os esquemas do índice de origem e do índice canário forem alternados, se houver falha em um único servidor ou se ocorrer balanceamento de carga no lado do servidor. Nesse caso, recrie as sessões. |
|
|
columns_to_get |
Nomes das colunas a serem retornadas para cada linha que atenda às condições da consulta. Para retornar todas as colunas do índice de busca, defina o parâmetro return_type como RETURN_ALL_FROM_INDEX. |
|
|
session_id |
ID da 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 suportadas pela requisição. |
|
Exemplos
O código de exemplo a seguir mostra como usar o recurso de varredura paralela de índices de busca:
// 1. Obtain the session ID.
$computeSplitsPointReq = array(
'table_name' => 'php_sdk_test',
'search_index_splits_options' => array(
'index_name' => 'test_create_search_index'
)
);
$computeSplits = $otsClient->computeSplits($computeSplitsPointReq);
print json_encode ($computeSplits, JSON_PRETTY_PRINT);
// 2. Specify query conditions.
$scanQuery = array(
'query' => array(
'query_type' => QueryTypeConst::MATCH_ALL_QUERY
),
'limit' => 2,
'alive_time' => 30,
'token' => null,
'current_parallel_id' => 0,
'max_parallel' => 1
);
//3. Construct a ParallelScan request.
$parallelScanReq = array(
'table_name' => 'php_sdk_test',
'index_name' => 'test_create_search_index',
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, // RETURN_ALL is not allow in parallel_scan, use RETURN_ALL_FROM_INDEX
'return_names' => array('geo', 'text', 'long', 'keyword')
),
'session_id' => $computeSplits['session_id'],
'scan_query' => $scanQuery
);
$parallelScanRes = $otsClient->parallelScan($parallelScanReq);
print json_encode ($parallelScanRes['rows'], JSON_PRETTY_PRINT);
//4. Export data by using token-based pagination. In this example, only the total number of rows is collected.
$totalCount = count($parallelScanRes['rows']);
while (!is_null($parallelScanRes['next_token'])) {
$parallelScanReq['scan_query']['token'] = $parallelScanRes['next_token'];
$parallelScanRes = $otsClient->parallelScan($parallelScanReq);
print json_encode ($parallelScanRes['rows'], JSON_PRETTY_PRINT);
$totalCount += count($parallelScanRes['rows']);
}
print "TotalCount: " . $totalCount;