web-dev-qa-db-fra.com

Stockage de fichiers pour les applications Web: Système de fichiers vs DB vs moteurs NoSQL

J'ai une application Web qui stocke beaucoup de fichiers générés par les utilisateurs. Actuellement, ils sont tous stockés sur le système de fichiers du serveur, ce qui présente plusieurs inconvénients pour moi.

  • Lorsque nous déplaçons des "dossiers" (comme défini par notre application), nous devons également déplacer les fichiers sur un disque (bien que cela soit davantage dû à des décisions de conception étranges de la part des développeurs d'origine qu'à une exigence de stockage d'éléments sur le système de fichiers).
  • Il est difficile d'écrire des tests pour les actions du système de fichiers. J'ai une classe de système de fichiers fictif qui enregistre des actions comme déplacer, supprimer, etc., sans les effectuer, ce qui fait plus ou moins le travail, mais je n'ai pas une confiance totale dans les tests.
  • J'ajouterai d'autres tâches nécessitant d'accéder aux fichiers d'un autre service pour effectuer des tâches supplémentaires (par exemple, indexation dans Solr, génération de vignettes, conversion de format de film), de sorte que je dois accéder aux fichiers à distance. Faire cela sur des partages réseau semble louche….
  • Traiter les autorisations sur le système de fichiers nous posait parfois des problèmes dans le passé, bien que maintenant que nous ayons migré vers un environnement Linux pur, cela devrait être moins un problème.

Donc, mes principales questions sont

  • Quels sont les inconvénients de stocker des fichiers sous forme de BLOB dans MySQL?
  • Existe-t-il les mêmes problèmes avec les systèmes NoSQL tels que Cassandra?
  • Quelqu'un a-t-il d'autres suggestions qui pourraient être appropriées, par exemple MogileFS, etc.?
31
El Yobo

Pas une réponse directe, mais quelques indications à des questions très intéressantes et similaires (oui, ce sont des blobs et des images mais c'est comparable à l'OMI).

Quels sont les inconvénients de stocker des fichiers sous forme de BLOB dans MySQL?

Existe-t-il les mêmes problèmes avec les systèmes NoSQL tels que Cassandra?

PS: Je ne veux pas être le tonnerre, mais je ne pense pas qu’une solution NoSQL résoudra votre problème (NoSQL n’est tout simplement pas pertinent pour la plupart des entreprises). 

7
Pascal Thivent

peut-être une solution hybride.

Utilisez une base de données pour stocker des métadonnées sur chaque fichier et utilisez le système de fichiers pour stocker le fichier.

toute restructuration de «dossiers» peut être modélisée dans la base de données et déréférencée à partir de l'emplacement réel du système d'exploitation.

3
Randy

Vous pouvez facilement stocker des fichiers jusqu’à 2 Go dans Cassandra en les divisant en colonnes de 1 Mo environ. C'est assez commun.

Vous pouvez également la stocker sous la forme d'une grosse colonne, mais vous devrez alors lire le tout dans la mémoire pour y accéder.

2
jbellis

Si le système d'exploitation ou l'application n'a pas besoin d'accéder aux fichiers, il n'est pas vraiment nécessaire de stocker les fichiers sur le système de fichiers. Si vous souhaitez sauvegarder les fichiers en même temps que la base de données, vous n'aurez aucun avantage à les stocker en dehors de la base de données. Par conséquent, le stockage des fichiers dans la base de données peut constituer une solution valide.

Un inconvénient supplémentaire est que le traitement des fichiers dans la base de données génère plus de temps système que le traitement des fichiers au niveau du système de fichiers. Cependant, tant que les avantages l'emportent sur les inconvénients et qu'il semble que cela pourrait dans votre cas, vous pouvez l'essayer.

Ma principale préoccupation serait de gérer le stockage sur disque. Au fur et à mesure que vos fichiers de base de données deviennent volumineux, la gestion de votre base de données entière devient plus compliquée. Vous ne voulez pas sortir de la poêle et dans le feu.

0
Marcus Adams