コンピューティングエンジン からテーブル全体を並行してスキャンするには、データを並行処理できるサブ範囲に分割します。Tablestore SDK for Java は、指定されたサイズのプライマリキー範囲のスプリットを生成します。これらのスプリットを範囲読み取り API に直接渡すことで、データを並行して取得できます。
前提条件
-
Tablestore SDK for Java がインストール済みであること。
-
Tablestore クライアントが初期化済みであること。
説明
public ComputeSplitsBySizeResponse computeSplitsBySize(ComputeSplitsBySizeRequest request) throws TableStoreException, ClientException
サーバーサイド で、Tablestore はテーブルを指定されたサイズのスプリットに論理的に分割します。各スプリットには、そのプライマリキー範囲 (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() が返すプライマリキー範囲は、
// getRange または createRangeIterator を使用した並行読み取りのために RangeRowQueryCriteria に直接渡すことができます。
System.out.println("Location: " + split.getLocation());
System.out.println("LowerBound: " + split.getLowerBound().jsonize());
System.out.println("UpperBound: " + split.getUpperBound().jsonize());
}
-
splitSizeは 100 MB 単位で測定されます。各スプリットは、渡した値を N とすると、約 N × 100 MB になります。 -
スプリットは 論理的なものであり、サイズはおおよその値です。正確なサイズは保証されません。
-
locationフィールドは、スプリットをホストするマシンに関するヒントです。場合によっては、このフィールドが空になることがあります。
パラメーター
|
名前 |
タイプ |
説明 |
|
tableName (必須) |
String |
テーブルの名前。 |
|
splitSize (必須) |
long |
各スプリットのおおよそのサイズを 100 MB 単位で指定します。たとえば、 |