Cette rubrique présente l'interface TunnelBufferedWriter, utilisée pour charger des données.
Un processus de chargement complet comprend généralement les étapes suivantes :
Divisez les données en blocs.
Attribuez un identifiant de bloc (block ID) à chaque partie de données en appelant
openRecordWriter(id).Chargez ces blocs en parallèle à l'aide d'un ou plusieurs threads. En cas d'échec du chargement d'un bloc, retransmettez l'intégralité de ce bloc.
-
Une fois tous les blocs chargés, soumettez la liste des identifiants de blocs réussis au serveur pour validation en appelant
session.commit([1,2,3,…]).En raison des contraintes imposées par le serveur, telles que la gestion des blocs et les délais d'expiration de connexion, la logique de chargement peut devenir complexe. Pour simplifier ce processus, le SDK propose une implémentation de
RecordWriterplus avancée :TunnelBufferedWriter.
Définition de l'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;
}
Description de l'interface TunnelBufferedWriter
Cycle de vie : s'étend de la création du
RecordWriterjusqu'à la fin du chargement des données.Création d'une instance
TunnelBufferedWriter: appelez la méthodeopenBufferedWriterde l'objetUploadSession.Chargement des données : appelez la méthode
write. Les données sont d'abord écrites dans un tampon local. Lorsque le tampon est plein, les données sont soumises par lots au serveur, ce qui permet d'éviter les expirations de connexion. En cas d'échec du chargement, le système relance automatiquement l'opération.Fin du chargement : appelez la méthode
close, puis finalisez l'opération en appelant la méthodecommitde l'objetUploadSession.Gestion du tampon : utilisez la méthode
setBufferSizepour modifier la taille du tampon en mémoire (en octets). Il est recommandé de définir une valeur supérieure ou égale à 64 Mo afin d'éviter la génération excessive de petits fichiers sur le serveur, ce qui pourrait nuire aux performances. La valeur minimale est de 1 Mo et la maximale de 1 000 Mo. Dans la plupart des cas, il n'est pas nécessaire de modifier la valeur par défaut de 64 Mo.-
Configuration de la stratégie de nouvelle tentative : trois stratégies d'attente sont disponibles : attente exponentielle (
EXPONENTIAL_BACKOFF), attente linéaire (LINEAR_BACKOFF) et attente constante (CONSTANT_BACKOFF). Par exemple, le code ci-dessous configure le nombre de nouvelles tentatives de l'opérationWriteà 6, avec des délais d'attente respectifs de 4 s, 8 s, 16 s, 32 s, 64 s et 128 s avant chaque tentative (la configuration par défaut utilise une séquence exponentielle commençant à 4). Il est généralement déconseillé de modifier ces paramètres d'attente.RetryStrategy retry = new RetryStrategy(6, 4, RetryStrategy.BackoffStrategy.EXPONENTIAL_BACKOFF) writer = (TunnelBufferedWriter) uploadSession.openBufferedWriter(); writer.setRetryStrategy(retry);