Domanda

Ho una decisione di progettazione per rendere per quanto riguarda documenti caricati al mio sito web: Posso sia salvarli sul mio file server da qualche parte, o li posso conservare come un blob nel mio database (MSSQL 2005). Se fa alcuna differenza per la decisione di progettazione, questi documenti sono riservati e devono avere un certo grado di protezione.

Le considerazioni che ho pensato di sono:

  1. Memorizzazione sul file server fa per i numeri HUUUUUUUGE di tutti i file oggetto di dumping in una singola directory e accesso quindi più lento, a meno che non posso lavorare fuori una definizione semantica ragionevole per una struttura ad albero di directory
  2. OTOH, sto cercando di indovinare che il file server in grado di gestire la compressione un po 'meglio rispetto al DB ... o mi sbaglio?
  3. Il mio istinto mi dice che la sicurezza della DB è più forte rispetto al server di file, ma non sono sicuro se questo è necessariamente vero.
  4. Non so come avere terabyte di macchie nel mio DB influisce sulle prestazioni.

mi piacerebbe molto apprezzare alcune raccomandazioni qui. Grazie!

È stato utile?

Soluzione

In SQL Server 2005, si ha solo la scelta di utilizzare VARBINARY(MAX) per memorizzare i file all'interno della tabella di database, o poi tenerli fuori.

Lo svantaggio evidente di lasciandoli all'esterno del database è che il database non può controllare realmente ciò che accade loro; essi potrebbero essere spostati, rinominati, eliminati .....

SQL Server 2008 introduce l'attributo FILESTERAM sui tipi VARBINARY(MAX), che permette di lasciare i file al di fuori della tabella del database, ma ancora sotto il controllo transazionale del database - ad esempio non si può semplicemente eliminare i file dal disco, i file sono parte integrante della banca dati e vengono quindi copiate e backup con esso. Ottimo se ne avete bisogno, ma potrebbe fare per alcuni sostegni enormi! : -)

Il lancio di SQL Server 2008 ha presentato alcune "buone pratiche" da quando per memorizzare roba nel database direttamente, e quando utilizzare FILESTREAM. Questi sono:

  • se i file sono in genere meno di 256 KB di dimensione, la tabella del database è l'opzione migliore
  • se i file sono in genere più di 1 MB, o potrebbero essere più di 2 GB di dimensione, quindi FILESTREAM (o nel tuo caso: pianura vecchio file system) è la scelta migliore
  • nessuna raccomandazione per i file tra i due margini

Inoltre, al fine di non influire negativamente sulle prestazioni delle query, è spesso una buona idea mettere i file di grandi dimensioni in una tabella separata alltogether - non hanno le enormi macchie far parte delle tabelle regolari che si Interrogazione - ma piuttosto creare una tabella separata, che sempre e solo ricerca contro, se si ha realmente bisogno i megabyte di documenti o immagini.

In modo che possa dare un'idea di dove cominciare fuori da!

Altri suggerimenti

vi consiglio caldamente di prendere in considerazione la soluzione di file system. I motivi sono i seguenti:

  • si ha un migliore accesso ai file (preziosi in caso di debug), il che significa che è possibile utilizzare strumenti basate su console regolari
  • si può rapidamente e facilmente sfruttare il sistema operativo per distribuire il carico, ad esempio utilizzando un file system distribuito, aggiungere la ridondanza attraverso un RAID hardware, ecc.
  • è possibile usufruire degli elenchi di controllo di accesso del sistema operativo per far rispettare i permessi.
  • non intasare il database

Se siete preoccupati per grandi quantità di voci nella vostra directory, si può sempre creare uno schema di ramificazione. per esempio:

filename : hello.txt
filename md5: 2e54144ba487ae25d03a3caba233da71
final filesystem position: /path/2e/54/hello.txt

C'è un sacco di "dipende" dietro questo argomento popolare. Dal momento che si dice i documenti sono sensibili e riservate, a braccio mi piacerebbe andare con la memorizzazione nel database. Qui ci sono un paio di motivi:

  • Potenzialmente una maggiore sicurezza. Spesso è più facile da hackerare un sistema di file di un database.
  • controllo del volume Better. Migliaia di file in una cartella può sforzare un sistema operativo, in cui un database può richiedere milioni di righe in una tabella senza battere ciglio.
  • Una migliore ricerca e scansione. Aggiungere categorizzare colonne quando si caricano i dati, o provare l'indicizzazione full text per la scansione dei documenti reali.
  • I backup possono essere più efficienti - basta aggiungere un altro database per il vostro piano di backup, e siete coperti (una volta che si lavora fuori i dettagli di spazio, naturalmente). E quei file di backup sono un altro strato di offuscamento su chiunque cercando di arrivare i documenti sensibili.
  • SQL Server 2008 dispone di opzioni di compressione dei dati che possono aiutare qui. Che, o avere l'applicazione farlo? (Più sicurezza tramite offuscamento, forse)

SQL Server 2008 ha anche il tipo di dati filestream, che può aiutare qui, ma non sono abbastanza familiarità con essa a dare una raccomandazione per la vostra situazione.

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