ฉันกำลังพยายามตัดสินใจเกี่ยวกับการออกแบบฐานข้อมูลโดยมีข้อสมมติฐานน้อยที่สุด (เกี่ยวกับวิธีที่แอพพลิเคชั่นบนเว็บพัฒนาขึ้น) ในขั้นตอนนี้
เป็นขั้นตอนแรกการทำความเข้าใจว่าการเข้าร่วมนั้นมีราคาแพงฉันกำลังพิจารณาตารางเสาหินจำนวนน้อยเมื่อเทียบกับตารางขนาดเล็กจำนวนมากปกติ เป็นจุดที่สองฉันสับสนระหว่างการใช้ 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 ได้
บล็อกนี้จากมืออาชีพที่ 2 Quadrant กล่าวว่า "ณ จุดนี้อาจคุ้มค่าที่จะแทนที่การใช้ hstore ด้วย jsonb ในแอปพลิเคชันใหม่ทั้งหมด" (เลื่อนไปยังจุดสิ้นสุด): http://blog.2ndquadrant.com/postgresql-anti-patterns-unn Essential -jsonhstore ไดนามิกคอลัมน์ /
ดังนั้นฉันต้องการตัดสินใจดังต่อไปนี้:
- สำหรับส่วนหลัก (โครงสร้าง) ของข้อมูล: มันควรจะอยู่ในตารางเชิงสัมพันธ์สองสามอัน (ค่อนข้างใหญ่ที่มีหลายคอลัมน์) หรือควรเป็นร้านค้าคีย์ - ค่าจำนวนหนึ่งที่ใช้ hstore หรือไม่
- สำหรับข้อมูล ad hoc (ผู้ใช้มีส่วนร่วม / ไม่มีโครงสร้าง) ควรอยู่ใน JSON หรือที่เก็บค่าคีย์ ad hoc ใน hstore (โดยมีคีย์ที่เก็บไว้ในตารางสัมพันธ์หลักอย่างใดอย่างหนึ่ง)
JSON(B)
และhstore
(และ EAV) นั้นดีสำหรับข้อมูลที่มีโครงสร้างที่ไม่รู้จัก