ฉันมีปัญหาเดียวกันในการแก้ปัญหาและกำลังพิจารณารูปแบบต่างๆ เนื่องจากฉันมีประสบการณ์ในการสร้างแอปพลิเคชันผู้เช่าหลายคนของ SaaS ฉันก็จะเลือกตัวเลือกที่สองตามประสบการณ์เดิมของฉันกับฐานข้อมูลเชิงสัมพันธ์
ในขณะที่ทำการวิจัยฉันพบบทความนี้ในเว็บไซต์สนับสนุน mongodb (ทางกลับเพิ่มเนื่องจากมันหายไป):
https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
พวกเขาระบุว่าให้หลีกเลี่ยงตัวเลือกที่ 2 โดยไม่เสียค่าใช้จ่ายใด ๆ ซึ่งตามที่ฉันเข้าใจไม่ได้เจาะจงเฉพาะกับ mongodb ความประทับใจของฉันคือสิ่งนี้ใช้ได้กับฐานข้อมูล NoSQL ส่วนใหญ่ที่ฉันค้นคว้า (CoachDB, Cassandra, CouchBase Server เป็นต้น) เนื่องจากลักษณะเฉพาะของการออกแบบฐานข้อมูล
คอลเล็กชัน (หรือที่เก็บข้อมูลหรือที่พวกเขาเรียกว่าในฐานข้อมูลที่แตกต่างกัน) ไม่ใช่สิ่งเดียวกับสกีมาความปลอดภัยใน RDBMS แม้ว่าจะมีพฤติกรรมเป็นที่เก็บเอกสาร แต่ก็ไม่มีประโยชน์สำหรับการแยกผู้เช่าที่ดี ฉันไม่พบฐานข้อมูล NoSQL ที่สามารถใช้ข้อ จำกัด ด้านความปลอดภัยตามคอลเล็กชันได้
แน่นอนคุณสามารถใช้การรักษาความปลอดภัยตามบทบาท mongodb เพื่อ จำกัด การเข้าถึงในระดับฐานข้อมูล / เซิร์ฟเวอร์ ( http://docs.mongodb.org/manual/core/authorization/ )
ฉันขอแนะนำตัวเลือกแรกเมื่อ:
- คุณมีเวลาและทรัพยากรเพียงพอที่จะจัดการกับความซับซ้อนของการออกแบบการใช้งานและการทดสอบสถานการณ์นี้
- หากคุณจะไม่มีความแตกต่างมากนักในโครงสร้างและการทำงานในฐานข้อมูลสำหรับผู้เช่ารายอื่น
- การออกแบบแอปพลิเคชันของคุณจะช่วยให้ผู้เช่าทำการปรับแต่งเพียงเล็กน้อยในขณะรันไทม์
- หากคุณต้องการเพิ่มประสิทธิภาพพื้นที่และลดการใช้ทรัพยากรฮาร์ดแวร์
- หากคุณกำลังจะมีผู้เช่าหลายพันคน
- หากคุณต้องการขยายขนาดอย่างรวดเร็วและมีต้นทุนที่ดี
- หากคุณจะไม่สำรองข้อมูลตามผู้เช่า (เก็บสำรองแยกกันสำหรับผู้เช่าแต่ละราย) เป็นไปได้ที่จะทำเช่นนั้นแม้ในสถานการณ์นี้ แต่ความพยายามจะมาก
ฉันจะไปหาตัวแปร 3 ถ้า:
- คุณจะมีรายชื่อผู้เช่าจำนวนน้อย (หลายร้อยราย)
- ข้อมูลเฉพาะของธุรกิจต้องการให้คุณสามารถรองรับความแตกต่างใหญ่ในโครงสร้างฐานข้อมูลสำหรับผู้เช่ารายต่างๆ (เช่นการรวมเข้ากับระบบของบุคคลที่สามการนำเข้า - ส่งออกข้อมูล)
- การออกแบบแอปพลิเคชันของคุณจะช่วยให้ลูกค้า (ผู้เช่า) ทำการเปลี่ยนแปลงที่สำคัญในรันไทม์ของแอปพลิเคชัน (การเพิ่มโมดูลการปรับแต่งฟิลด์ ฯลฯ )
- หากคุณมีทรัพยากรเพียงพอที่จะขยายขนาดด้วยโหนดฮาร์ดแวร์ใหม่ได้อย่างรวดเร็ว
- หากคุณจำเป็นต้องเก็บเวอร์ชัน / สำรองข้อมูลต่อผู้เช่า นอกจากนี้การคืนค่าจะง่าย
- มีข้อ จำกัด ทางกฎหมาย / ข้อบังคับที่บังคับให้คุณเก็บผู้เช่าที่แตกต่างกันไว้ในฐานข้อมูลที่แตกต่างกัน (แม้แต่ศูนย์ข้อมูล)
- หากคุณต้องการใช้คุณลักษณะด้านความปลอดภัยแบบสำเร็จรูปของ mongodb เช่นบทบาท
- มีความแตกต่างกันมากในเรื่องของขนาดระหว่างผู้เช่า (คุณมีผู้เช่ารายเล็กจำนวนมากและผู้เช่ารายใหญ่เพียงไม่กี่ราย)
หากคุณโพสต์รายละเอียดเพิ่มเติมเกี่ยวกับใบสมัครของคุณฉันอาจให้คำแนะนำโดยละเอียดเพิ่มเติมแก่คุณได้