2013-03-12 12 views
5

Sfondo del problema.Esiste un vantaggio per la memorizzazione di un file compresso nel database

  • Il database è PostgreSQL 9.1
  • dati è grandi quantità di testo (pagina web Markup Language)
  • La colonna è bytea

Così posso archiviare comprimere il testo usando PHP di gzcompress e possibilmente ridurre una dimensione del file fino al 70% e quindi memorizzarlo in una colonna bytea. Ma l'operazione ne vale davvero la pena? Bytea non è già compresso in PostgrSQL usando TOAST e l'aggiunta di un altro livello di compressione non avrà un impatto significativo sulla dimensione dei dati?

+0

stai cercando di risparmiare spazio su disco? perché dover decomprimere quando leggi sicuramente sarà più costoso. Il file più grande non influirà sui tempi di interrogazione purché il campo non sia selezionato e la query da parte della chiave primaria comunque. –

+0

Ne vale la pena in che modo? Stai danneggiando lo spazio sul tuo server? –

+0

Provare a risparmiare spazio su disco. La colonna in cui i dati vengono archiviati è per scopi di archiviazione, quindi viene chiamata raramente (come una volta ogni 3 mesi). –

risposta

3

Sì e no, dipende dalla vostra applicazione.

RE: TOAST, according to PostgreSQL's documentation compressione (utilizzando LZ), invocano solo la compressione se il testo è maggiore di un valore di soglia di 2 KiB.

Quindi, se l'HTML che si sta memorizzando è inferiore a 2 KiB, potrebbe valere la pena fare la propria compressione, anche se in questo caso non mi preoccuperei dato che la maggior parte dei documenti HTML tende ad essere almeno 10 KiB e implementando la compressione nel tuo livello di applicazione sembra un problema e rende i tuoi dati meno portabili. C'è anche un colpo di performance molto reale dal farlo da dentro PHP.

Tuttavia, se si stesse archiviando un archivio per un forum Web molto grande, ad esempio, in cui l'HTML sarà in media meno di 2 KiB, ma ce ne sono molti (alcuni forum hanno un conto in decine di -billions) quindi c'è un ottimo caso nella compressione dei dati a prescindere.

Quindi, se si dispone di molto (come in> 10 GB o giù di lì) di piccole porzioni di dati, potrebbe essere utile comprimere i dati da soli, ma sempre profilo e benchmark per primi!, altrimenti non preoccuparti e lascia che PostgreSQL lo risolva.

Problemi correlati