मेरे एक प्रश्न के लिए इस टिप्पणी के बाद , मैं सोच रहा हूं कि क्या एक्स स्कीमा या इसके विपरीत एक डेटाबेस का उपयोग करना बेहतर है।
मेरी स्थिति: मैं एक वेब एप्लिकेशन विकसित कर रहा हूं, जब लोग पंजीकरण करते हैं, तो मैं एक डेटाबेस (वास्तव में) बनाता हूं (नहीं, यह एक सामाजिक नेटवर्क नहीं है: हर किसी के पास अपने स्वयं के डेटा तक पहुंच होनी चाहिए और दूसरे उपयोगकर्ता का डेटा कभी नहीं देखना चाहिए) ।
यही कारण है कि मैंने अपने एप्लिकेशन के पिछले संस्करण के लिए उपयोग किया था (जो अभी भी MySQL पर चल रहा है): Plesk API के माध्यम से, हर पंजीकरण के लिए, मैं करता हूं:
- सीमित विशेषाधिकार के साथ एक डेटाबेस उपयोगकर्ता बनाएं;
- एक डेटाबेस बनाएं जिसे केवल पिछले बनाए गए उपयोगकर्ता और सुपरसुसर (रखरखाव के लिए) तक पहुँचा जा सकता है
- डेटाबेस पॉपुलेट करें
अब, मुझे PostgreSQL के साथ भी ऐसा करने की आवश्यकता होगी (परियोजना परिपक्व हो रही है और MySQL ... सभी आवश्यकताओं को पूरा नहीं करता है)।
मुझे सभी डेटाबेस / स्कीमा बैकअप को स्वतंत्र करने की आवश्यकता है: pg_dump दोनों तरीकों से पूरी तरह से काम करता है, और उन उपयोगकर्ताओं के लिए समान है जिन्हें सिर्फ एक स्कीमा या एक डेटाबेस तक पहुंचने के लिए कॉन्फ़िगर किया जा सकता है।
इसलिए, यह मानते हुए कि आप मुझसे अधिक अनुभवी PostgreSQL उपयोगकर्ता हैं, आपको क्या लगता है कि मेरी स्थिति के लिए सबसे अच्छा समाधान क्या है, और क्यों?
क्या $ x स्कीमा के बजाय $ x डेटाबेस का उपयोग करके प्रदर्शन अंतर होगा? और भविष्य में (विश्वसनीयता) बनाए रखने के लिए क्या समाधान बेहतर होगा?
मेरे सभी डेटाबेस / स्कीमा में हमेशा समान संरचना होगी!
बैकअप समस्या के लिए (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
बैकअप के लिए, मैं नियमित रूप से प्रत्येक डेटाबेस को डंप कर रहा हूं, और फिर बैकअप को विकास सर्वर पर स्थानांतरित कर रहा हूं।
मैं पीआईटीआर / वाल बैकअप का भी उपयोग कर रहा हूं, लेकिन जैसा कि मैंने पहले कहा था, इसकी संभावना नहीं है कि मुझे एक ही बार में सभी डेटाबेस को पुनर्स्थापित करना होगा ... इसलिए यह संभवतः इस वर्ष खारिज कर दिया जाएगा (मेरी स्थिति में सबसे अच्छा तरीका नहीं है )।
एक-डीबी-कई-स्कीमा दृष्टिकोण ने मेरे लिए अब से बहुत अच्छा काम किया, भले ही एप्लिकेशन संरचना पूरी तरह से बदल गई हो:
मैं लगभग भूल गया: मेरे सभी डेटाबेस / स्कीमा में हमेशा एक ही संरचना होगी!
... अब, प्रत्येक स्कीमा की अपनी संरचना होती है जो उपयोगकर्ताओं के डेटा प्रवाह में गतिशील रूप से प्रतिक्रिया करती है।