J'utilise Amazon S3 pour stocker une grande quantité de fichiers texte.
Mon logiciel est en Java et j'utilise le SDK S3 officiel.
En dehors de créer/supprimer/récupérer /, j'ai souvent besoin de ajouter nouveau contenu aux fichiers.S3 Consistance éventuelle: les parties de fichiers sont perdues sur PUT avec écrasement
S3 ne supporte pas append, j'ai donc mis en œuvre une opération append que, fondamentalement:
- avec un S3 GET, obtient les métadonnées du fichier de S3
- avec un S3 GET, télécharge le fichier entier dans une copie locale
- effectue l'ajout à la copie locale
- avec un S3 PUT, télécharge le fichier local sur S3 en écrasant l'ancien.
Les ajouts ne sont jamais effectués simultanément.
J'ai testé le logiciel, et jusqu'à présent cela semble fonctionner correctement.
Et voici mon problème: dans les scénarios où les ajouts sont très très fréquents, lorsque j'effectue des ajouts, de grandes parties de mes fichiers sont perdues. Cela pourrait-il dépendre de la cohérence éventuelle de S3 sur les PUT d'écrasement?
Merci pour votre aide!
Merci Michael pour votre excellente réponse. Malheureusement, je vois que les versions AWS Bucket sont assez chères, donc je ne sais pas si je serai capable de l'utiliser. Je suppose que mon vrai problème est le combo "no append feature" + "consistance éventuelle". Si je pouvais juste ajouter du contenu sans avoir besoin de relire le fichier entier, ce serait beaucoup plus facile. –
La gestion des versions peut être utilisée de manière à ce que son coût ne soit pas différent de celui des compartiments non versionnés. Le seul coût supplémentaire est de stocker toutes les anciennes versions, mais les anciennes versions ne doivent pas * être * conservées. Vous pouvez créer une politique de cycle de vie pour purger les anciennes versions après 1 jour, et si vous voulez être encore plus agressif, vous pouvez sauvegarder l'id de version de la version précédente dans les métadonnées de la version actuelle, et lorsque vous ouvrez la version actuelle demande pour le précédent. –
Les deux caractéristiques sont comme elles sont pour une raison, cependant. Les objets sont atomiques. L'adjonction défait l'atomicité. La cohérence éventuelle pour les écrasements permet une amélioration substantielle des performances dans le nombre de demandes de lecture par seconde qui sont possibles. –