2010-12-02 43 views
4

son plus à une question liée à l'architecture, désolé si je demande dans la mauvaise pile. Est-ce qu'ils les mettent dans une grande pile dans un dossier?une idée comment photos téléchargent le site enregistrer là pics?

comme

uid $. Md5 $ (aléatoire). $ Name sauf dans un dossier

folder/5231.124wdadace123214.arandomname.jpg 
folder/42.15125dawdaowdaw232.arandom2name.png 
folder/etc 

ou

$ uid/md5 $ (aléatoire). $ nom

5231(uid)/12421adwawda2321.arandomname.jpg 
42/15125awdawdwadwa232.arandom2name.png 
etc/2323awdwadwadaw.logo.png 

Qu'est-ce que je pense ici est le deuxième est le meilleur?
parce que chez windows j'ai beaucoup de photos dans un dossier
et oui il faut du temps pour l'ouvrir. Avez-vous une idée de la façon dont ils conservent les fichiers?

+0

merci beaucoup pour le bolding de cette partie. –

+1

Cela peut être intéressant, même si vous n'aurez probablement pas besoin d'un système aussi énorme: http://www.insidefacebook.com/2008/06/27/how-facebook-stores-billions-of-photos/ - I ' Supposons que n'importe quel site stockant un grand nombre de photos utilise une infrastructure comme celle-ci. – Piskvor

Répondre

1

J'ai écrit une fonction pour mes sites qui convertit les ID utilisateur en une hiérarchie de sous-répertoires à deux niveaux qui limite les sous-répertoires à 1000 à chaque niveau.

function get_image_dir($gid) { 
    $d = str_split(str_pad($gid, 6, "0", STR_PAD_LEFT), 3); 
    $wdir = "/images/members/" . $d[0] . "/" . $d[1] . "/" . $gid; 
    return $wdir; 
} 

(en fait, j'ajoute un troisième niveau avec l'ID utilisateur brut pour gérer le rollover à 1 000 000).

/images/members/000/001/1 
/images/members/000/002/2 
... 
/images/members/999/999/999999 
/images/members/000/000/1000000 
/images/members/000/001/1000001 

Au sein de ces sous-répertoires, je séparer en outre basé sur

  1. albums (organisés par les membres)
  2. différents redimensionnements (pour différents endroits sur le site

ressemble structure finale quelque chose comme

/images/members/000/001/1/album1/original 
/images/members/000/001/1/album1/50x50 
/images/members/000/001/1/album1/75x75 
/images/members/000/001/1/album1/400x300 

Le str_split(str_pad()) dans la fonction n'est probablement pas optimal, mais pour l'instant cela fonctionne.

+0

idée la plus épique jusqu'à présent. juste comme celui ci-dessous. mais laisse attendre plus d'idées: D –

0

cela dépend combien d'images que vous vous attendez à avoir si nous parlons de milliers de garder les images dans les dossiers diffrent font de plus facile pour l'ordinateur pour analyser le répertoire du fichier

0

La façon dont je le fais utilise le dossier qui contiennent des numéros d'identification,

/img/0-100/1 
/img/101-200/102 

Cela vous donnera un moyen facile de regarder vos images et le dossier reste assez faible. Et il n'y a pas d'extension parce que je l'enregistre dans la base de données.

0

Oui, beaucoup de fichiers dans un dossier peuvent ralentir la recherche de fichiers dans ce dossier. Au moins dans les principaux systèmes d'exploitation. En théorie, cela ne doit pas être ainsi.

D'autres sites utilisent également la date. Pas seulement les identifiants d'utilisateur ou les identifiants d'image. Juste une autre façon de faire la même chose.

1

Cela dépend principalement du système de fichiers. Pour un système de fichiers moderne comme NTFS ou ext3, garder un grand nombre de fichiers dans le même répertoire n'est pas un problème, mais certains systèmes de fichiers plus anciens ne pouvaient pas le gérer. Toutefois, il peut être judicieux de partitionner les fichiers dans des sous-répertoires selon un schéma, juste pour les gérer avec divers outils (qui peuvent avoir leurs propres problèmes avec des répertoires gigantesques) tels que la sauvegarde. BTW, l'ouverture d'un répertoire dans Windows Explorer compte comme un tel cas.

+0

wow nice info, avez-vous travaillé pour photobucket ou etc? Merci. –