Jika Anda tidak memiliki persyaratan khusus terkait urutan hasil kueri, Anda dapat menggunakan fitur pemindaian paralel untuk mendapatkan hasil kueri secara lebih 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 | |
NamaTabel | Nama dari tabel data. | |
NamaIndeks | Nama dari indeks pencarian. | |
PemindaianKueri | Kueri | Pernyataan kueri untuk indeks pencarian. Jenis-jenis kueri seperti kueri tepat, kueri kabur, kueri rentang, kueri geo, dan kueri bersarang didukung, yang sama dengan yang didukung oleh operasi Pencarian. |
Batas | Jumlah maksimum baris yang dapat dikembalikan oleh setiap panggilan ParallelScan. | |
MaksParalel | 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 memanggil operasi ComputeSplits untuk menanyakan jumlah maksimum tugas pemindaian paralel per permintaan. | |
IDParalelSaatIni | ID dari tugas pemindaian paralel dalam permintaan. Nilai valid: [0,MaksParalel). | |
Token | Token yang digunakan untuk mengatur halaman hasil kueri. Hasil dari permintaan ParallelScan berisi token untuk halaman berikutnya. Anda dapat menggunakan token untuk mengambil halaman berikutnya. | |
WaktuAktif | Periode validitas dari tugas pemindaian paralel saat ini. Periode validitas ini juga merupakan periode validitas dari token. Nilai default: 60. Satuan: detik. Kami merekomendasikan agar Anda menggunakan nilai default. Jika permintaan berikutnya tidak dilakukan dalam periode validitas, tidak ada lagi data yang dapat dikueri. Waktu validitas dari token diperbarui setiap kali Anda mengirimkan permintaan. Catatan Sesi kadaluarsa lebih awal jika indeks saklar dimodifikasi secara dinamis dalam skema, server tunggal gagal, atau penyeimbangan beban server dilakukan. Dalam kasus ini, Anda harus membuat ulang sesi. | |
KolomUntukDiambil | Nama kolom yang akan dikembalikan dalam hasil pengelompokan. Anda dapat menyetel parameter Kolom ke nama kolom. Jika Anda ingin mengembalikan semua kolom dalam indeks pencarian, Anda dapat menentukan parameter ReturnAllFromIndex. Penting Parameter ReturnAll tidak didukung. | |
IDSesi | ID sesi dari 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 yang menunjukkan cara memindai data menggunakan satu utas.
/// <summary>
/// Lakukan pemindaian paralel untuk memindai data menggunakan satu utas.
/// </summary>
public class PemindaianParalel
{
public static void PemindaianParalelDenganSatuUtas(OTSClient otsClient)
{
SearchIndexSplitsOptions options = new SearchIndexSplitsOptions
{
IndexName = IndexName
};
ComputeSplitsRequest computeSplitsRequest = new ComputeSplitsRequest
{
TableName = TableName,
SplitOptions = options
};
ComputeSplitsResponse computeSplitsResponse = otsClient.ComputeSplits(computeSplitsRequest);
MatchAllQuery matchAllQuery = new MatchAllQuery();
ScanQuery scanQuery = new ScanQuery();
scanQuery.AliveTime = 60;
scanQuery.Query = matchAllQuery;
scanQuery.MaxParallel = computeSplitsResponse.SplitsSize;
scanQuery.Limit = 10;
ParallelScanRequest parallelScanRequest = new ParallelScanRequest();
parallelScanRequest.TableName = TableName;
parallelScanRequest.IndexName = IndexName;
parallelScanRequest.ScanQuery = scanQuery;
parallelScanRequest.ColumnToGet = new ColumnsToGet { ReturnAllFromIndex = true };
parallelScanRequest.SessionId = computeSplitsResponse.SessionId;
int total = 0;
List<Row> result = new List<Row>();
ParallelScanResponse parallelScanResponse = otsClient.ParallelScan(parallelScanRequest);
while (parallelScanResponse.NextToken != null)
{
List<Row> rows = new List<Row>(parallelScanResponse.Rows);
total += rows.Count;
result.AddRange(rows);
parallelScanRequest.ScanQuery.Token = parallelScanResponse.NextToken;
parallelScanResponse = otsClient.ParallelScan(parallelScanRequest);
}
foreach (Row row in result)
{
Console.WriteLine(JsonConvert.SerializeObject(row));
}
Console.WriteLine("Total Jumlah Baris: {0}", total);
}
}