หลังจากความคิดเห็นนี้กับหนึ่งในคำถามของฉันฉันคิดว่ามันจะดีกว่าการใช้ฐานข้อมูลเดียวกับ X schemas หรือในทางกลับกัน
สถานการณ์ของฉัน: ฉันกำลังพัฒนาเว็บแอปพลิเคชั่นที่เมื่อผู้คนลงทะเบียนฉันสร้าง (จริง ๆ ) ฐานข้อมูล (ไม่มันไม่ใช่เครือข่ายโซเชียล: ทุกคนต้องเข้าถึงข้อมูลของตัวเองและไม่เห็นข้อมูลของผู้ใช้คนอื่น) .
นั่นคือวิธีที่ฉันใช้สำหรับเวอร์ชันก่อนหน้าของแอปพลิเคชันของฉัน (ที่ยังคงทำงานบน MySQL): ผ่าน Plesk API สำหรับการลงทะเบียนทุกครั้งฉันทำได้
- สร้างผู้ใช้ฐานข้อมูลที่มีสิทธิ์ จำกัด ;
- สร้างฐานข้อมูลที่สามารถเข้าถึงได้โดยผู้ใช้ที่สร้างไว้ก่อนหน้าและ superuser (สำหรับการบำรุงรักษา)
- เติมฐานข้อมูล
ตอนนี้ฉันจะต้องทำเช่นเดียวกันกับ PostgreSQL (โครงการกำลังจะเติบโตและ MySQL ... ไม่ตอบสนองทุกความต้องการ)
ฉันต้องมีการสำรองฐานข้อมูล / สกีมาทั้งหมด: pg_dump ทำงานได้อย่างสมบูรณ์แบบทั้งสองวิธีและเหมือนกันสำหรับผู้ใช้ที่สามารถกำหนดค่าให้เข้าถึงสคีมาเดียวหรือฐานข้อมูลเดียว
ดังนั้นสมมติว่าคุณเป็นผู้ใช้ PostgreSQL ที่มีประสบการณ์มากกว่าฉันคุณคิดว่าอะไรคือทางออกที่ดีที่สุดสำหรับสถานการณ์ของฉันและทำไม
จะมีความแตกต่างด้านประสิทธิภาพโดยใช้ฐานข้อมูล $ x แทนที่จะเป็น $ x schemas หรือไม่ และจะแก้ปัญหาอะไรได้ดีในอนาคต (ความน่าเชื่อถือ)
ฐานข้อมูล / สกีมาทั้งหมดของฉันจะมีโครงสร้างเหมือนกันเสมอ !
สำหรับปัญหาการสำรองข้อมูล (โดยใช้ pg_dump) อาจดีกว่าการใช้ฐานข้อมูลเดียวและสกีมาจำนวนมากทิ้งสกีมาทั้งหมดในครั้งเดียว: การกู้คืนจะเป็นการโหลดดัมพ์หลักในเครื่องพัฒนาอย่างง่ายและจากนั้นถ่ายโอนข้อมูลและกู้คืน เป็นอีกขั้นตอนหนึ่ง แต่การทิ้งสคีมาทั้งหมดดูเหมือนจะเร็วกว่าการทิ้งข้อมูลทีละอย่าง
อัพเดท 2012
โครงสร้างแอปพลิเคชันและการออกแบบเปลี่ยนแปลงไปมากในช่วงสองปีที่ผ่านมา ฉันยังคงใช้one db with many schemas
วิธีการนี้อยู่ แต่ฉันยังมีฐานข้อมูลหนึ่งฐานสำหรับแอปพลิเคชันแต่ละเวอร์ชัน :
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
สำหรับการสำรองข้อมูลฉันจะทิ้งแต่ละฐานข้อมูลเป็นประจำแล้วย้ายการสำรองข้อมูลบนเซิร์ฟเวอร์การพัฒนา
ฉันยังใช้การสำรองข้อมูล PITR / WAL แต่อย่างที่ฉันบอกไว้ก่อนหน้านี้ไม่น่าที่ฉันจะต้องกู้คืนฐานข้อมูลทั้งหมดในครั้งเดียว ... ดังนั้นจึงอาจมีการยกเลิกในปีนี้ (ในสถานการณ์ของฉันไม่ใช่วิธีที่ดีที่สุด )
one-db-many-schema วิธีการทำงานได้ดีมากสำหรับฉันตั้งแต่ตอนนี้แม้ว่าโครงสร้างแอปพลิเคชันจะเปลี่ยนไปโดยสิ้นเชิง:
ฉันเกือบลืม: ฐานข้อมูล / สกีมาทั้งหมดของฉันจะมีโครงสร้างเดียวกันเสมอ !
... ตอนนี้สกีมาทุกตัวมีโครงสร้างของตนเองที่เปลี่ยนแปลงการตอบสนองต่อการไหลของข้อมูลของผู้ใช้แบบไดนามิก