Saya mencoba untuk memutuskan pada desain database, dengan asumsi sesedikit mungkin (mengenai bagaimana aplikasi web benar-benar berkembang) mungkin pada tahap ini.
Sebagai langkah pertama, memahami bahwa BERGABUNG itu mahal, saya mempertimbangkan sejumlah kecil tabel monolitik dibandingkan dengan sejumlah besar tabel kecil yang dinormalisasi. Sebagai poin kedua, saya bingung antara menggunakan tabel hstore vs reguler vs JSONB (dengan indeks GiST).
AFAIK (jangan ragu untuk memperbaiki):
Secara umum, di Postgres, hstore dikenal berkinerja lebih baik daripada tipe data lainnya. Presentasi dari FOSDEM PGDAY ini memiliki beberapa statistik menarik (pada paruh kedua slide). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Keuntungan dengan hstore adalah pengindeksan cepat (GiN atau GiST). Namun, dengan JSONB, pengindeksan GiN dan GiST juga dapat diterapkan pada data JSON.
Blog ini dari seorang profesional di Kuadran ke-2 mengatakan "Pada titik ini mungkin layak mengganti penggunaan hstore dengan jsonb di semua aplikasi baru" (gulir ke akhir): http://blog.2ndquadrant.com/postgresql-anti-patterns- perlu diperlukan -jsonhstore-dynamic-kolom /
Jadi saya ingin memutuskan yang berikut ini:
- Untuk bagian utama (terstruktur) dari data: haruskah masuk dalam beberapa tabel relasional (relatif besar dengan banyak kolom), atau haruskah itu sejumlah toko nilai kunci menggunakan hstore?
- Untuk data ad hoc (kontribusi pengguna / tidak terstruktur), haruskah dalam JSON atau toko nilai kunci ad hoc di hstore (dengan kunci disimpan di salah satu tabel relasional utama)?
JSON(B)
danhstore
(dan EAV) baik untuk data dengan struktur yang tidak dikenal.