全部产品
Search
文档中心

表格存储:划分数据分片

更新时间:Jun 25, 2026

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。例如传入 2 表示按 200 MB 划分。