Kann postgresql Key/value wie redis?

Der community-support von nextcloud antwortete mir:

We use redis as a caching layer where it does act as an in-memory cache rather than a fully persisted key-value storage. I don’t think Postgres provides a way to avoid persisting the values to disk and would be therefore not be a suitable caching solution.

Was sagen die postgresql-Experten dazu?

key-value geht via HSTORE-Extension. Wenn es okay ist, daß nach einem Crash der DB die Tabelle leer ist, kann man sie als unlogged erstellen. Damit werden Änderungen der Tabelle nicht im WAL gespeichert, dafür ist es aber deutlich schneller. Da Änderungen nicht im WAL sind, können solche Tabellen auch nicht repliziert werden.

Mit den Datentypen JSON oder JSONB sollte das auch gehen.

Gruß Uwe

Ja, sicher. Ich hab es nicht getestet, aber JSON(B) kann ja deutlich mehr als nur einfache Key-Value. Ich vermute, daß HSTORE da von der Performance besser ist - wenn man nur Key-Value braucht.

Ehrlich gesagt kann ich über die Performance wenig sagen. HSTORE hat für den “Nachteil” eine eigene Extension zu sein, JSON ist nativ vorhanden.
Welches Nextcloud-Problem willst du denn lösen und warum willst du redis o.ä. nicht verwenden?

Einfach weniger Technik im System.

nextcloud freut sich über patche. :slight_smile:

The database abstraction layer used by Nextcloud is Doctrine and does not support HSTORE afaik.
…[patch]… and raw sql queries to read/write to HSTORE.

Das übersteigt meine Fähigkeiten.
Ich kann den Aufwand nicht abschätzen.
Vielleicht könnte jemand von euch Kontakt zu nextcloud aufnehmen.

ich sehe jetzt für mich keinen Grund, Kontakt zu nextcloud aufzunehmen, aber Du scheinst ja da ein Interesse zu haben und in Kontakt zu stehen: https://github.com/intaro/hstore-extension

Hm, was ist da eigentlich der Sinn der Sache - also mal unabhängig von Nextcloud - Redis ist eine In-Memory-Datenbank. Für komplexe Daten ist diese gar nicht ausgelegt weshalb diese ja in der Regel nur für Session-Daten verwendet wird. Dafür ist sie ausgelegt, optimiert und hoch performant.

PostgreSQL ist eine Datenbank die eine ganz anderes Ziel verfolgt. Natürlich kann ich das auch irgenwie damit abbilden aber die Frage ist, will ich das denn dann überhaupt und macht das Sinn?

Wenn ich den Bedarf einer extra Session-Engine benötige und über eine Funktionalität wie Redis nachdenke, dann geht es doch wirklich um Performance. In diesem Fall verwende ich doch dann auch die Tools, welche optimal für diesen Zweck gedacht und ausgelegt sind.

Nextcloud hat hier vermutlich gar kein Interesse das innerhalb von PostgreSQL abzubilden. Warum auch? Das bessere Tool hierfür ist redis und funktioniert dann auch ohne Probleme mit anderen Datenbanken zusammen.

[Übrigens nutzt auch das Forum hier zur Speicherung PostgreSQL und als Session-Datenbank redis. Für die jeweilige Funktion das beste Werkzeug… :wink: ]

1 Like