TableStoreWriter を初期化するときに、ビジネス要件に基づいて TableStoreWriter パラメータとコールバック関数ロジックを指定できます。このトピックでは、指定できる TableStoreWriter パラメータについて説明し、コールバックの例を示します。
パラメータ
TableStoreWriter を初期化するときに、WriterConfig
を変更して、ビジネス要件に基づいて TableStoreWriter パラメータを指定できます。
例
次のサンプルコードは、WriterConfig を使用して指定できるパラメータの例を示しています。
WriterConfig config = new WriterConfig();
config.setBucketCount(3);
config.setBufferSize(1024);
config.setEnableSchemaCheck(true);
config.setDispatchMode(DispatchMode.HASH_PARTITION_KEY);
config.setBatchRequestType(BatchRequestType.BATCH_WRITE_ROW);
config.setConcurrency(10);
config.setWriteMode(WriteMode.PARALLEL);
config.setAllowDuplicatedRowInBatchRequest(true);
config.setMaxBatchSize(4 * 1024 * 1024);
config.setMaxBatchRowsCount(200);
config.setCallbackThreadCount(16);
config.setCallbackThreadPoolQueueSize(1024);
config.setMaxColumnsCount(128);
config.setMaxAttrColumnSize(2 * 1024 * 1024);
config.setMaxPKColumnSize(1024);
config.setFlushInterval(10000);
config.setLogInterval(10000);
config.setClientMaxConnections(300);
config.setWriterRetryStrategy(WriterRetryStrategy.CERTAIN_ERROR_CODE_NOT_RETRY);
パラメータ
パラメータ | タイプ | 説明 |
bucketCount | Integer | TableStoreWriter のバケット数。デフォルト値:3。バケットは、データをキャッシュするために使用されるバッファーと同等です。 このパラメータを指定して、並列順次書き込みリクエストの数を増やすことができます。マシンのボトルネックに達していない場合、バケットの数は書き込みレートと正の相関があります。 バケットの書き込みモードが同時書き込みの場合は、デフォルト設定を保持します。 |
bufferSize | Integer | メモリ内のバッファキューのサイズ。単位:行。デフォルト値:1024。このパラメータの値は 2 の指数乗の倍数である必要があります。 |
enableSchemaCheck | Boolean | データをバッファにフラッシュするときにスキーマをチェックするかどうかを指定します。有効な値:
|
dispatchMode | データをバッファにフラッシュするときに、データをバケットにディスパッチするモード。このパラメータは、バケットの数が 2 以上の場合にのみ有効になります。有効な値:
| |
batchRequestType | TableStoreWriter がバッファ内のデータを Tablestore に書き込むために使用するリクエストのタイプ。有効な値:
| |
concurrency | Integer | TableStoreWriter がバッファ内のデータを Tablestore に書き込むために使用する並列リクエストの最大数。デフォルト値:10。 |
writeMode | TableStoreWriter がバッファ内のデータを Tablestore に書き込むときに、バケット内のデータを Tablestore に書き込むモード。有効な値:
| |
allowDuplicatedRowInBatchRequest | Boolean | TableStoreWriter がバッチ書き込みリクエストを作成するときに、同じプライマリキー値を持つ行を許可するかどうかを指定します。デフォルト値:true。 データテーブルにセカンダリインデックスが作成されている場合、Tablestore はこのパラメータの設定を無視し、同じプライマリキー値を持つ行を許可しません。この場合、TableStoreWriter はリクエストを作成するときに、同じプライマリキー値を持つ行を異なるリクエストに追加します。 |
maxBatchSize | Integer | バッチ書き込みリクエストで Tablestore に書き込むことができる最大データ量。単位:バイト。デフォルトでは、バッチ書き込みリクエストで最大 4 MB のデータを Tablestore に書き込むことができます。 |
maxBatchRowsCount | Integer | バッチ書き込みリクエストで Tablestore に書き込むことができる最大行数。デフォルト値:200。最大値:200。 |
callbackThreadCount | Integer | TableStoreWriter 内でコールバックを実行するスレッドプールのスレッド数。デフォルト値はプロセッサの数です。 |
callbackThreadPoolQueueSize | Integer | TableStoreWriter 内でコールバックを実行するスレッドプールのキューサイズ。デフォルト値:1024。 |
maxColumnsCount | Integer | データをバッファにフラッシュするときの行の最大列数。デフォルト値:128。 |
maxAttrColumnSize | Integer | データをバッファにフラッシュするときの単一の属性列の値の最大サイズ。デフォルトでは、各属性列の値に最大 2 MB のデータが許可されます。単位:バイト。 |
maxPKColumnSize | Integer | データをバッファにフラッシュするときの単一のプライマリキー列の値の最大サイズ。デフォルトでは、各プライマリキー列の値に最大 1 KB のデータが許可されます。単位:バイト。 |
flushInterval | Integer | TableStoreWriter がバッファ内のデータを Tablestore に自動的に書き込む間隔。デフォルト値:10000。単位:ミリ秒。 |
logInterval | Integer | TableStoreWriter がバッファ内のデータを Tablestore に書き込むときに、タスクステータスが自動的に表示される間隔。デフォルト値:10000。単位:ミリ秒。 |
clientMaxConnections | Integer | クライアントが内部的に構築されるときに使用される接続の最大数。デフォルト値:300。 |
writerRetryStrategy | クライアントが内部的に構築されるときに使用される再試行ポリシー。有効な値:
|
コールバック
TableStoreWriter はコールバックを使用して、書き込みの成功または失敗を報告します。データの行が Tablestore に書き込まれると、TableStoreWriter は onCompleted()
関数を呼び出します。データの行が Tablestore に書き込めなかった場合、TableStoreWriter は例外のカテゴリに基づいて onFailed()
関数を呼び出します。
次のサンプルコードは、コールバックを使用して、Tablestore に書き込まれた行数と Tablestore に書き込めなかった行数の統計を収集する方法の例を示しています。
private static AtomicLong succeedRows = new AtomicLong();
private static AtomicLong failedRows = new AtomicLong();
TableStoreCallback<RowChange, RowWriteResult> resultCallback = new TableStoreCallback<RowChange, RowWriteResult>() {
@Override
public void onCompleted(RowChange rowChange, RowWriteResult cc) {
// Tablestore に書き込まれた行数の統計を収集します。
succeedRows.incrementAndGet();
}
@Override
public void onFailed(RowChange rowChange, Exception ex) {
// Tablestore に書き込めなかった行数の統計を収集します。
failedRows.incrementAndGet();
}
};