2011-01-06 17 views
6

Attualmente sto lavorando a un sistema che prevede l'archiviazione di più studi e dettagli dei loro contenuti (uno studio può contenere in genere 1 < immagini X < ~ 2000). I miei colleghi e io stavamo discutendo su quale potrebbe essere il metodo migliore per archiviare le dimensioni dei file (in particolare le dimensioni dell'immagine) in un database.Memorizzazione di dimensioni file in un database

Le dimensioni dei file variano in genere da < da 1kB a> 20 MB.

Attualmente stiamo discutendo tra la memorizzazione dei formati immagini come:

# of kilobytes (as an integer value) 
# of bytes (as a large integer value) 
# of megabytes (possibly as a decimal value) 
Other Options... 

Non ho lavorato con la memorizzazione di file di dimensioni molto e si chiedeva che cosa potrebbe essere il metodo più efficiente/pratico di realizzare questo?

risposta

6

Non c'è una risposta giusta. Mi piace la risposta di Matt per ragioni di precisione. Mi piace la risposta di Abe per motivi di risparmio di spazio ... (Sì, lo spazio in una tabella è molto più "di impatto" rispetto al Filesystem)

La vera risposta è, per quale scopo stai memorizzando il valore? È questo un meccanismo per fatturare all'utente la memorizzazione dei dati? Quindi dovresti fare affidamento sul contratto. È questo per misurare lo spazio su un disco ... se è così, i file REALMENTE occupano un certo numero di "blocchi" e NON un certo numero di byte. Se la dimensione minima del blocco è 2KB, allora dovresti dire che OGNI file ha incrementi di 2kb ... Se memorizzi quel valore o quel valore, 2kb dipende da te.

Forse si sta memorizzando il valore perché l'algoritmo di recupero ha 2 percorsi di ottimizzazione, uno per i file più grandi e uno per i più piccoli e tale processo vorrebbe conoscere la dimensione SENZA interrogare il file system. (in questo caso forse solo una colonna flag "is_greater_than_x_kb" è tutto ciò che serve.)

Nessuno qui può dirti quale sia la tua esigenza. L'unica cosa che le risposte esistenti ti danno è un'opinione, non una risposta giusta.

+0

Grazie Steph- So che non c'era una risposta precisa, solo che avrei avuto pensieri della gente su diversi motivi per archiviare le dimensioni dei file e i vantaggi di archiviarli in un certo modo. Le risposte di tutti sono state molto utili. –

+0

Sono tutti utili, ma non sostituiscono requisiti chiari. Il 95% dei problemi che vedo derivano da una mancanza di requisiti chiari. Anche il 76% di tutte le statistiche sono completamente fabbricate. ;-) –

+1

Non riesco a pensare a un motivo per memorizzare le dimensioni del file a meno che non sia un requisito. Come afferma Stephanie, c'è un uso per "is_greater_than_x_kb". Se la dimensione del file era un progetto di BA, l'app potrebbe verificare se ha ottenuto il file corretto chiedendo loro se considererebbero un checksum o un altro tipo di identificatore univoco per il file, quindi l'app sa che ha ottenuto il file che stava cercando ottenere. –

3

Personalmente, vorrei inserire # di kb come colonna int (purché non abbiate mai nulla di più piccolo di 1kb). bigint occupa il doppio dello spazio (8 byte contro 4) e fintanto che è ben documentato, le persone non dovrebbero essere troppo confuse.

+0

Se stanno memorizzando file fino a 20 MB, direi che salvare 4 byte nel descrivere la dimensione non è una priorità assoluta. ;-) –

9

Se si desidera archiviare in modo esplicito le dimensioni, memorizzare il numero di byte. C'è troppa confusione/ambiguità quando si usano altre unità.

Esempio: persone diverse possono interpretare come kb:

  • kilobyte
  • kilobit
  • kibibytes
  • kibibits

...and how big is a kilobyte, anyway?

T hat ha detto, se stai memorizzando i dati effettivi nel tuo database, , non vedo un motivo immediatamente convincente per archiviare in modo esplicito la lunghezza dei dati.

+0

Non sono sicuro del motivo per cui viene archiviato esattamente - perché non sto realmente lavorando su quel lato del sistema. Tuttavia, sapevo che sarebbe stato archiviato e ho pensato di vedere se qualcuno avesse inserito l'argomento o se esistesse una "best practice" o qualche altro tipo di suggerimento per archiviare le dimensioni dei file. –

2

Memorizzo i file in byte come numero intero nel database. Il campo intero (firmato) di mysql ha un valore massimo di 2147483647, quindi è possibile archiviare file fino a 2 GB senza problemi.

Problemi correlati