Ich versuche, mich für das Design der Datenbank zu entscheiden, wobei zu diesem Zeitpunkt möglichst wenige Annahmen (hinsichtlich der tatsächlichen Entwicklung der Web-App) getroffen werden müssen.
Um zu verstehen, dass JOINS teuer sind, betrachte ich als ersten Schritt eine kleine Anzahl monolithischer Tabellen im Gegensatz zu einer großen Anzahl normalisierter kleinerer Tabellen. Als zweiter Punkt bin ich verwirrt zwischen der Verwendung von hstore vs. regulären Tabellen vs. JSONB (mit GiST-Indizierung).
AFAIK (bitte zögern Sie nicht zu korrigieren):
Im Allgemeinen ist bekannt, dass hstore in Postgres eine bessere Leistung erbringt als andere Datentypen. Diese Präsentation von FOSDEM PGDAY enthält einige interessante Statistiken (in der zweiten Hälfte der Folien). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Ein Vorteil von hstore ist die schnelle Indizierung (GiN oder GiST). Mit JSONB können die Indizierungen GiN und GiST jedoch auch auf JSON-Daten angewendet werden.
Dieser Blog von einem professionellen im zweiten Quadranten sagt : „An dieser Stelle lohnt es sich wahrscheinlich hstore Verwendung mit jsonb in allen neuen Anwendungen zu ersetzen“ (scrollen bis zum Ende): http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columns /
Ich möchte mich also für Folgendes entscheiden:
- Für den (strukturierten) Hauptteil der Daten: Sollte er in ein paar relationalen Tabellen (relativ groß mit vielen Spalten) abgelegt werden, oder sollte er eine Anzahl von Schlüsselwertspeichern sein, die hstore verwenden?
- Sollten sich die Ad-hoc-Daten (vom Benutzer eingegebene / unstrukturierte Daten) in JSON oder in Ad-hoc-Schlüsselwertspeichern in hstore befinden (wobei die Schlüssel in einer der relationalen Haupttabellen gespeichert sind)?
JSON(B)
undhstore
(und EAV) eignen sich für Daten mit unbekannter Struktur.