Я пытаюсь определиться с дизайном базы данных, используя как можно меньше предположений (относительно того, как на самом деле развивается веб-приложение) на данном этапе.
В качестве первого шага, понимая, что СОЕДИНЕНИЯ являются дорогостоящими, я рассматриваю небольшое количество монолитных таблиц, а не большое количество нормализованных меньших таблиц. Во-вторых, я запутался между использованием hstore против обычных таблиц и JSONB (с индексацией GiST).
AFAIK (пожалуйста, не стесняйтесь исправлять):
Как правило, в Postgres hstore работает лучше, чем другие типы данных. Эта презентация от FOSDEM PGDAY содержит некоторые интересные статистические данные (во второй половине слайдов). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Преимущество hstore - быстрая индексация (GiN или GiST). Однако с помощью JSONB индексация GiN и GiST также может применяться к данным JSON.
Этот блог от профессионала из 2nd Quadrant гласит: «На данный момент, вероятно, стоит заменить использование hstore на jsonb во всех новых приложениях» (прокрутите до конца): http://blog.2ndquadrant.com/postgresql-anti-patterns-unneeded -jsonhstore-динамические-столбцы /
Поэтому я хотел бы принять решение о следующем:
- Для основной (структурированной) части данных: должны ли они находиться в паре реляционных таблиц (относительно больших с большим количеством столбцов) или это должно быть несколько хранилищ значений ключей, использующих hstore?
- Для специальных данных (пользовательские / неструктурированные) данные должны быть в JSON или специальные значения ключей хранятся в hstore (с ключами, хранящимися в одной из основных реляционных таблиц)?
JSON(B)
иhstore
(и EAV) хороши для данных с неизвестной структурой.