劃分資料分區

更新時間:
Copy as MD

Java SDK 按指定大小將全表資料邏輯劃分為若干分區,返回分割點和分區所在機器的提示,適用於計算引擎規劃並發度。

前提條件

安裝 Tablestore Java SDK並初始化用戶端。

功能說明

public ComputeSplitsBySizeResponse computeSplitsBySize(ComputeSplitsBySizeRequest request) throws TableStoreException, ClientException

在服務端按指定大小將全表資料邏輯劃分為若干分區,返回每個分區的主鍵範圍(lowerBound / upperBound)和分區所在機器位置提示(location)。返回的主鍵範圍可直接傳入 RangeRowQueryCriteria,交給範圍讀取資料迭代讀取資料並行讀取,常用於計算引擎規劃並發度等執行計畫。

以下樣本將資料表 split_demo 的全表資料按 200 MB 劃分為若干分區,並列印每個分區的位置和主鍵範圍。

String tableName = "split_demo";

// 按 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("Splits size: " + splits.size());

Iterator<Split> iterator = splits.iterator();
while (iterator.hasNext()) {
    Split split = iterator.next();
    // getLowerBound()/getUpperBound() 返回的主鍵範圍可直接傳入
    // RangeRowQueryCriteria,交給 getRange 或 createRangeIterator 並行讀取
    System.out.println("Location: " + split.getLocation());
    System.out.println("LowerBound: " + split.getLowerBound().jsonize());
    System.out.println("UpperBound: " + split.getUpperBound().jsonize());
}
說明
  • splitSize 單位為 100 MB,傳入值表示每個分區的近似大小為 N × 100 MB。

  • 劃分結果為邏輯分區,分區大小為近似值(精確大小較難控制)。

  • location 欄位僅為分區所在機器的位置提示,部分情境下可能返回Null 字元串。

參數說明

名稱

類型

說明

tableName(必選)

String

資料表名稱。

splitSize(必選)

long

每個分區的近似大小,單位為 100 MB。例如傳入 2 表示按 200 MB 劃分。