2010-12-30 4 views
5

Voglio archiviare un oggetto serializzato da qualche parte e dopo essermi guardato in giro, comprendo che ci sono un paio di modi per farlo.postgresql usa bytea blob o percorso file per memorizzare oggetti serializzati?

Sto cercando di archiviare il file da qualche parte nel file system e di memorizzare il percorso del file come voci in una tabella.

Supponendo che i file siano intorno a 100-500 KB, è un modo adeguato per farlo? O usare bytea o blob una soluzione migliore?

risposta

10

Piccoli oggetti (che 500Kb) si qualificano come funzionano bene come bytea. La principale limitazione della dimensione è che occorrerà materializzare l'intero campo in memoria prima sul server e poi sul client (ci sono modi per farlo, ma sono limitati). Per mezzo megabyte, non dovrebbe essere un problema, ma se inizi a memorizzare oggetti molto più grandi potrebbe essere necessario prendere in considerazione.

Memorizzarlo nel file system e archiviare la posizione (o memorizzarlo con una chiave primaria surrogata da una sequenza SERIAL) è un buon modo per gestire file di grandi dimensioni, e ovviamente è possibile applicarlo anche qui. I lati negativi sono che perdi l'integrità della transazione (non puoi essere sicuro che sia il filesystem che il database sono stati aggiornati, quindi devi implementare qualche tipo di strumento di verifica da eseguire regolarmente per confrontarli), e probabilmente più importante che tu possa ' t ottenere backup coerenti (cosa succede se il file è stato sottoposto a backup e non il db record? o viceversa) Ci sono anche dei metodi per affrontare questo, ovviamente, ma diventa molto più complesso che mantenere i dati memorizzati in la tavola.

Problemi correlati