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字段仅为分片所在机器的位置提示,部分场景下可能返回空字符串。
参数说明
|
名称 |
类型 |
说明 |
|
tableName(必选) |
String |
数据表名称。 |
|
splitSize(必选) |
long |
每个分片的近似大小,单位为 100 MB。例如传入 |