このトピックでは、データのアップロードに使用されるTunnelBufferedWriterについて説明します。
データのアップロード手順:
データをデータブロックに分割する。
openRecordWriter(id) を呼び出して、各データブロックのIDを指定します。
1つ以上のスレッドを使用してブロックをアップロードします。 ブロックのアップロードに失敗した場合、すべてのブロックが再度アップロードされます。
すべてのブロックがアップロードされたら、session.com mit([ 1,2,3,...]) を呼び出して、検証用のブロックIDをサーバーに提供します。
サーバーのブロック管理と接続タイムアウトの制限により、アップロードプロセスは複雑です。 Tunnel 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を呼び出して、TunnelBufferedWriterインスタンスを作成できます。
データアップロード: Writeを呼び出すと、データエントリは最初にローカルキャッシュに書き込まれます。 キャッシュがいっぱいになると、接続タイムアウトを回避するために、一度に複数のデータエントリがサーバーに送信されます。 アップロードが失敗した場合、システムは自動的にアップロード操作を再試行します。
アップロード終了: closeを呼び出してからUploadSessionをコミットし、アップロードプロセスを終了します。
バッファ制御: setBufferSizeを使用して、バッファが占有するメモリ (バイト単位) を変更できます。 メモリを64 MB以上の値に設定することを推奨します。 これにより、サーバーがパフォーマンスに影響を与える可能性のある過度の小さなファイルを生成できません。 値の範囲は1 MBから1000 MBです。 デフォルト値は64 MBです。
再試行ポリシー設定: EXPONENTIAL_BACKOFF、LINEAR_BACKOFF、CONSTANT_BACKOFFのポリシーを使用できます。 たとえば、次のコードではEXPONENTIAL_BACKOFFが使用されます。 リトライの最大回数は6回です。 リトライ間の待機時間は4秒から始まり、8秒、16秒、32秒、64秒、128秒の順に増加します。 この設定は変更しないことを推奨します。
RetryStrategy retry = new RetryStrategy(6, 4, RetryStrategy.BackoffStrategy.EXPONENTIAL_BACKOFF) writer = (TunnelBufferedWriter) uploadSession.openBufferedWriter(); writer.setRetryStrategy(retry);