All Products
Search
Document Center

Tablestore:Pemisahan data untuk pemindaian paralel

Last Updated:Jun 26, 2026

Untuk memindai seluruh tabel secara paralel dari mesin komputasi, bagilah data menjadi sub-rentang yang dapat diproses secara bersamaan. Tablestore SDK untuk Java menghasilkan pemisahan rentang kunci primary berdasarkan ukuran tertentu. Teruskan pemisahan ini langsung ke API pembacaan rentang untuk mengambil data secara konkuren.

Prasyarat

Deskripsi

public ComputeSplitsBySizeResponse computeSplitsBySize(ComputeSplitsBySizeRequest request) throws TableStoreException, ClientException

Di sisi server, Tablestore membagi tabel secara logis menjadi pemisahan dengan ukuran tertentu. Setiap pemisahan mencakup rentang kunci primary-nya (lowerBound / upperBound) dan petunjuk mesin yang menyimpan pemisahan tersebut (location). Rentang kunci primary ini dapat langsung diteruskan ke RangeRowQueryCriteria, lalu pemisahan tersebut dibaca secara paralel menggunakan Baca data berdasarkan rentang atau Baca data dengan iterator. Pola ini umumnya digunakan oleh mesin komputasi untuk merencanakan paralelisme eksekusi.

Contoh berikut membagi tabel split_demo menjadi pemisahan berukuran sekitar 200 MB dan mencetak lokasi serta rentang kunci primary setiap pemisahan.

String tableName = "split_demo";

// Bagi seluruh data tabel menjadi pemisahan berukuran sekitar 200 MB (2 * 100 MB).
ComputeSplitsBySizeRequest request =
        new ComputeSplitsBySizeRequest(tableName, 2);

ComputeSplitsBySizeResponse response = client.computeSplitsBySize(request);

System.out.println("RequestId: " + response.getRequestId());
System.out.println("PrimaryKeySchema: " + response.getPrimaryKeySchema());
System.out.println("ConsumedCapacity: " + response.getConsumedCapacity().jsonize());

List<Split> splits = response.getSplits();
System.out.println("Jumlah pemisahan: " + splits.size());

Iterator<Split> iterator = splits.iterator();
while (iterator.hasNext()) {
    Split split = iterator.next();
    // Rentang kunci primary yang dikembalikan oleh getLowerBound() dan getUpperBound() dapat langsung
    // diteruskan ke RangeRowQueryCriteria untuk pembacaan paralel menggunakan getRange atau createRangeIterator.
    System.out.println("Location: " + split.getLocation());
    System.out.println("LowerBound: " + split.getLowerBound().jsonize());
    System.out.println("UpperBound: " + split.getUpperBound().jsonize());
}
Catatan
  • splitSize diukur dalam satuan 100 MB. Setiap pemisahan berukuran sekitar N × 100 MB, dengan N adalah nilai yang Anda berikan.

  • Pemisahan bersifat logis, dan ukurannya hanya perkiraan. Ukuran pasti tidak dapat dijamin.

  • Bidang location memberikan petunjuk mesin yang menyimpan pemisahan tersebut. Bidang ini mungkin kosong dalam beberapa kasus.

Parameter

Name

Type

Description

tableName (required)

String

Nama tabel.

splitSize (required)

long

Ukuran perkiraan setiap pemisahan, dalam satuan 100 MB. Misalnya, jika Anda memberikan nilai 2, data akan dibagi menjadi pemisahan berukuran masing-masing 200 MB.