Tablestore SDK for Java は、テーブル内のすべてのデータを指定されたサイズのスプリットに論理的に分割し、各スプリットのプライマリキー範囲とロケーションヒントを返します。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
説明
Tablestore は、サーバー上でテーブルを指定された概算サイズのスプリットに論理的に分割します。各スプリットには、そのプライマリキー範囲 (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() が返すプライマリキー範囲は、
// getRange または createRangeIterator による並列読み取りのために、
// RangeRowQueryCriteria に直接渡すことができます。
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 |
スプリットを格納するマシンのロケーションヒント。値は空の文字列の場合があります。 |