Si no necesita que los resultados de la consulta sigan un orden específico, utilice la función de escaneo paralelo para obtenerlos de manera eficiente.
Tablestore SDK for PHP V5.1.0 o versiones posteriores es compatible con la función de escaneo paralelo. Antes de usarla, compruebe que cuenta con Tablestore SDK for PHP V5.1.0 o una versión más reciente. Para consultar el historial de versiones de Tablestore SDK for PHP, consulte Version history of Tablestore SDK for PHP.
Requisitos previos
Inicialice una instancia de OTSClient. Para más información, consulte Initialize an OTSClient instance.
Cree una tabla de datos y escriba datos en ella. Para más información, consulte Create a data table y Write data.
Cree un índice de búsqueda para la tabla de datos. Para más información, consulte Create a search index.
Parámetros
|
Parámetro |
Descripción |
|
|
table_name |
El nombre de la tabla de datos. |
|
|
index_name |
El nombre del índice de búsqueda. |
|
|
scan_query |
query |
El tipo de consulta. La operación admite consultas por término (term query), consultas difusas (fuzzy query), consultas por rango (range query), consultas geográficas (geo query) y consultas anidadas (nested query), similares a las que admite la operación Search. |
|
limit |
El número máximo de filas que puede devolver cada llamada a ParallelScan. |
|
|
max_parallel |
El número máximo de tareas de escaneo paralelo por solicitud. Este valor varía según el volumen de datos; a mayor volumen, se requieren más tareas de escaneo paralelo por solicitud. Utilice la operación ComputeSplits para consultar el número máximo de tareas de escaneo paralelo por solicitud. |
|
|
current_parallel_id |
El identificador de la tarea de escaneo paralelo en la solicitud. Valores válidos: [0, max_parallel). |
|
|
token |
El token que se usa para paginar los resultados de la consulta. Los resultados de la solicitud ParallelScan incluyen el token de la página siguiente, el cual le permite recuperar dicha página. |
|
|
alive_time |
El periodo de validez de la tarea de escaneo paralelo actual, que también corresponde al periodo de validez del token. Unidad: segundos. Valor predeterminado: 60. Se recomienda mantener el valor predeterminado. Si no se inicia la siguiente solicitud dentro de este periodo, ya no será posible consultar más datos. El tiempo de validez del token se actualiza cada vez que usted envía una solicitud. Nota
Las sesiones caducan antes de tiempo si se intercambian los esquemas del índice de origen y del índice canary, si falla un servidor individual o si se ejecuta un balanceo de carga del lado del servidor. En estos casos, debe volver a crear las sesiones. |
|
|
columns_to_get |
Los nombres de las columnas que desea devolver para cada fila que cumple con las condiciones de la consulta. Para devolver todas las columnas del índice de búsqueda, establezca el parámetro return_type en RETURN_ALL_FROM_INDEX. |
|
|
session_id |
El identificador de sesión de la tarea de escaneo paralelo. Llame a la operación ComputeSplits para crear una sesión y consultar el número máximo de tareas de escaneo paralelo que admite la solicitud de escaneo paralelo. |
|
Ejemplos
A continuación se muestra un ejemplo de código sobre cómo utilizar la función de escaneo paralelo de los índices de búsqueda:
// 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;