全部产品
Search
文档中心

Tablestore:Lakukan pemindaian paralel

更新时间:Jul 02, 2025

Jika Anda tidak memiliki persyaratan khusus terkait urutan hasil kueri, Anda dapat menggunakan fitur pemindaian paralel untuk mendapatkan hasil kueri secara lebih efisien.

Prasyarat

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);
    }
}