Jika Anda tidak memiliki persyaratan khusus terkait urutan hasil kueri, Anda dapat menggunakan fitur pemindaian paralel untuk mendapatkan hasil kueri secara efisien.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instance OTSClient.
Tabel data telah dibuat dan data telah ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
Indeks pencarian telah dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat indeks pencarian.
Parameter
Parameter | Deskripsi | |
tableName | Nama tabel data. | |
indexName | Nama indeks pencarian. | |
scanQuery | query | Pernyataan kueri untuk indeks pencarian. Operasi ini mendukung kueri tepat, kueri kabur, kueri rentang, kueri geo, dan kueri bersarang, yang mirip dengan operasi Pencarian. |
limit | Jumlah maksimum baris yang dapat dikembalikan oleh setiap pemanggilan ParallelScan. | |
maxParallel | 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. | |
currentParallelId | ID tugas pemindaian paralel dalam permintaan. Nilai valid: [0, Nilai maxParallel) | |
token | Token yang digunakan untuk membagi halaman hasil kueri. Hasil dari permintaan ParallelScan berisi token untuk halaman berikutnya. Anda dapat menggunakan token untuk mengambil halaman berikutnya. | |
aliveTime | Masa berlaku tugas pemindaian paralel saat ini. Masa berlaku ini juga merupakan masa berlaku token. Unit: detik. Nilai default: 60. Kami merekomendasikan agar Anda 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 kadaluwarsa lebih awal jika indeks dinamis diubah dalam skema, server tunggal gagal, atau penyeimbangan beban di sisi server dilakukan. Dalam kasus ini, Anda harus membuat ulang sesi. | |
columnsToGet | Nama kolom yang akan dikembalikan dalam hasil pengelompokan. Anda dapat menambahkan nama kolom ke Columns. Jika Anda ingin semua kolom dikembalikan dalam indeks pencarian, Anda dapat menggunakan operasi ReturnAllFromIndex yang lebih ringkas. Penting ReturnAll tidak dapat digunakan di sini. | |
sessionId | 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 untuk melakukan pemindaian paralel:
// 1. Dapatkan ID sesi.
let computeSplits = await new Promise((resolve, reject) => {
client.computeSplits({
tableName: tableName,
searchIndexSplitsOptions: {
indexName: indexName,
}
}, function (err, data) {
if (err) {
console.log('computeSplits error:', err.toString());
reject(err);
} else {
console.log('computeSplits success:', data);
resolve(data)
}
})
})
// 2. Tentukan kondisi kueri.
const scanQuery = {
query: {
queryType: TableStore.QueryType.MATCH_ALL_QUERY,
},
limit: 1000,
aliveTime: 30,
token: undefined,
currentParallelId: 0,
maxParallel: 1,
}
// 3. Buat permintaan ParallelScan. Dalam contoh ini, permintaan sinkron dibuat. Anda dapat membuat permintaan asinkron berdasarkan kebutuhan bisnis Anda.
const parallelScanPromise = function () {
return new Promise(function (resolve, reject) {
client.parallelScan({
tableName: tableName,
indexName: indexName,
columnToGet: {
returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX,
},
sessionId: computeSplits.sessionId,
scanQuery: scanQuery,
}, function (err, data) {
if (err) {
console.log('parallelScan error:', err.toString());
reject(err);
} else {
console.log("parallelScan, rows:", data.rows.length)
resolve(data)
}
});
})
}
let totalCount = 0 // Tentukan bahwa jumlah total baris yang memenuhi kondisi kueri dikembalikan.
let parallelScanResponse = await parallelScanPromise()
totalCount = totalCount + parallelScanResponse.rows.length
// 4. Tarik data menggunakan iterator hingga semua data ditarik.
while (parallelScanResponse.nextToken !== null && parallelScanResponse.nextToken.length > 0) {
scanQuery.token = parallelScanResponse.nextToken
parallelScanResponse = await parallelScanPromise()
totalCount += parallelScanResponse.rows.length
}
console.log("total rows:", totalCount)FAQ
Apa yang harus saya lakukan jika tidak ada data yang ditemukan dengan memanggil operasi Search?
Referensi
Indeks pencarian mendukung jenis kueri berikut: kueri tepat, kueri terms, kueri match all, kueri match, kueri match phrase, kueri prefix, kueri rentang, kueri wildcard, kueri Boolean, kueri geo, kueri nested, kueri vektor, dan kueri exists. Pilih jenis kueri sesuai dengan kebutuhan bisnis Anda.
Untuk mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri, gunakan fitur Pengurutan dan paging. Untuk informasi lebih lanjut, lihat Pengurutan dan paging.
Untuk meruntuhkan set hasil berdasarkan kolom tertentu, gunakan fitur collapse (distinct). Dengan cara ini, data dari tipe yang ditentukan hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Untuk menganalisis data dalam tabel, seperti mendapatkan nilai ekstrem, jumlah, dan total baris, gunakan operasi agregasi atau jalankan pernyataan SQL. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Untuk mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu pengurutan, panggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian Paralel.