Estoy tratando de decidir sobre el diseño de la base de datos, con la menor cantidad de suposiciones (con respecto a cómo evoluciona realmente la aplicación web) en esta etapa.
Como primer paso, entendiendo que las UNIONES son caras, estoy considerando una pequeña cantidad de tablas monolíticas en lugar de una gran cantidad de tablas más pequeñas normalizadas. Como segundo punto, estoy confundido entre usar hstore vs. tablas regulares vs. JSONB (con indexación GiST).
AFAIK (no dude en corregir):
En general, en Postgres, se sabe que hstore funciona mejor que otros tipos de datos. Esta presentación de FOSDEM PGDAY tiene algunas estadísticas interesantes (en la segunda mitad de las diapositivas). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Una ventaja con hstore es la indexación rápida (GiN o GiST). Sin embargo, con JSONB, la indexación GiN y GiST también se puede aplicar a los datos JSON.
Este blog de un profesional del 2do Cuadrante dice "En este punto, probablemente valga la pena reemplazar el uso de hstore con jsonb en todas las aplicaciones nuevas" (desplazarse hasta el final): http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columnas /
Entonces me gustaría decidir sobre lo siguiente:
- Para la parte principal (estructurada) de los datos: ¿debería ir en un par de tablas relacionales (relativamente grandes con muchas columnas), o debería ser un número de almacenes de valores clave usando hstore?
- Para los datos ad hoc (aportados por el usuario / no estructurados), ¿deben estar en JSON o en almacenes de valores de clave ad hoc en hstore (con las claves almacenadas en una de las tablas relacionales principales)?
JSON(B)
yhstore
(y EAV) son buenos para datos con estructura desconocida.