Jika Anda tidak memiliki persyaratan terkait urutan hasil kueri, Anda dapat menggunakan fitur pemindaian paralel untuk mendapatkan hasil kueri secara efisien.
Tablestore SDK for PHP V5.1.0 atau yang lebih baru mendukung fitur pemindaian paralel. Sebelum menggunakan fitur ini, pastikan bahwa Tablestore SDK for PHP V5.1.0 atau yang lebih baru telah diperoleh. Untuk informasi tentang riwayat versi Tablestore SDK for PHP, lihat Riwayat Versi Tablestore SDK for PHP.
Prasyarat
Sebuah instance OTSClient diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Instance OTSClient.
Sebuah tabel data dibuat dan data ditulis ke dalam tabel tersebut. Untuk informasi lebih lanjut, lihat Buat Tabel Data dan Tulis Data.
Indeks pencarian dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat Indeks Pencarian.
Parameter
Parameter | Deskripsi | |
table_name | Nama tabel data. | |
index_name | Nama indeks pencarian. | |
scan_query | query | Tipe kueri. Operasi ini mendukung kueri tepat, kueri fuzzy, kueri rentang, kueri geo, dan kueri bersarang, yang serupa dengan yang didukung oleh operasi Search. |
limit | Jumlah maksimum baris yang dapat dikembalikan oleh setiap panggilan ParallelScan. | |
max_parallel | Jumlah maksimum tugas pemindaian paralel per permintaan. Jumlah maksimum tugas pemindaian paralel per permintaan bervariasi berdasarkan volume data. Volume data yang lebih besar memerlukan lebih banyak tugas pemindaian paralel per permintaan. Anda dapat menggunakan operasi ComputeSplits untuk menanyakan jumlah maksimum tugas pemindaian paralel per permintaan. | |
current_parallel_id | ID tugas pemindaian paralel dalam permintaan. Nilai valid: [0, max_parallel). | |
token | Token yang digunakan untuk paginasi hasil kueri. Hasil dari permintaan ParallelScan berisi token untuk halaman berikutnya. Anda dapat menggunakan token tersebut untuk mengambil halaman berikutnya. | |
alive_time | Masa berlaku tugas pemindaian paralel saat ini. Masa berlaku ini juga merupakan masa berlaku token. Unit: detik. Nilai default: 60. Kami menyarankan Anda untuk menggunakan nilai default. Jika permintaan berikutnya tidak dilakukan dalam periode validitas, tidak ada lagi data yang dapat dikueri. Waktu validitas token diperbarui setiap kali Anda mengirimkan permintaan. Catatan Sesi kadaluarsa lebih awal jika skema indeks sumber dan indeks canary diubah, server tunggal gagal, atau penyeimbangan beban di sisi server dilakukan. Dalam kasus ini, 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 pemindaian paralel. Anda dapat memanggil operasi ComputeSplits untuk membuat sesi dan menanyakan jumlah maksimum tugas pemindaian paralel yang didukung oleh permintaan pemindaian paralel. | |
Contoh
Berikut adalah contoh kode sampel tentang cara menggunakan fitur pemindaian paralel dari indeks pencarian:
// 1. Dapatkan ID sesi.
$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 paginasi berbasis token. Dalam contoh ini, hanya total jumlah 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;