Na tym etapie próbuję zdecydować o projekcie bazy danych, przy możliwie jak najmniejszej liczbie założeń (dotyczących tego, jak faktycznie rozwija się aplikacja internetowa).
Pierwszym krokiem jest zrozumienie, że DOŁĄCZENIA są drogie, rozważam niewielką liczbę monolitycznych tabel w przeciwieństwie do dużej liczby znormalizowanych mniejszych tabel. Po drugie, jestem zdezorientowany między używaniem hstore a zwykłymi tabelami vs. JSONB (z indeksowaniem GiST).
AFAIK (prosimy o poprawienie):
Ogólnie w Postgres wiadomo, że hstore działa lepiej niż inne typy danych. Ta prezentacja FOSDEM PGDAY ma kilka interesujących statystyk (w drugiej połowie slajdów). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Zaletą hstore jest szybkie indeksowanie (GiN lub GiST). Jednak w przypadku JSONB, indeksowanie GiN i GiST może być również stosowane do danych JSON.
Ten blog profesjonalisty z 2nd Quadrant mówi: „W tym momencie prawdopodobnie warto zastąpić używanie hstore jsonb we wszystkich nowych aplikacjach” (przewiń do końca): http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columns /
Chciałbym więc zdecydować o następujących kwestiach:
- W przypadku głównej (ustrukturyzowanej) części danych: czy powinna ona znajdować się w kilku relacyjnych tabelach (względnie duża z wieloma kolumnami), czy powinna to być pewna liczba sklepów z kluczową wartością przy użyciu hstore?
- W przypadku danych ad hoc (przekazanych przez użytkownika / nieustrukturyzowanych) powinny one znajdować się w JSON lub w magazynach wartości kluczy ad hoc w hstore (z kluczami przechowywanymi w jednej z głównych tabel relacyjnych)?
JSON(B)
ihstore
(i EAV) są dobre dla danych o nieznanej strukturze.