PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Speichern langer binärer (Rohdaten-)Strings

Soweit PostgreSQL Geben Sie text ein kommt nicht in Frage. Es ist langsamer, verbraucht mehr Platz und ist fehleranfälliger als bytea für den Zweck.

Grundsätzlich gibt es 3 Ansätze:

  1. Verwenden Sie den Typ bytea (im Grunde das pg-Äquivalent des SQL-Blob-Typs).

  2. Verwenden Sie „große Objekte ".

  3. Speichern Sie Blobs als Dateien im Dateisystem und nur den Dateinamen in der Datenbank speichern.

Jeder hat seine eigenen Vor- und Nachteile.

1. ist ziemlich einfach zu handhaben, benötigt aber den meisten Speicherplatz. Etwas Dekodierung und Kodierung ist erforderlich, was es auch langsam macht. Backups werden schnell größer!

2. ist etwas umständlich in der Handhabung, aber Sie haben Ihre eigene Infrastruktur, um die Blobs zu manipulieren - falls Sie das brauchen sollten. Und Sie können einfacher separate Backups erstellen.

3. ist bei weitem der schnellste Weg und verbraucht am wenigsten Speicherplatz. Aber es bietet nicht die referenzielle Integrität, die Sie erhalten, wenn Sie in der Datenbank speichern.

Ich habe eine Reihe solcher Implementierungen für Bilddateien:Speichere ein kleines Thumbnail in einem Bytea-Feld für referentielle Integrität und schnelle Referenz. Speichern Sie das Originalbild als Datei im Dateisystem. Natürlich müssen Sie sich Gedanken darüber machen, wann und wie Sie veraltete Dateien löschen, wie Sie die externen Dateien sichern und dergleichen.