全部产品
Search
文档中心

Tablestore:Pemindaian Paralel

更新时间:Jul 06, 2025

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

Prasyarat

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