Sto provando a decidere la progettazione del database, con il minor numero di ipotesi (riguardo a come si evolve effettivamente l'app Web) in questa fase.
Come primo passo, comprendendo che i JOIN sono costosi, sto prendendo in considerazione un piccolo numero di tabelle monolitiche rispetto a un gran numero di tabelle più piccole normalizzate. Come secondo punto, sono confuso tra l'utilizzo di tabelle hstore vs. tabelle normali e JSONB (con indicizzazione GiST).
AFAIK (non esitate a correggere):
Generalmente, in Postgres, hstore ha prestazioni migliori rispetto ad altri tipi di dati. Questa presentazione di FOSDEM PGDAY ha alcune statistiche interessanti (nella seconda metà delle diapositive). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Un vantaggio con hstore è l'indicizzazione rapida (GiN o GiST). Tuttavia, con JSONB, l'indicizzazione GiN e GiST può essere applicata anche ai dati JSON.
Questo blog di un professionista del 2 ° quadrante dice "A questo punto probabilmente vale la pena sostituire l'uso di hstore con jsonb in tutte le nuove applicazioni" (scorrere fino alla fine): http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-colonne /
Quindi vorrei decidere quanto segue:
- Per la parte principale (strutturata) dei dati: dovrebbe andare in un paio di tabelle relazionali (relativamente grandi con molte colonne) o dovrebbe essere un numero di archivi di valori-chiave che usano hstore?
- Per i dati ad hoc (forniti dall'utente / non strutturati), dovrebbero essere negli archivi di valori chiave JSON o ad hoc in hstore (con le chiavi archiviate in una delle principali tabelle relazionali)?
JSON(B)
ehstore
(e EAV) sono utili per i dati con struttura sconosciuta.