Jika Anda tidak memiliki persyaratan terkait urutan hasil kueri, Anda dapat menggunakan fitur parallel scan untuk memperoleh hasil kueri secara efisien.
Tablestore SDK for PHP V5.1.0 atau versi yang lebih baru mendukung fitur parallel scan. Pastikan Anda telah menginstal Tablestore SDK for PHP V5.1.0 atau versi yang lebih baru sebelum menggunakan fitur ini. Untuk informasi mengenai riwayat versi Tablestore SDK for PHP, lihat Riwayat versi Tablestore SDK for PHP.
Prasyarat
-
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Inisialisasi instans OTSClient.
-
Tabel data telah dibuat dan data telah ditulis ke dalam tabel. Untuk informasi selengkapnya, lihat Membuat tabel data dan Menulis data.
-
Indeks pencarian telah dibuat untuk tabel data tersebut. Untuk informasi selengkapnya, lihat Buat indeks pencarian.
Parameter
|
Parameter |
Deskripsi |
|
|
table_name |
Nama tabel data. |
|
|
index_name |
Nama indeks pencarian. |
|
|
scan_query |
query |
Jenis kueri. Operasi ini mendukung kueri tepat (term query), kueri fuzzy, kueri rentang (range query), kueri geografis (geo query), dan kueri bersarang (nested query), yang mirip dengan jenis kueri yang didukung oleh operasi Search. |
|
limit |
Jumlah maksimum baris yang dapat dikembalikan oleh setiap pemanggilan ParallelScan. |
|
|
max_parallel |
Jumlah maksimum tugas parallel scan per permintaan. Jumlah maksimum tugas parallel scan per permintaan bervariasi tergantung pada volume data. Volume data yang lebih besar memerlukan lebih banyak tugas parallel scan per permintaan. Anda dapat menggunakan operasi ComputeSplits untuk mengetahui jumlah maksimum tugas parallel scan per permintaan. |
|
|
current_parallel_id |
ID tugas parallel scan dalam permintaan. Nilai yang valid: [0, max_parallel). |
|
|
token |
Token yang digunakan untuk membagi hasil kueri ke dalam beberapa halaman. Hasil dari permintaan ParallelScan berisi token untuk halaman berikutnya. Anda dapat menggunakan token tersebut untuk mengambil halaman berikutnya. |
|
|
alive_time |
Periode validitas tugas parallel scan saat ini. Periode validitas ini juga merupakan periode validitas token. Satuan: detik. Nilai default: 60. Kami menyarankan agar Anda menggunakan nilai default. Jika permintaan berikutnya tidak diajukan dalam periode validitas, data tambahan tidak dapat diambil lagi. Waktu validitas token diperbarui setiap kali Anda mengirim permintaan. Catatan
Sesi akan kedaluwarsa lebih awal jika skema indeks sumber dan indeks canary dialihkan, terjadi kegagalan pada satu server, atau dilakukan load balancing di sisi server. Dalam kasus tersebut, Anda harus membuat ulang sesi. |
|
|
columns_to_get |
Nama kolom yang ingin Anda kembalikan untuk setiap baris yang memenuhi kondisi kueri. Untuk mengembalikan semua kolom dalam indeks pencarian, atur parameter return_type ke RETURN_ALL_FROM_INDEX. |
|
|
session_id |
ID sesi tugas parallel scan. Anda dapat memanggil operasi ComputeSplits untuk membuat sesi dan mengetahui jumlah maksimum tugas parallel scan yang didukung oleh permintaan parallel scan. |
|
Contoh
Kode contoh berikut menunjukkan cara menggunakan fitur parallel scan pada indeks pencarian:
// 1. Dapatkan 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. Tentukan kondisi kueri.
$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. Buat permintaan ParallelScan.
$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 tidak diizinkan dalam parallel_scan, gunakan 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. Ekspor data menggunakan pagination berbasis token. Pada contoh ini, hanya jumlah total baris yang dikumpulkan.
$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;