全部产品
Search
文档中心

Tablestore:Pemindaian Paralel

更新时间:Jul 02, 2025

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

Prasyarat

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 Pencarian.

limit

Jumlah maksimum baris yang dapat dikembalikan oleh setiap pemanggilan 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 membagi halaman hasil kueri. Hasil dari permintaan ParallelScan berisi token untuk halaman berikutnya. Anda dapat menggunakan token ini untuk mengambil halaman berikutnya.

alive_time

Masa berlaku tugas pemindaian paralel saat ini. Masa berlaku ini juga merupakan masa berlaku token. Satuan: detik. Nilai default: 60. Kami menyarankan Anda menggunakan nilai default. Jika permintaan berikutnya tidak dilakukan dalam periode validitas, tidak ada lagi data yang dapat di-query. Waktu validitas token diperbarui setiap kali Anda mengirimkan permintaan.

Catatan

Sesi akan kedaluwarsa 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 sesi baru.

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

Kode sampel berikut menunjukkan cara melakukan pemindaian paralel:

def fetch_rows_per_thread(query, session_id, current_thread_id, max_thread_num):
    token = None

    while True:
        try:
            scan_query = ScanQuery(query, limit = 20, next_token = token, current_parallel_id = current_thread_id,
                                   max_parallel = max_thread_num, alive_time = 30)

            response = client.parallel_scan(
                table_name, index_name, scan_query, session_id,
                columns_to_get = ColumnsToGet(return_type=ColumnReturnType.ALL_FROM_INDEX))

            for row in response.rows:
                print("%s:%s" % (threading.currentThread().name, str(row)))

            if len(response.next_token) == 0:
                break
            else:
                token = response.next_token
        except OTSServiceError as e:
            print (e)
        except OTSClientError as e:
            print (e)

def parallel_scan(table_name, index_name):
    response = client.compute_splits(table_name, index_name)

    query = TermQuery('d', 0.1)

    params = []
    for i in range(response.splits_size):
        params.append((([query, response.session_id, i, response.splits_size], None)))

    pool = threadpool.ThreadPool(response.splits_size)
    requests = threadpool.makeRequests(fetch_rows_per_thread, params)
    [pool.putRequest(req) for req in requests]
    pool.wait()