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

Gibt es Leistungsprobleme beim Speichern von Dateien in PostgreSQL?

Sie haben grundsätzlich zwei Möglichkeiten. Sie können die Daten direkt in der Zeile speichern oder die Funktion für große Objekte verwenden. Da PostgreSQL jetzt etwas namens TOAST verwendet Um große Felder aus der Tabelle zu verschieben, sollte es keine Leistungseinbußen geben, die mit dem direkten Speichern großer Daten in der Zeile verbunden sind. Es bleibt eine 1-GB-Grenze für die Größe eines Felds. Wenn dies zu eingeschränkt ist oder Sie eine Streaming-API wünschen, können Sie die Einrichtung für große Objekte verwenden, die Ihnen so etwas wie Dateideskriptoren in der Datenbank bietet. Sie speichern die LO-ID in Ihrer Spalte und können von dieser ID lesen und schreiben.

Ich persönlich würde vorschlagen, dass Sie die Großobjektanlage meiden, es sei denn, Sie brauchen sie unbedingt. Mit TOAST werden die meisten Anwendungsfälle abgedeckt, indem Sie einfach die Datenbank so verwenden, wie Sie es erwarten würden. Bei großen Objekten geben Sie sich zusätzliche Wartungslast, weil Sie die von Ihnen verwendeten LO-IDs im Auge behalten und sicher sein müssen, sie zu trennen, wenn sie nicht mehr verwendet werden (aber nicht vorher), oder sie sitzen in Ihrem Datenverzeichnis nimmt für immer Platz ein. Es gibt auch viele Einrichtungen, die sich außergewöhnlich verhalten, deren Einzelheiten mir entgangen sind, weil ich sie nie benutze.

Für die meisten Menschen besteht der große Leistungsnachteil im Zusammenhang mit dem Speichern großer Datenmengen in der Datenbank darin, dass Ihre ORM-Software die großen Datenmengen bei jeder Abfrage herauszieht, es sei denn, Sie weisen sie ausdrücklich an, dies nicht zu tun. Sie sollten darauf achten, Hibernate oder was auch immer Sie verwenden, anzugeben, diese Spalten als groß zu behandeln und sie nur abzurufen, wenn sie ausdrücklich angefordert werden.