Domanda

Ho letto alcuni post al riguardo, ma non capisco ancora quale sia la soluzione migliore nel mio caso.

Sto iniziando a scrivere una nuova webApp e il backend fornirà circa 1-10 milioni di immagini . (dimensione media 200-500kB per una singola immagine)

Il mio sito fornirà contenuti e immagini a 100-1000 utenti contemporaneamente.

Vorrei anche mantenere i costi del provider il più bassi possibile (ma questo è un requisito secondario). Sto pensando che lo spazio del file system sia meno costoso rispetto al costo della dimensione del DB.

Personalmente mi piace l'idea di avere tutte le mie immagini nel DB ma ogni suggerimento sarà molto apprezzato :)

Pensi che nel mio caso l'approccio DB sia la scelta giusta?

È stato utile?

Soluzione

Mettere tutte quelle immagini nel tuo database renderà molto, molto grande. Ciò significa che il tuo motore DB sarà impegnato nella memorizzazione nella cache di tutte quelle immagini (un'attività per cui non è realmente progettato) quando potrebbe invece memorizzare nella cache i dati dell'applicazione caldi.

Lascia il file memorizzato nella cache nel sistema operativo e / o nel tuo proxy inverso: saranno più bravi a farlo.

Altri suggerimenti

Alcuni altri motivi per archiviare immagini nel file system:

  • I server di immagini possono essere eseguiti anche quando il database è occupato o inattivo.
  • I file system sono fatti per archiviare file e sono abbastanza efficienti.
  • Il dumping dei dati nel database implica backup più lenti e altre operazioni.
  • Non è necessario alcun codice lato server per pubblicare un'immagine, solo IIS / Apache.
  • Puoi scalare più velocemente con server web economici o potenzialmente su una rete CDN.
  • Puoi eseguire lavori correlati (generazione di miniature, ecc.) senza coinvolgere il database.
  • Il tuo server di database può mantenere una parte maggiore del "reale" dati della tabella in memoria, dove è possibile ottenere la velocità del database per le query. Se utilizza la sua preziosa memoria per mantenere nella cache i file di immagine, ciò non ti offre quasi nulla in termini di velocità rispetto a avere più dell'indice fotografico in memoria.

La maggior parte dei siti di grandi dimensioni utilizza il filesystem.

Vedi Archivia le immagini come file o nel database di un'app Web?

Quando si ha a che fare con oggetti binari, seguire un approccio incentrato sui documenti per l'architettura e non archiviare documenti come pdf e immagini nel database, alla fine sarà necessario rifattorizzarlo quando si iniziano a vedere tutti i tipi di problemi di prestazioni con il proprio database. Basta archiviare il file nel file system e inserire il percorso all'interno di una tabella del database. Esiste anche una limitazione fisica sulla dimensione del tipo di dati che verrà utilizzato per serializzare e salvarlo nel database. Basta memorizzarlo nel file system e accedervi.

La tua prima frase dice che hai letto alcuni post sull'argomento, quindi non mi preoccuperò di inserire collegamenti ad articoli che trattano questo. Nella mia esperienza, e in base a ciò che hai pubblicato per quanto riguarda il numero di immagini e le dimensioni delle immagini, pagherai a caro prezzo le prestazioni del DB se le memorizzi nel DB. Li memorizzerei sul file system.

Quale database stai usando? MS SQL Server 2008 fornisce l'archiviazione FILESTREAM

  

consente l'archiviazione e l'accesso efficiente ai dati BLOB utilizzando una combinazione di SQL Server 2008 e il file system NTFS. Comprende le scelte per l'archiviazione BLOB, la configurazione di Windows e SQL Server per l'utilizzo dei dati FILESTREAM, le considerazioni sulla combinazione di FILESTREAM con altre funzionalità e i dettagli di implementazione come il partizionamento e le prestazioni.

dettagli

Utilizziamo FileNet, un server ottimizzato per l'imaging. È molto caro. Una soluzione più economica consiste nell'utilizzare un file server.

Non considerare la possibilità di archiviare file di grandi dimensioni su un server di database.

Come altri hanno già detto, archiviare i riferimenti ai file di grandi dimensioni nel database.

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