Estou tentando decidir sobre o design do banco de dados, com o mínimo possível de suposições (sobre como o aplicativo da Web realmente evolui) neste estágio.
Como primeiro passo, entendendo que JOINS são caros, estou considerando um pequeno número de tabelas monolíticas em oposição a um grande número de tabelas menores normalizadas. Como segundo ponto, estou confuso entre o uso de hstore e tabelas regulares e JSONB (com indexação GiST).
AFAIK (sinta-se à vontade para corrigir):
Geralmente, no Postgres, o hstore é conhecido por ter um desempenho melhor que outros tipos de dados. Esta apresentação do FOSDEM PGDAY tem algumas estatísticas interessantes (na segunda metade dos slides). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Uma vantagem do hstore é a indexação rápida (GiN ou GiST). No entanto, com a indexação JSONB, GiN e GiST também pode ser aplicada aos dados JSON.
Este blog de um profissional do 2º Quadrante diz "Nesse momento, provavelmente vale a pena substituir o uso do hstore pelo jsonb em todos os novos aplicativos" (role até o final): http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columns /
Então, eu gostaria de decidir o seguinte:
- Para a parte principal (estruturada) dos dados: ela deve estar em algumas tabelas relacionais (relativamente grandes com muitas colunas) ou deve haver um número de armazenamentos de valores-chave usando hstore?
- Para os dados ad hoc (contribuído / não estruturado pelo usuário), ele deve estar em JSON ou armazenamentos de valor de chave ad hoc no hstore (com as chaves armazenadas em uma das principais tabelas relacionais)?
JSON(B)
ehstore
(e EAV) são bons para dados com estrutura desconhecida.