J'essaie de décider de la conception de la base de données, avec le moins d'hypothèses (concernant l'évolution réelle de l'application Web) à ce stade.
Dans un premier temps, sachant que les JOINS sont chers, je considère un petit nombre de tables monolithiques par opposition à un grand nombre de tables plus petites normalisées. Comme deuxième point, je suis confus entre l'utilisation de hstore par rapport aux tables régulières par rapport à JSONB (avec indexation GiST).
AFAIK (n'hésitez pas à corriger):
Généralement, dans Postgres, hstore est connu pour être plus performant que les autres types de données. Cette présentation de FOSDEM PGDAY a des statistiques intéressantes (dans la seconde moitié des diapositives). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Un avantage avec hstore est l'indexation rapide (GiN ou GiST). Cependant, avec JSONB, l'indexation GiN et GiST peut également être appliquée aux données JSON.
Ce blog d'un professionnel du 2nd Quadrant dit "À ce stade, il vaut probablement la peine de remplacer l'utilisation de hstore par jsonb dans toutes les nouvelles applications" (faites défiler jusqu'à la fin): http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columns /
Je voudrais donc décider de ce qui suit:
- Pour la partie principale (structurée) des données: doit-elle aller dans quelques tables relationnelles (relativement grandes avec de nombreuses colonnes), ou doit-elle être un certain nombre de magasins de valeurs-clés utilisant hstore?
- Pour les données ad hoc (contribuées par l'utilisateur / non structurées), doivent-elles se trouver dans JSON ou dans des magasins de valeurs de clés ad hoc dans hstore (avec les clés stockées dans l'une des principales tables relationnelles)?
JSON(B)
ethstore
(et EAV) conviennent aux données de structure inconnue.