Question

L'application Web java que je développe permet aux utilisateurs de télécharger des fichiers (images et documents) sur leurs profils et de définir des règles d'accès pour ces fichiers (définissez lesquels des autres utilisateurs peuvent afficher / télécharger le fichier). Le système de contrôle d'accès / d'autorisation est personnalisé et les règles sont stockées dans mongoDB avec le profil de l'utilisateur et l'entrée de fichier réelle.

Sachant que j'ai besoin que l'application et le stockage soient distribués et tolérants aux pannes, je dois déterminer quelle est la meilleure stratégie pour le stockage de fichiers.

Dois-je stocker les fichiers à l'intérieur de mongoDB dans la collection de fichiers où se trouve le fichier document contenant la description et les règles d'accès?

Ou devrais-je stocker les fichiers dans le système de fichiers du serveur et conserver le chemin dans le document mongoDB? Avec l'approche du système de fichiers, pourrai-je toujours appliquer les autorisations d'accès définies par l'utilisateur et comment? Enfin, dans l'approche du système de fichiers, comment distribuer des fichiers entre les serveurs? Dois-je utiliser des serveurs dédiés pour cela ou puis-je stocker les fichiers sur les serveurs Webapp ou les serveurs mongodb?

Merci beaucoup pour toutes vos idées! Toute aide ou commentaire apprécié.

Alex

Était-ce utile?

La solution

Il existe plusieurs alternatives:

  • mettre des fichiers dans un service de stockage (par exemple S3): facile et beaucoup d'espace mais mauvaise performance
  • placer les fichiers dans un système de fichiers local: rapide mais sans mise à l'échelle
  • mettre des fichiers dans des documents mongodb: simple, puissant et évolutif mais limité à 16 Mo
  • utilise la couche GridFS de mongodb. Les fonctionnalités sont limitées mais il est fait pour l'évolutivité (grâce au sharding) et est assez rapide aussi. Notez que vous pouvez placer des informations sur le fichier (autorisation, etc.) directement dans l'objet de métadonnées du fichier.

Dans votre cas, il semble que la dernière option soit la meilleure, il y a pas mal d'utilisateurs qui sont passés de FS à gridFS et cela a très bien fonctionné pour eux. Points à garder à l'esprit:

  • gridfs sharding fonctionne mais n'est pas parfait: en général, seules les données sont partitionnées, pas les métadonnées. Ce n'est pas grave, mais le fragment contenant les métadonnées doit être très sûr.
  • il peut être avantageux d'utiliser gridfs dans un cluster mongodb distinct de vos données principales, car les exigences (stockage, sauvegarde, etc.) sont généralement différentes.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top