Este tópico descreve a interface TunnelBufferedWriter, usada para upload de dados.
Um fluxo completo de upload geralmente inclui as seguintes etapas:
Divida os dados em partes.
Atribua um block ID a cada bloco de dados chamando
openRecordWriter(id).Use uma ou mais threads para fazer o upload desses blocos separadamente. Se o upload de algum bloco falhar, reenvie o bloco inteiro.
-
Após o upload de todos os blocos, forneça ao servidor a lista de IDs dos blocos enviados com sucesso para validação chamando
session.commit([1,2,3,…]).Restrições do servidor, como gerenciamento de blocos e tempo limite de conexão, tornam a lógica do processo de upload complexa. Para simplificar esse processo, o SDK oferece um RecordWriter mais avançado: o TunnelBufferedWriter.
Definição da interface TunnelBufferedWriter
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;
}
Descrição da interface TunnelBufferedWriter
Ciclo de vida: abrange desde a criação do RecordWriter até a conclusão do upload dos dados.
Criação da instância TunnelBufferedWriter: chame a interface
openBufferedWriterda UploadSession.Upload de dados: ao chamar a interface Write, os dados são gravados primeiro em um buffer local. Quando o buffer atinge sua capacidade, os dados são enviados em lote ao servidor, evitando tempos limite de conexão. Além disso, o sistema tenta automaticamente novamente em caso de falha no upload.
Conclusão do upload: chame a interface
closee, em seguida, a interfacecommitda UploadSession para finalizar o upload.Controle de buffer: use a interface
setBufferSizepara modificar o tamanho do buffer em bytes. Defina um valor maior ou igual a 64 MB para evitar que o servidor gere muitos arquivos pequenos, o que prejudicaria o desempenho. O valor mínimo é 1 MB e o máximo é 1000 MB. Geralmente, não é necessário alterar essa configuração; mantenha o valor padrão de 64 MB.-
Configuração da estratégia de nova tentativa: há três estratégias de backoff disponíveis: exponencial (EXPONENTIAL_BACKOFF), linear (LINEAR_BACKOFF) e constante (CONSTANT_BACKOFF). Por exemplo, o código abaixo ajusta o número de tentativas de Write para 6, aplicando intervalos de espera de 4 s, 8 s, 16 s, 32 s, 64 s e 128 s antes de cada nova tentativa (a configuração padrão é uma sequência exponencial iniciada em 4). Normalmente, não se recomenda alterar essa configuração de backoff.
RetryStrategy retry = new RetryStrategy(6, 4, RetryStrategy.BackoffStrategy.EXPONENTIAL_BACKOFF) writer = (TunnelBufferedWriter) uploadSession.openBufferedWriter(); writer.setRetryStrategy(retry);