2010-06-22 5 views
6

Qual è il modo migliore per memorizzare dati binari (immagini, pdf, mp3, video ecc.) In mysql e perché? Quello che mi piacerebbe sapere è come lo fai (come sviluppatori) e perché? Anche come i grandi siti lo fanno?Qual è il modo migliore per memorizzare dati binari (immagini, pdf, mp3, video ecc) in mysql e perché?

Grazie in anticipo ;-)

+1

Perché questo è contrassegnato per Oracle? –

+0

ho pensato che fosse una domanda rdbms in generale – Imran

+2

Ma la tua domanda dice "in mysql" non "in un database"! In realtà questo è il genere di cose che i diversi DBMS tendono a fare diversamente. –

risposta

4

Per memorizzare i dati binari in MySQL Blob può essere utilizzato: MySQL Manuel: 10.4.3. The BLOB and TEXT Types

Anche se non è davvero necessario non vorrei memorizzare i dati binari in un database, perché i motivi principali per la memorizzazione dei dati in MySQL ecc. (come Join, Index, ...) non possono essere usati con questi tipi di dati. Anche Blob sta degradando le prestazioni generali del database.

Forse si costruisce una tabella separata per i file in cui sono memorizzati diversi aspetti e un percorso del file system ...

+2

Non so, ho visto terabyte di dati binari memorizzati nei database Oracle e quindi trasmessi in streaming da esso. Non è necessariamente una cattiva idea. – Artefacto

+0

Non ho scritto che è generalmente una cattiva idea - ci sono esempi e casi d'uso a favore e contro Blob. Tuttavia, a mio avviso, dovrebbero esserci buone ragioni e la sintonizzazione corretta (ad esempio spazi tabella separati, ...) quando qualcuno vuole utilizzare tali tecniche. – FloE

+0

Un BLOB è la strada da percorrere. La memorizzazione del percorso ha alcuni problemi definiti. Se i file vengono spostati, i tuoi indicatori sono corrotti. Il backup del DB diventa relativamente inutile. Le operazioni disponibili sui dati non determinano le caratteristiche per la loro memorizzazione. –

3

In Oracle avrei usato una colonna BLOB per memorizzare tali oggetti. In questo modo l'integrità e la sicurezza dei dati sono assicurate allo stesso modo di tutti gli altri dati. L'alternativa è usare un BFILE che è un puntatore a un file sul file system esterno - un file che potrebbe essere stato spostato, cancellato, modificato o addirittura perso quando si tenta di accedere ad esso.

+0

+1 Avendo dovuto gestire sia i negozi BLOB sia i puntatori del file system durante la creazione di siti Web, preferisco di gran lunga lo storage BLOB con una cache del filesystem prima di essere pubblicato. –

1

Beh, io continuo le immagini su disco, ho un sacco di loro e non fare voglio immaginare l'incubo di manutenzione che potrebbe essere. Il mio database (mysql) finora è più piccolo di 5 GB, e sto bene con il ~ 50GB di file jpeg (ogni immagine ha diverse dimensioni salvate). Memorizzare le immagini in un database separato (magari con un controller RAID separato) potrebbe essere una buona cosa se fatto bene, ma credo che il sistema sia più veloce nella loro memorizzazione su disco.

1

Vorrei utilizzare il database solo per la memorizzazione dei metadati dei file (dimensioni, tipo MIME, tag, ecc.). Per motivi di integrità e sicurezza dei dati, è meglio scaricare la gestione dei dati binari in un servizio specializzato come Amazon's S3.

Riguardo all'integrità dei dati: eviterei di sovraccaricare il server DB eseguendo transazioni che coinvolgono grandi blob. Invece, suggerirei di memorizzare prima i file ed eseguire periodicamente una "raccolta di dati inutili" asincrona.

Problemi correlati