2010-10-22 3 views
3

Quelle est la meilleure pratique pour stocker un grand nombre de fichiers référencés dans une base de données dans le système de fichiers?Comment stocker au mieux les images d'applications Web dans le système de fichiers

Nous passons actuellement d'un système qui stocke environ 14 000 fichiers (environ 6 Go d'images et de documents) dans une base de données MySQL. Cela devient rapidement ingérable.

Nous prévoyons actuellement d'enregistrer les fichiers par leur clé primaire de base de données dans le système de fichiers. Je suis préoccupé par les problèmes de performances possibles d'avoir autant de fichiers dans le même dossier. En outre, ces fichiers seront insérés par plusieurs applications différentes sur le même serveur.

Plus précisément, je voudrais savoir:

  • Est-ce une bonne solution compte tenu de ces paramètres? Cela va-t-il laisser de la place à d'autres échelles dans le futur?
  • Y a-t-il des problèmes concernant le stockage de nombreux fichiers au même endroit?
  • Existe-t-il un meilleur moyen de nommer/distribuer les fichiers? Hash le contenu avec MD5, puis ajoutez un suffixe (le PK suffira pour cela) pour obtenir le nouveau nom de fichier du fichier
+0

Stockez-vous toutes vos données dans la base de données? http://const.me/source-code/esent-serialization/ – Soonts

Répondre

1

Créez 16 dossiers correspondant au premier caractère du hachage. Créer 16 dossiers sous chacun de ceux pour le deuxième personnage. Stockez l'image dans le chemin approprié en fonction des 2 premiers caractères hexadécimaux du hachage, puis ajoutez le hachage à l'enregistrement approprié dans la base de données.

+0

Quelle est la raison pour obtenir du hash ** contenu **? Pourquoi ne pas simplement hacher PK ou 'rand()' ou 'time()'? – zerkms

+0

@zerkms: Pas de vraie raison. C'est juste un endroit pratique pour l'obtenir. –

+0

Je pense que ce hachage de 6 Go d'images n'est pas vraiment pratique ;-) – zerkms

2

J'aime nommer le fichier comme suit /* créer le répertoire */ $ dir = date ('Y'). '/'. Date ('m'). '/'. Date ('d')

Questions connexes