在此阶段,我试图以尽可能少的假设(关于Web应用程序实际如何演变)来决定数据库设计。
第一步,了解JOINS昂贵,因此我考虑使用少量的整体表,而不是大量的规范化较小表。第二点,我对使用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数据。
来自第二象限专家的博客说:“这时可能值得在所有新应用程序中用jsonb替换hstore使用”(滚动到最后):http ://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columns /
因此,我想决定以下几点:
- 对于数据的主要(结构化)部分:它应该放在几个关系表中(相对较大,有很多列),还是应该是使用hstore的许多键值存储?
- 对于临时(用户提供的/非结构化的)数据,应该将其存储在JSON中还是将其存储在hstore中(存储在主要关系表之一中)?
JSON(B)
和hstore
(和EAV)适用于结构未知的数据。