劃分資料分區
更新時間:
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。例如傳入 |
该文章对您有帮助吗?