मुझे हल करने और वेरिएंट पर विचार करने में भी यही समस्या है। जैसा कि मेरे पास SaaS मल्टी-टेनेंट एप्लिकेशन बनाने का वर्षों का अनुभव है, मैं भी रिलेशनल डेटाबेस के साथ अपने पिछले अनुभव के आधार पर दूसरे विकल्प का चयन करने जा रहा था।
अपना शोध करते समय मुझे यह लेख मोंगोडब सपोर्ट साइट पर मिला (जिस तरह से वापस चला गया है):https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -टेनेंट.html
लोगों ने किसी भी कीमत पर दूसरे विकल्पों से बचने के लिए कहा, जैसा कि मैं समझता हूं कि मोंगोडब के लिए विशेष रूप से विशिष्ट नहीं है। मेरी धारणा यह है कि यह डेटाबेस डिज़ाइन की बारीकियों के कारण मेरे द्वारा शोध किए गए अधिकांश NoSQL dbs (CoachDB, Cassandra, CouchBase Server, आदि) के लिए लागू है।
संग्रह (या बाल्टी या हालांकि वे इसे अलग-अलग डीबी में कहते हैं) आरडीबीएमएस में सुरक्षा स्कीमा के समान नहीं हैं, हालांकि वे दस्तावेजों के लिए कंटेनर के रूप में व्यवहार करते हैं, वे अच्छे किरायेदार अलगाव को लागू करने के लिए बेकार हैं। मुझे NoSQL डेटाबेस नहीं मिला जो संग्रह के आधार पर सुरक्षा प्रतिबंध लागू कर सके।
बेशक आप डेटाबेस/सर्वर स्तर पर पहुंच को प्रतिबंधित करने के लिए मोंगोडब भूमिका आधारित सुरक्षा का उपयोग कर सकते हैं। (http://docs.mongodb.org/manual/core/authorization/)
मैं पहला विकल्प सुझाऊंगा जब:
- आपके पास इस परिदृश्य के डिजाइन, कार्यान्वयन और परीक्षण की जटिलता से निपटने के लिए पर्याप्त समय और संसाधन हैं।
- यदि आप विभिन्न किरायेदारों के लिए डेटाबेस में संरचना और कार्यक्षमता में अधिक अंतर नहीं होने जा रहे हैं।
- आपका एप्लिकेशन डिज़ाइन किरायेदारों को रनटाइम पर केवल न्यूनतम अनुकूलन करने की अनुमति देगा।
- यदि आप स्थान अनुकूलित करना चाहते हैं और हार्डवेयर संसाधनों का उपयोग कम से कम करना चाहते हैं।
- यदि आपके पास हजारों किरायेदार होने वाले हैं।
- यदि आप तेजी से और अच्छी कीमत पर स्केल आउट करना चाहते हैं।
- यदि आप टेनेंट के आधार पर डेटा का बैकअप नहीं लेने जा रहे हैं (प्रत्येक टैनेंट के लिए अलग बैकअप रखें)। इस परिदृश्य में भी ऐसा करना संभव है लेकिन प्रयास बहुत बड़ा होगा।
मैं संस्करण 3 के लिए जाऊँगा यदि:
- आपके पास किरायेदारों की छोटी सूची (कई सौ) होने वाली है।
- व्यवसाय की बारीकियों के लिए आपको अलग-अलग किरायेदारों के लिए डेटाबेस संरचना में बड़े अंतर का समर्थन करने में सक्षम होना चाहिए (उदाहरण के लिए तृतीय-पक्ष सिस्टम के साथ एकीकरण, डेटा का आयात-निर्यात)।
- आपका एप्लिकेशन डिज़ाइन ग्राहकों (किरायेदारों) को एप्लिकेशन रनटाइम में महत्वपूर्ण परिवर्तन करने की अनुमति देगा (मॉड्यूल जोड़ना, फ़ील्ड को कस्टमाइज़ करना आदि)।
- यदि आपके पास नए हार्डवेयर नोड्स को शीघ्रता से बढ़ाने के लिए पर्याप्त संसाधन हैं।
- यदि आपको प्रति टैनेंट डेटा के संस्करण/बैकअप रखना आवश्यक है। साथ ही पुनर्स्थापित करना आसान होगा।
- ऐसे कानूनी/नियामक प्रतिबंध हैं जो आपको अलग-अलग किरायेदारों को अलग-अलग डेटाबेस (यहां तक कि डेटा केंद्रों) में रखने के लिए मजबूर करते हैं।
- यदि आप मोंगोडब की आउट-ऑफ-द-बॉक्स सुरक्षा सुविधाओं जैसे भूमिकाओं का पूरी तरह से उपयोग करना चाहते हैं।
- किरायेदारों के बीच आकार के मामले में बड़े अंतर हैं (आपके पास कई छोटे किरायेदार हैं और कुछ बहुत बड़े किरायेदार हैं)।
यदि आप अपने आवेदन के बारे में अतिरिक्त विवरण पोस्ट करते हैं, तो शायद मैं आपको अधिक विस्तृत सलाह दे सकूं।