この段階では、可能な限り少ない仮定(Webアプリの実際の進化に関する)でデータベース設計を決定しようとしています。
JOINSが高価であることを理解するための最初のステップとして、多数の正規化された小さなテーブルではなく、少数のモノリシックテーブルを検討しています。2番目のポイントとして、hstoreと通常のテーブルとJSONB(GiSTインデックス付け)を使用することで混乱しています。
知っている(気軽に修正してください):
一般に、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データに適用することもできます。
第2象限の専門家によるこのブログは、「この時点で、おそらくすべての新しいアプリケーションでhstoreの使用をjsonbに置き換える価値がある」と述べています(最後までスクロール):http ://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columns /
だから私は次のことを決定したいと思います:
- データの主要な(構造化された)部分の場合:いくつかのリレーショナルテーブル(多くの列を持つ比較的大きい)に入れるべきですか、それともhstoreを使用する多数のキー値ストアである必要がありますか?
- アドホック(ユーザー提供/非構造化)データの場合、JSONまたはhstoreのアドホックキー値ストア(メインリレーショナルテーブルのいずれかにキーが格納されている)に格納する必要がありますか?
JSON(B)
およびhstore
(およびEAV)は、構造が不明なデータに適しています。