2012-05-01 25 views
10

वितरित करने का सबसे अच्छा तरीका क्या है मेरे पास सैकड़ों ग्राहकों के साथ एक सॉफ्टवेयर के लिए पोस्टग्रेस्क्ल में डेटाबेस है, वर्तमान में प्रत्येक ग्राहक के लिए पोस्टग्रेस्क्ल की स्कीमा है, लेकिन मुझे सबसे अच्छा समाधान पसंद है क्योंकि ग्राहक तेजी से बढ़ते हैं। मैंने कैसंद्रा के बारे में पढ़ा लेकिन मैं प्राथमिक, फोरजिन कुंजी और चेक की अखंडता खोना नहीं चाहता हूं। इसके अलावा वितरण प्रणाली में PostgreSQL के बारे में पढ़ा है, लेकिन मुझे नहीं पता है कि सबसे अच्छा तरीका है के लिए यह लागू है वर्तमान मेंपोस्टग्रेस्क्ल

उत्तर

10

वहाँ चार स्तर, जिस पर आप अपने ग्राहकों को अलग कर सकते हैं कर रहे हैं:

  1. के लिए एक अलग PostgreSQL क्लस्टर भागो प्रत्येक ग्राहक यह अधिकतम अलगाव प्रदान करता है; प्रत्येक क्लाइंट सिस्टम टेबल, लेनदेन लॉग इत्यादि के अपने सेट के साथ एक अलग बंदरगाह पर है

  2. प्रत्येक ग्राहक को एक ही क्लस्टर में एक अलग डेटाबेस में रखें। इस तरह उनके प्रत्येक के पास एक अलग लॉगिन होता है, लेकिन उसी पोर्ट नंबर पर, और वे वैश्विक सारणी जैसे pg_database साझा करते हैं।

  3. प्रत्येक ग्राहक को एक ही डेटाबेस में एक अलग स्कीमा दें। यदि वे केवल आपके सॉफ़्टवेयर से कनेक्ट हो रहे हैं, तो अलग-अलग उपयोगकर्ता आईडी की आवश्यकता नहीं है, क्योंकि आप केवल search_path सेट कर सकते हैं। बेशक आप अलग-अलग उपयोगकर्ता आईडी का उपयोग कर सकते हैं यदि आप चाहें।

  4. प्रत्येक तालिका की प्राथमिक कुंजी का ग्राहक_आईडी हिस्सा बनाएं, और अपने सॉफ़्टवेयर में उस तक सीमित होना सुनिश्चित करें। यह सैकड़ों उपयोगकर्ताओं के लिए डुप्लिकेट टेबल रखने से बेहतर स्केल होने की संभावना है, लेकिन आपको हमेशा ग्राहक_आईडी द्वारा अपने प्रश्नों को अर्हता प्राप्त करने के लिए बहुत सावधान रहना चाहिए।

कुछ लोगों को, उदाहरण के लिए, इन तकनीकों गठबंधन करने के लिए प्रत्येक ग्राहक के लिए एक अलग डेटाबेस के साथ 100 डेटाबेस के लिए प्रत्येक समूह को सीमित जाने जाते हैं।

अधिक जानकारी के बिना यह जानना मुश्किल है कि कौन सी कॉन्फ़िगरेशन आपकी स्थिति के लिए सबसे अच्छी होगी, यह कहने के अलावा कि यदि आप उपयोगकर्ताओं को डेटाबेस तक सीधे पहुंचने की अनुमति देना चाहते हैं, तो आपके सॉफ़्टवेयर के बिना, आपको क्या दिखाई दे रहा है प्रत्येक विकल्प के साथ सिस्टम टेबल में। किसी उपयोगकर्ता परिप्रेक्ष्य से pg_database, pg_user, और pg_class को देखें, यह देखने के लिए कि क्या खुलासा हुआ है।

7

मैं चाहता हूँ प्राथमिक, foregin कुंजी और चेक

कैसेंड्रा जैसी प्रणालियों के बिंदु है, आपके डेटासेट या काम का बोझ एक बार एक मशीन पर फिट नहीं करता है की अखंडता को खोना नहीं है, तो आप अगर आप postgresql पर रहते हैं तो भी उन चीजों को छोड़ना होगा। (मैंने एक ऐसी बातचीत में विवरण शामिल किया जो मैं अत्यधिक अनुशंसा करता हूं: http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2010-what-every-developer-should-know-about-database-scalability-21-3280648)।

तो कैसंद्रा इस सवाल का जवाब है, "अगर हमें पता है कि हमें विदेशी कुंजी छोड़ना है और जुड़ना है, तो हम अपने डेटाबेस को कैसे डिजाइन करते हैं, इस पर पुनर्विचार करके हम क्या निर्माण कर सकते हैं?"

यदि आप उस बिंदु तक कभी नहीं पहुंचते हैं, तो कैसंद्रा अधिक है। (लेकिन आपको अभी भी उस बात को देखना चाहिए। :)

+0

बात से प्यार करें! +1 – Abdo

+0

उपर्युक्त लिंक इस बात का कारण नहीं है। क्या आप एक प्रासंगिक लिंक पोस्ट कर सकते हैं। – SahuKahn

+0

@SahuKahn उन दो को आजमाएं: * वीडियो: http://pyvideo.org/video/313/pycon-2010--what-every-developer-should-know-abou * स्लाइड: http: //www.slideshare ।नेट/जेबेलिस/क्या-हर-डेवलपर-पता-बारे में-डेटाबेस-स्केलेबिलिटी-पायकॉन-2010 –

संबंधित मुद्दे