5 votes

CarrierWave enregistre l'image sur gridfs et la télécharge en arrière plan s3

Existe-t-il un moyen d'enregistrer une image sur le gridfs de Mongo et de la télécharger de manière asynchrone sur S3 en arrière-plan ?

Peut-être est-il possible d'enchaîner les téléchargeurs ?

Le problème du prochain : Plusieurs serveurs utilisés, donc - l'image sauvegardée sur le disque dur et le processus d'arrière-plan en cours d'exécution peuvent se trouver sur différents serveurs.

Aussi 1. il devrait être supprimé de gridfs lorsqu'il est téléchargé sur s3 2. il devrait s'effacer automatiquement de s3 quand l'entité correspondante est détruite.

Merci.

1voto

the_man_slim Points 200

À quoi ressemble votre architecture de déploiement ? Je suis un peu confus lorsque vous dites "plusieurs serveurs" - voulez-vous dire plusieurs instances de mongod ? De plus, il y a un peu de confusion lorsque vous spécifiez vos exigences. Selon l'exigence 1, si vous téléchargez vers S3, alors le fichier gridfs devrait être supprimé. Cependant, selon vos exigences, il ne peut pas exister à la fois dans S3 et Gridfs, donc l'exigence 2 semble être une contradiction avec la première, c'est-à-dire qu'il ne devrait pas exister dans Gridfs en premier lieu. Conservez-vous certains fichiers à la fois sur Gridfs et S3 ?

Si vous travaillez dans un ensemble de répliques ou un cluster sharded, vous pouvez créer un fichier curseur disponible sur votre collection gridfs (vous pouvez également le faire sur un seul nœud, bien que ce ne soit pas recommandé). Lorsque vous voyez une opération d'insertion (qui ressemblera à 'op':'i'), vous pourriez exécuter un script ou faire quelque chose dans votre application pour saisir le fichier de gridfs et pousser le fichier approprié vers s3. De même, lorsque vous voyez une opération de suppression ('op':'d'), vous pourriez sommairement supprimer le fichier de s3.

La beauté d'un curseur disponible est qu'il permet des opérations asynchrones - un autre processus peut surveiller l'oplog sur un autre serveur et effectuer les actions appropriées.

0voto

sync Points 65

J'ai utilisé une variable temp pour stocker sur gridfs et fait Worker (voir ce ) pour effectuer un téléchargement asynchrone de gridfs vers s3.

J'espère que cela pourra aider quelqu'un, merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X