2013-03-12 17 views
8

la mia applicazione riproduce i file video dopo che l'utente è registrato (i file sono più grandi di 100 MB).vs salvataggio locale nel server sql?

  1. è meglio fare io memorizzarli sul disco rigidoe mantenere il percorso del file nel database? oppure archiviare nel database come tipo di flusso di file?

  2. Quando i dati sono archiviati nel database, sono più sicuri contro la manipolazione rispetto a quelli archiviati in hard?

  3. Come garantire la sicurezza dei dati contro la manipolazione?

Grazie.

risposta

10

C'è un documento davvero buono di Microsoft Research chiamato To Blob or Not To Blob.

La loro conclusione dopo un gran numero di test di performance e analisi è questa:

  • se le tue immagini o documenti sono in genere al di sotto di 256 K in termini di dimensioni, la loro memorizzazione in un database di colonna VARBINARY è più efficiente

  • se le immagini oi documenti sono in genere di dimensioni superiori a 1 MB, la loro memorizzazione nel filesystem è più efficiente (e con l'attributo FILESTREAM di SQL Server 2008, sono ancora sotto controllo transazionale e parte del database)

  • tra quei due, è un po 'di un lancio-up a seconda del vostro uso

Se si decide di mettere le immagini in una tabella SQL Server, consiglio vivamente usando un tavolo separato per la memorizzazione quelle foto - non conservare le foto dei dipendenti nella tabella dei dipendenti - tenerle in una tabella separata. In questo modo, la tabella Employee può rimanere snella, media e molto efficiente, assumendo che non sia sempre necessario selezionare anche la foto del dipendente come parte delle query.

Per i filegroup, consultare Files and Filegroup Architecture per un'introduzione. Fondamentalmente, dovresti creare il tuo database con un filegroup separato per grandi strutture di dati fin dall'inizio o aggiungere un filegroup aggiuntivo in seguito. Chiamiamolo LARGE_DATA.

Ora, ogni volta che avete una nuova tabella per creare, che ha bisogno di memorizzare VARCHAR(MAX) o VARBINARY(MAX) colonne, è possibile specificare il gruppo di file per la grande dati:

CREATE TABLE dbo.YourTable 
    (....... define the fields here ......) 
    ON Data     -- the basic "Data" filegroup for the regular data 
    TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data 

Partenza l'intro MSDN su filegroup, e giocarci!

2

1 - dipende da come si definisce "migliore". In generale, preferisco memorizzare gli asset binari nel database in modo che vengano salvati insieme ai dati associati, ma li memorizziamo nel file system. Lo streaming dei dati binari da SQL Server per una richiesta di pagina è un vero scherzo delle prestazioni e non è in scala reale.

  1. Se un utente malintenzionato può raggiungere il tuo disco rigido, l'intero sistema è compromesso - la memorizzazione di elementi nel database non offrirà alcuna sicurezza aggiuntiva significativa.

3 - questa è un'intera domanda a sé stante. Troppo largo per Stack Overflow ...

Problemi correlati