Domanda

Stiamo creando un sito MVC ASP.NET che dovrà archiviare 1 milione+ immagini, tutte circa 2K-5K di dimensioni. Dalla precedente rissearch, sembra che un file server sia probabilmente migliore di un DB (non esitare a commentare altrimenti).

C'è qualcosa di speciale da considerare quando si memorizza così tanti file? Ci sono problemi con Windows che è in grado di trovare la foto rapidamente se ci sono così tanti file in una cartella? È necessario creare una struttura di directory segmentata, ad esempio dividendoli per nome file? Sarebbe bello se la soluzione si scatenasse ad almeno 10 milioni di immagini per potenziali bisogni di espansione futura.

È stato utile?

Soluzione

4KB è la dimensione del cluster predefinita per NTFS. Potresti sintonizzare queste impostazioni a seconda della solita dimensione dell'immagine.http://support.microsoft.com/kb/314878

Costruirei un albero con sottodirectory per essere in grado di spostarsi da una FS all'altra: Quanti file posso inserire in una directory?Ed evita alcuni problemi: http://www.frank4dd.com/howto/various/maxfiles-per-dir.htm

Puoi anche avere archivi contenenti immagini associate per caricarle con un solo file aperto. Gli archivi di questi potrebbero essere compressi è che il collo di bottiglia è I/O, non compresso se è CPU.

Un DB è più facile da mantenere ma più lento ... quindi dipende da te!

Altri suggerimenti

Guarda anche Questa domanda di errore del server Per alcune discussioni sulle strutture di directory.

Il problema non è che il filesystem non sia in grado di archiviare così tanti file in una directory ma che se si desidera accedere a quella directory utilizzando Windows Explorer ci vorrà per sempre, quindi se dovrai mai accedere manualmente a quella cartella, dovresti segmentare Ad esempio, con una directory per ogni 2-3 prime lettere/numeri del nome o anche una struttura più profonda.

Se puoi dividerlo nelle cartelle 1K con file 1K ciascuno sarà più che sufficiente e il codice per farlo è abbastanza semplice.

Supponendo NTFS, esiste un limite di 4 miliardi di file per volume (2^32 - 1). Questo è il limite totale per tutte le cartelle sul volume (compresi i file del sistema operativo ecc.)

Un gran numero di file in una singola cartella non dovrebbe essere un problema; NTFS utilizza un albero B+ per un rapido recupero. Microsoft consiglia di disabilitare la generazione di nomi a file corto (la funzione che ti consente di recuperare myPictureOfyou.html come mypic ~ 1.htm).

Non so se ci sia alcun vantaggio sulle prestazioni nel segmentarli in più directory; La mia ipotesi è che non ci sarebbe un vantaggio, perché NTFS è stato progettato per le prestazioni con grandi directory.

Se si decide di segmentarli in più directory, utilizzare una funzione hash sul nome del file per ottenere il nome della directory (anziché il nome della directory è la prima lettera del nome del file ad esempio) in modo che ogni sottodirectory abbia all'incirca lo stesso numero di file.

Non escluderei utilizzando una rete di consegna dei contenuti. Sono progettati per questo problema. Ho avuto molto successo con Amazon S3. Dal momento che stai usando una soluzione basata su Microsoft, forse Azure potrebbe essere adatto.

Esiste una sorta di requisito che ti impedisce di utilizzare una soluzione di terze parti?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top