2013-03-12 11 views
5

Hintergrund zum Problem.Gibt es einen Vorteil zum Speichern einer komprimierten Datei in der Datenbank

  • Die Datenbank ist PostgreSQL 9.1
  • Daten sind große Mengen an Text (Web-Seite Auszeichnungssprache)
  • Die Säule ist bytea

So kann ich den Text mit PHP komprimieren Store gzcompress und möglicherweise eine Dateigröße bis zu 70% verringern und dann in einer Bytea-Spalte speichern. Aber lohnt sich die Operation wirklich? Ist Bytea nicht bereits in PostgrSQL mit TOAST komprimiert und das Hinzufügen einer weiteren Komprimierungsschicht hat keinen wesentlichen Einfluss auf die Größe der Daten?

+0

versuchen Sie, Speicherplatz zu sparen? Denn wenn man beim Lesen sicher dekomprimiert wird, wird es teurer. Die größere Datei wirkt sich nicht auf die Abfragezeiten aus, solange das Feld nicht ausgewählt ist und Ihre Abfrage nach Primärschlüssel erfolgt. –

+0

Es lohnt sich in welcher Weise? Machst du dir Platz auf deinem Server? –

+0

Versuchen, Speicherplatz zu sparen. Die Spalte, in der die Daten gespeichert werden, ist wirklich für Archivierungszwecke, so dass es selten aufgerufen wird (wie einmal alle 3 Monate). –

Antwort

3

Ja und nein, es hängt von Ihrer Anwendung ab.

RE: TOAST, according to PostgreSQL's documentation Komprimierung (mit LZ), rufen sie nur Komprimierung auf, wenn der Text größer als ein Schwellenwert von 2KiB ist.

Wenn also der von Ihnen gespeicherte HTML-Code kleiner als 2KiB ist, könnte es sich lohnen, eine eigene Komprimierung durchzuführen. In diesem Fall würde ich mich jedoch nicht darum kümmern, da die meisten HTML-Dokumente heutzutage mindestens 10 KB groß sind in Ihrer Anwendungsschicht scheint Ärger und macht Ihre Daten weniger tragbar. Es ist auch ein sehr wirklicher Leistungseinbruch von PHP aus zu machen.

Wenn Sie jedoch ein Archiv für ein sehr großes Web-Forum speichern, wo der HTML-Code durchschnittlich weniger als 2KiB beträgt, gibt es eine Menge davon (einige Foren haben Postcounts in Dutzende Billionen), dann gibt es einen sehr guten Fall bei der Komprimierung der Daten unabhängig davon.

Also, wenn Sie viele (wie in,> 10GB oder so) kleine Datenstücke haben, dann könnte es sich lohnen, die Daten selbst zu komprimieren, , aber immer Profil und Benchmark zuerst!, sonst nicht stören und PostgreSQL es aussortieren lassen.

Verwandte Themen