Se a ordem dos resultados da consulta não for um requisito, use o recurso de varredura paralela para obter esses resultados de maneira eficiente.
O Tablestore SDK for PHP V5.1.0 ou posterior oferece suporte ao recurso de varredura paralela. Antes de usar esse recurso, certifique-se de usar o Tablestore SDK for PHP V5.1.0 ou posterior. Para obter informações sobre o histórico de versões do Tablestore SDK for PHP, consulte Version history of Tablestore SDK for PHP.
Pré-requisitos
Inicialize uma instância do OTSClient. Para mais informações, consulte Initialize an OTSClient instance.
Crie uma tabela de dados e grave dados nela. Para mais informações, consulte Create a data table e Write data.
Crie um índice de pesquisa para a tabela de dados. Para mais informações, consulte Create a search index.
Parâmetros
|
Parâmetro |
Descrição |
|
|
table_name |
O nome da tabela de dados. |
|
|
index_name |
O nome do índice de pesquisa. |
|
|
scan_query |
query |
O tipo da consulta. A operação é compatível com consultas de termo, difusa, de intervalo, geográfica e aninhada, semelhantes às suportadas pela operação Search. |
|
limit |
O número máximo de linhas que cada chamada do ParallelScan pode retornar. |
|
|
max_parallel |
O número máximo de tarefas de varredura paralela por requisição. Esse valor varia de acordo com 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 permitidas por requisição. |
|
|
current_parallel_id |
O ID da tarefa de varredura paralela na requisição. Valores válidos: [0, max_parallel). |
|
|
token |
O 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 para recuperar a página seguinte. |
|
|
alive_time |
O período de validade da tarefa de varredura paralela atual, que também corresponde ao período de 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 desse período, não será possível consultar mais dados. O tempo de validade do token é atualizado a cada requisição enviada. 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 |
Os nomes das colunas a serem retornadas para cada linha que atenda às condições da consulta. Para retornar todas as colunas no índice de pesquisa, defina o parâmetro return_type como RETURN_ALL_FROM_INDEX. |
|
|
session_id |
O 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 compatíveis com a requisição. |
|
Exemplos
O código de exemplo a seguir demonstra como usar o recurso de varredura paralela de índices de pesquisa:
// 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;