アップロードプロセスを実行するには、次の手順に従ってください。
- データを分割します。
- openRecordWriter (id) を呼び出して、各データブロックのブロック ID を指定します。
- 1 つ以上のスレッドを使用して、ブロックをアップロードします。 1 つのブロックのアップロードが失敗すると、全ブロックをアップロードし直さなくてはなりません。
- すべてのブロックのアップロードが完了したら、アップロードした ID のリストをサーバーに渡して検証を実行します。 session.commit([1,2,3,…])を呼び出して、この処理を実行します。
接続タイムアウトなどのサーバーブロックマネージャーの制限事項により、アップロードプロセスのロジックは複雑です。 このようなプロセスを簡便化するため、SDK には高度な RecordWriter—TunnelBufferWriter インターフェイスが実装されています。
このインターフェイスは、次のように定義されています。
public class TunnelBufferedWriter implements RecordWriter {
public TunnelBufferedWriter(TableTunnel.UploadSession session, CompressOption option) throws IOException;
public long getTotalBytes();
public void setBufferSize(long bufferSize);
public void setRetryStrategy(RetryStrategy strategy);
public void write(Record r) throws IOException;
public void close() throws IOException;
}
パラメーター
- ライフサイクル: RecordWriter の作成から始まり、データのアップロードが完了すると終わります。
- TunnelBufferedWriter インスタンスの作成: UploadSession の openBufferedWriter インターフェイスを呼び出してインスタンスを作成します。
- データのアップロード: Write インターフェイスを呼び出します。 データは、まずローカルキャッシュに書き込まれます。 キャッシュがいっぱいになると、接続タイムアウトを避けるため、データは一括でサーバーに送信されます。 アップロードが失敗した場合、自動再試行がサポートされます。
- アップロードの完了: Close インターフェイスを呼び出し、UploadSession の Commit インターフェイスを呼び出してアップロードを完了します。
- バッファ制御: バッファが占有するメモリのサイズ (バイト単位) を変更するには、setBufferSize インターフェイスを使用します。64 MB を超えると、サーバーのパフォーマンスが低下する可能性があります。 通常、追加設定なしで、このパラメーターのデフォルト値が使用されます。
- 再試行ポリシーの設定: EXPONENTIAL_BACKOFF、LINEAR_BACKOFF、および CONSTANT_BACKOFF の 3 つの再試行回避ポリシーを選択できます。
例:次のコードセグメントは、書き込み再試行回数を 6 に設定しています。 不必要な再試行を避けるために、再試行は、4 秒、8 秒、16 秒、32 秒、64 秒、および
128 秒 (指数関数的に増加) 後に実行されます。 これはデフォルト設定であり、基本的には変更しないでください。
RetryStrategy retry = new RetryStrategy(6, 4, RetryStrategy.BackoffStrategy.EXPONENTIAL_BACKOFF) writer = (TunnelBufferedWriter) uploadSession.openBufferedWriter(); writer.setRetryStrategy(retry);