1

Sur mon serveur Web, j'ai deux dossiers showcase et thumbnail pour stocker les images et leurs vignettes, respectivement. Une base de données récupère ces images pour les afficher sur une page.Comment dois-je stocker les images téléchargées par l'utilisateur pour une application Web?

La colonne de table dans la table showcase est s_image et stocke quelque chose comme /showcase/urlcode.jpg.

J'ai entendu qu'après environ 10-20k fichiers dans un dossier, il commence à ralentir. Alors devrais-je créer un deuxième dossier, showcase2 une fois rempli? Y a-t-il une sorte de création automatique qui peut le faire pour moi?

J'apprécie votre contribution.

Répondre

0

Le système de fichiers que vous utilisez est important lorsque vous placez des dizaines de milliers de fichiers dans un seul répertoire. extfs4 sur Linux évolue mieux que NTFS sous Windows.

Windows dispose d'un mode de compatibilité pour les noms de fichiers 8.3 (ancien nom de fichier DOS standard). Cela provoque chaque nom de fichier plus long que abcdefgh.ext pour avoir un alias créé pour cela quelque chose comme abcd~123.ext. C'est lent, et obtient très lent quand vous avez beaucoup de fichiers dans un seul répertoire. Vous pouvez désactiver ce comportement de compatibilité ancien. Vois ici. https://support.microsoft.com/en-us/kb/121007. Si vous l'éteignez, c'est une solution rapide pour un problème de performance immédiat. Mais, 20 000 fichiers dans un répertoire est un grand nombre. Votre meilleur pari, sur n'importe quel type de système de fichiers, crée automatiquement des sous-répertoires dans votre système de fichiers en fonction de quelque chose qui change. Une stratégie consiste à créer des sous-répertoires basés sur l'année/mois, par exemple

/showcase/2015/08/image1.jpg (for images uploaded this month) 
/showcase/2015/09/image7.jpg (for images next month) 

Il est évidemment pas de problème pour stocker les noms de fichiers longs dans votre colonne s_image dans votre table. Ou, si vous avez un système pour nommer les images, exploitez-le pour créer des sous-répertoires. Par exemple, si vos images sont nommées

cat0001.jpg 
cat0002.jpb 
... 
cat0456.jpg 
... 
cat0987.jpg 

Vous pouvez créer des sous-répertoires basés sur, disons, les cinq premières lettres des noms

/showcase/cat00/cat0001.jpg 
/showcase/cat00/cat0002.jpb 
... 
/showcase/cat04/cat0456.jpg 
... 
/showcase/cat09/cat0987.jpg 

Si vous faites cela, il est préférable de garder l'image noms intacts plutôt que de les rendre plus courts (par exemple, ne le faites pas /showcase/cat09/87.jpg) parce que si vous devez rechercher une image particulière par son nom, vous voulez le nom complet. Pour autant que je sache, il n'y a rien d'automatique dans un système de fichiers pour faire cela pour vous. Mais ce n'est pas difficile à faire dans votre programme.

+0

Merci pour votre réponse - Je vais essayer Amazon S3 pour l'instant et voir ce que je peux faire. – frosty

+0

Même dans S3, vous ne voulez pas des dizaines de milliers d'éléments dans un seul répertoire dans un compartiment. –