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
-
Tablestore SDK untuk Java telah terpasang.
-
Client Tablestore telah diinisialisasi.
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());
}
-
splitSizediukur 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
locationmemberikan 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 |