17 Stimmen

Postgresql TCP Datenkomprimierung

Gibt es eine interne Methode in PostgreSQL, um die Datenkompression über die PSQL-Verbindung über TCP-Socket zu aktivieren.

Ich kann auch andere Methoden verwenden, die nicht intern zu PostgreSQL gehören, wie z.B. SSH-Kompression oder eine andere VPN-Kompression. Dies kann jedoch die Komplexität erhöhen.

Mit freundlichen Grüßen,

1 Stimmen

Das Optimieren Ihrer Abfragen, um nur das zurückzugeben, was benötigt wird, wäre wahrscheinlich ein einfacherer Ansatz.

0 Stimmen

Das wäre auch für jdbc großartig. ETL mit Java erfordert normalerweise viele Daten (und somit viel Netzwerkverkehr).

0 Stimmen

Es kann sich lohnen, obwohl. Bei unserem gemischten Replikationsverkehr reduziert SSL-Komprimierung das Datenvolumen um fast 70% und die Paketanzahl um die Hälfte. Wenn Sie einen stark frequentierten Server mit begrenzter Übertragungszuweisung betreiben, ist das eine Ersparnis, die Sie mitnehmen können. Beachten Sie, dass dies zusätzlich zur Option für komprimierte WAL erfolgt.

6voto

Eelke Punkte 19580

Es scheint, dass ab postgresql 9.2 eine sslcompression Option existiert, die standardmäßig auf True gesetzt ist. Es erfordert jedoch, dass die verwendete OpenSSL-Bibliothek mit zlib-Unterstützung erstellt wurde, um zu funktionieren. Beispielsweise haben die OpenSSL-Binärdateien in den Windows Enterprise-DB-Installateuren diese Unterstützung nicht. Natürlich müssen auch beide Seiten es unterstützen!

2 Stimmen

Das wird dank CRIME immer schwieriger. Sie müssen nicht nur sslcompression=1 in der Verbindungszeichenfolge festlegen (oder die Umgebungsvariable PGSSLCOMPRESSION=1 verwenden), sondern auch OpenSSL mit den Optionen zlib-dynamic oder zlib (nicht no-zlib) kompilieren und (für OpenSSL 1.1.1) Compression=On und MaxProtocol=TLSv1.2 in der /etc/ssl/openssl.cnf (jedenfalls für Debian) festlegen. Dies liegt daran, dass TLS 1.3 die zlib-Komprimierung ausschließt und erfordert, dass Clients eine TLS 1.3 ClientHello ohne Komprimierungsmethode senden - wenn der Server auf TLS 1.2 downgraded, wird keine Komprimierung durchgeführt, dies geschieht nur, wenn der Client ein TLS 1.2 ClientHello sendet.

3voto

Szymon Lipiński Punkte 24492

Als ich vor etwa zwei Monaten die gleiche Frage stellte, lautete die einzige Antwort: Verwenden Sie SSH. Allerdings habe ich das nicht überprüft, da wir es geschafft haben, die Spalte in zwei Teile aufzuteilen und etwa 200kB pro Abfrage herunterzuladen, anstelle von 20MB, und das hat ausgereicht.

Wir hatten große Zeilen in einer Tabelle (mit JSON darin). Dein Problem könnte leicht anders sein. Vielleicht bekommst du Zeilen, die du nicht brauchst? Das habe ich auch schon zu oft gesehen: Hol alle Zeilen aus einer Tabelle, sortiere sie in der Anwendung und hole dann die ersten 10... wenn es ausreicht, einfach order by und limit zu verwenden.

2 Stimmen

Ssh ist nicht praktisch für diesen Zweck. Um ssh-Komprimierung zu implementieren, müssen wir einen ssh-Tunnel an localhost:someport gebunden haben und wir müssen der Software diesen virtuellen Port als postgresql-Port zeigen. Können Sie einen anderen Weg vorschlagen? Es ist schwer zu verstehen, warum eine solche Komprimierung nicht entwickelt wurde, wenn das Protokoll auf TCP basiert und große Datenmengen verarbeitet.

1 Stimmen

Sie können psql auf einer Remote-Maschine so aufrufen: ssh -t psql

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X