Java SDK 按指定大小將全表資料邏輯劃分為若干分區,並返回各分區的主鍵範圍和位置提示。
前提條件
安裝 Tablestore Java SDK並初始化用戶端。
功能說明
在服務端按指定大小將全表資料邏輯劃分為若干分區。分區大小為近似值,返回結果包含每個分區的主鍵範圍(lowerBound / upperBound)和分區所在機器的位置提示(location)。可將返回的主鍵範圍傳入 RangeRowQueryCriteria,通過範圍讀取資料或迭代讀取資料平行處理各分區。
public ComputeSplitsBySizeResponse computeSplitsBySize(ComputeSplitsBySizeRequest request) throws TableStoreException, ClientException
以下樣本將資料表 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("PrimaryKeySchema: " + response.getPrimaryKeySchema());
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());
}
參數說明
|
名稱 |
類型 |
說明 |
|
tableName(必選) |
String |
資料表名稱。 |
|
splitSize(必選) |
long |
每個分區的近似大小,單位為 100 MB。例如傳入 |
傳回值
分區劃分結果
ComputeSplitsBySizeResponse 包含以下業務欄位。
|
名稱 |
類型 |
說明 |
|
splits |
List<Split> |
邏輯分區列表。通過 |
|
primaryKeySchema |
List<PrimaryKeySchema> |
資料表的主鍵結構。通過 |
分區資訊
ComputeSplitsBySizeResponse.splits[] 中每個元素的類型為 Split。
|
名稱 |
類型 |
說明 |
|
lowerBound |
PrimaryKey |
分區主鍵範圍的下界。 |
|
upperBound |
PrimaryKey |
分區主鍵範圍的上界。 |
|
location |
String |
分區所在機器的位置提示,部分情境可能為空白字串。 |