Newsgroup: it.comp.www.php
Titolo: Organizzare un archivio di foto

ho concluso il mio programma per la gestione delle foto, però mi sto accorgendo che il numero di
fotografie che sto inserendo è decisamente elevato, in pochi giorni ho già sforato le 1000 immagini
e sono appena all'inizio e i miei amici devono ancora essere attivate per inserire le loro.
il problema è che non mi sembra troppo "intelligente" metterle tutte dentro la stessa cartella,
avete qualche soluzione in proposito?
Lessi diverso tempo fa non ricordo dove, che una soluzione poteva essere quella di dividere le foto
in n cartelle, esempio ogni cartella può contenere 1000 foto, alla 1001 creo un'altra cartella e
continuo l'inserimento. Avete altre idee in merito?
Anche perhè le foto sono archiviate in 2 formati diversi (thumb, standard e full) e quindi dovrei
crearmi una marea di sottocartelle.
Ciao Stefano


In passato abbiamo discusso sui pregi/difetti dell'implementazione su db 
VS file system (avevo fatto anche alcuni test di prestazioni). Per ogni 
fs è opportuno non superare una certo numero di file, per non avere un 
degrado delle prestazioni (siamo nell'ordine di 10-20 mila file per 
directory). Come soluzione puoi implementare un albero con due diverse 
radici, una per le immagini full e l'altra per le ridotte e fare diversi 
nodi (in base alle immagini che andrai a caricare). Io, per prove fatte 
con ext3 non andrei oltre i 10.000 file per directory.
Per l'albero puoi utilizzare come fa cyrus i primi n caratteri del nome 
del file per gestire i nodi dell'albero (ovviamente se i nomi sono ben 
distribuiti):
PIPPO.JPG
P->
   I->
     PIPPO
	Francesco

     PIPPO
Se non lo sono, si puo' usare per il path l'MD5 del nome del file.
	md5("PIPPO.JPG") = '9afb...';
	9 ->
	  a ->
            f ->
	      PIPPO.JPG
	oppure, senz'altro meglio, raggruppando a blocchi di due lettere:
	9a ->
	   fb ->
	      c3 ->
		PIPPO.JPG
In quest'ultimo caso ogni sottolivello contiene 256 sottocartelle, sicche'
attivando i soli due primi sottolivelli, ogni sottocartella terminale vede
il numero di file diviso per 65536.
Si puo' gestire un miliardo di foto e in ogni cartella ci saranno non piu'
di sedicimila file :-)
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?

 Se non lo sono, si puo' usare per il path l'MD5 del nome del file.
Grazie per i suggerimenti ma i nomi delle mie foto sono semplici numeri (esattamente l'id della foto
regitrata nel database) quindi ho risolto con una serie di cartelle a blocchi di 5000, in pratica
avrň cartelle tipo full_0 (da 1 a 4999), full_5 (da 5000 a 9999), full_10 (da 10.000 a 14.999) cosě
identificare dove si trova la foto č abbastanza immediato, basta prendere l'intero dell'id diviso
per il numero di file in ogni cartella e rimoltiplicarlo per 5 e ho trovato la cartella
(int)(1825/5000)*5=full_0 oppure (int)(163325/5000)*5=full_160.
Se poi facessi cartelle da 10.000 basterebbe moltiplicare l'intero della divisione per 10.000 e
avrei subito il nome della cartella, perň 10.000 file mi sembra un numero veramente grande.
Ciao Stefano

 
Dalle mie prove, ext3 iniziava ad accusare oltre i 15-18k file, mentre 
ntfs verso i 20-25k, comunque era una leggera diminuzione delle 
prestazioni, rilevabile solo da locale (in remoto è un ritardo 
trascurabile).
Un appunto, avere immagini con un nome numerico progressivo è molto 
comodo ma attraverso 2 semplici righe di script di possono grabbare 
tutto il contenuto, ovviamente se i file sono contenuti dell'htdocs del 
server web.
	Francesco

 server web.
Puoi spiegarti meglio con un esempio? Non sono molto ferrato in questo.
Comunque i file hanno una parte del nome in forma numerico/progressivo poi gli viene attaccato il
nome del file che però è archiviato nel db. In pratica è in questa forma: file_000000125_pippo.jpg,
il pippo.jpg è registrato nel db.
Ciao Stefano