2010-01-07 20 views
18

मैं वर्तमान में एक PHP वेब एप्लिकेशन के डेटाबेस डिज़ाइन से संबंधित सर्वोत्तम अभ्यासों के बारे में एक सहकर्मी के साथ बहस कर रहा हूं। एप्लिकेशन व्यवसायों के लिए डिज़ाइन किया गया है, और साइन अप करने वाली प्रत्येक कंपनी के पास एप्लिकेशन का उपयोग करके एकाधिक उपयोगकर्ता होंगे।PHP वेब अनुप्रयोग: mysql डेटाबेस डिज़ाइन सर्वोत्तम प्रथाओं का प्रश्न

मेरी डिजाइन पद्धति साइन अप करने वाली प्रत्येक कंपनी के लिए एक नया डेटाबेस बनाना है। इस तरह सबकुछ रेत-बक्सेदार, मॉड्यूलर और छोटा है। मेरे सहकर्मी दर्शन सभी को एक डेटाबेस में रखना है। उनका तर्क यह है कि यदि हमारे पास 1000+ कंपनियां साइन अप हैं, तो हम सौदा करने के लिए 1000+ डेटाबेस के साथ हवाएं बनाते हैं। बिजनेस इंटेलिजेंस करने वाली गड़बड़ी का जिक्र नहीं करना है।

उदाहरण के लिए, मान लें कि एप्लिकेशन एक ऑर्डर एंट्री सिस्टम है। अलग-अलग डेटाबेस के साथ, तालिका का आकार प्रबंधनीय रह सकता है भले ही प्रत्येक कंपनी दिन में 100+ ऑर्डर कर रही हो। एक बाल्टी आवेदन में, टेबल बहुत जल्दी हो सकता है।

क्या इसके लिए कोई अच्छा अभ्यास है? मैंने वेब के चारों ओर शिकार करने की कोशिश की, लेकिन मुझे बहुत सफलता नहीं मिली है। लिंक, श्वेतपत्र, और प्रस्तुतियों का स्वागत है।

अग्रिम धन्यवाद,

The1Rob

उत्तर

24

मैंने WordPress.com से डेटाबेस आर्किटेक्ट से बात की, वर्डप्रेस के लिए होस्टिंग सेवा। उन्होंने कहा कि वे एक डेटाबेस के साथ शुरू हुए, सभी ग्राहकों को एक साथ होस्ट किया। एक ब्लॉग साइट की सामग्री वास्तव में इतना नहीं है, आखिरकार। इसका कारण यह है कि एक डेटाबेस अधिक प्रबंधनीय है।

यह उनके लिए अच्छा काम करता है जब तक कि उन्हें सैकड़ों और हजारों ग्राहक नहीं मिलते, उन्हें एहसास हुआ कि उन्हें स्केल करने की आवश्यकता है, कई भौतिक सर्वर चला रहे हैं और प्रत्येक सर्वर पर अपने ग्राहकों का एक सबसेट होस्ट कर रहे हैं। जब वे एक सर्वर जोड़ते हैं, तो अलग-अलग ग्राहकों को नए सर्वर पर माइग्रेट करना आसान होगा, लेकिन किसी व्यक्तिगत डेटाबेस के ब्लॉग से संबंधित एक डेटाबेस में डेटा को अलग करना मुश्किल होगा।

ग्राहकों आते हैं और जाते हैं, और कुछ ग्राहकों की ब्लॉगों उच्च मात्रा गतिविधि है, जबकि अन्य बासी जाना के रूप में, कई सर्वरों से अधिक पुनर्संतुलन एक और भी जटिल रखरखाव का काम हो जाता है। प्रति व्यक्ति डेटाबेस की निगरानी आकार और गतिविधि भी आसान है।

इसी प्रकार डेटाबेस को बैकअप लें या डेटा के टेराबाइट्स वाले एक डेटाबेस के को पुनर्स्थापित करें, व्यक्तिगत डेटाबेस बैकअप बनाम और प्रत्येक मेगाबाइट्स के पुनर्स्थापना, एक महत्वपूर्ण कारक है। विचार करें: एक ग्राहक कॉल करता है और कहता है कि उनके डेटा को कुछ खराब डेटा प्रविष्टि के कारण SNAFU'd मिला है, और क्या आप कल के बैकअप से डेटा को पुनर्स्थापित कर सकते हैं? अपने सभी ग्राहकों के एक एकल डाटाबेस का हिस्सा है, तो आप कैसे एक ग्राहक के डेटा को पुनर्स्थापित हैं?

अंततः वे कि बंटवारे ग्राहक प्रति एक अलग डेटाबेस में, हालांकि जटिल प्रबंधन करने के लिए फैसला किया है, उन्हें अधिक से अधिक लचीलेपन की पेशकश की है और वे इस मॉडल के लिए अपने होस्टिंग सेवा फिर से architected।

तो, जबकि एक डेटा मॉडलिंग नजरिए से यह एक एकल डाटाबेस में सब कुछ रखने के लिए ऐसा करना सही तरह लगता है, कुछ डेटाबेस प्रशासन काम आसान के रूप में आप डेटा की मात्रा का एक निश्चित ब्रेकपाइंट पारित बन जाते हैं।

+0

डेटा विभाजन (विभाजन तालिका नियमों के माध्यम से) संभवतः, एक और विकल्प भी है, हालांकि कभी-कभी प्रबंधित करने के लिए और भी जटिल होता है। और, एकाधिक डेटाबेस का उपयोग करने के खिलाफ उनको प्राप्त करने के लिए, आपको पता है कि यह ठीक से रिपोर्टिंग को प्रभावित नहीं करता है? कोई आसानी से डेटाबेस में उपयुक्त तालिकाओं को जोड़/जोड़ सकता है और यहां तक ​​कि क्रॉस डेटाबेस दृश्य भी बना सकता है जो आपको आवश्यक सभी रिपोर्टिंग डेटा संकलित कर सकता है। –

+5

+1 ग्रेट असली दुनिया उदाहरण। –

0

मैं व्यक्तिगत रूप से इस स्थिति से निपटा नहीं किया है, लेकिन मुझे लगता है कि अगर आप व्यापार खुफिया करना चाहते हैं, आप एक ऑफ़लाइन डेटाबेस में डेटा को समेकित करना चाहिए कि फिर आप जिस भी विश्लेषण को चाहते हैं उसे चला सकते हैं।

साथ ही, उन्हें अलग-अलग डेटाबेस में रखते हुए, सर्वर पर विभाजन करना आसान हो जाता है (यदि आपको 1000+ ग्राहक हैं तो आपको संभवतः गन्दा प्रतिकृति प्रौद्योगिकियों का उपयोग किए बिना करना होगा)।

0

मेरे पास कुछ समय पहले एक समान प्रश्न था और निष्कर्ष पर आया कि एक डेटाबेस बहुत अधिक प्रबंधनीय है। अभी, हमारे पास कई डेटाबेस हैं (लगभग 10) और यह पहले से ही दर्द का सामना कर रहा है जब हम कोड को अपग्रेड करते हैं। हमें हर एक डेटाबेस माइग्रेट करना होगा।

उल्टा यह है कि डेटा को अलग से अलग किया गया है। हमारे डेटा की संवेदनशीलता के कारण, यह एक अच्छी बात है, लेकिन यह इसे बनाए रखने के लिए थोड़ा और कठिन बना देता है।

0

अलग डेटाबेस पद्धति के दूसरे पर बहुत बड़ी प्रगति है:
+ आप इसे छोटे समूहों में तोड़ सकते हैं, यह आर्किटेक्चर बहुत बेहतर है।
+ आप एक आसान तरीके से अकेले स्टैंड सर्वर बना सकते हैं।

1

मैं प्रत्येक कंपनी के लिए कभी भी नया डेटाबेस नहीं बनाऊंगा। यदि आप मॉड्यूलर डिज़ाइन चाहते हैं, तो आप इसे टेबल और सही ढंग से कनेक्ट प्राथमिक और माध्यमिक कुंजी का उपयोग करके बना सकते हैं। यह वह जगह है जहां मैंने database normalization के बारे में सीखा और मुझे यकीन है कि यह आपकी मदद करेगा।

यह वह तरीका है जिसका मैं उपयोग करूंगा। SQL Article

0

यह इस बात पर निर्भर करता है कि आपकी योजनाओं को बदलने की संभावना कितनी है। अगर उन्हें कभी भी बदलना है, तो क्या आप सुरक्षित रूप से उन परिवर्तनों को 1000 अलग-अलग डेटाबेस में कर पाएंगे? यदि आपके डिज़ाइन के साथ स्केलेबिलिटी समस्या मिलती है, तो आप इसे 1000 डेटाबेस के लिए कैसे ठीक कर रहे हैं?

0

हम ग्राहकों की एक बड़ी संख्या के साथ एक सास (के रूप में सॉफ्टवेयर एक सेवा) व्यवसाय चलाने के लिए और एक ही डेटाबेस में सभी ग्राहकों को रखने के लिए चुनाव किया है। 1000 अलग-अलग डेटाबेस प्रबंधित करना एक परिचालन दुःस्वप्न है।

आप अपने डेटा मॉडल और व्यापार वस्तुओं/रिपोर्टिंग प्रश्नों कि उन तक पहुँच बनाने बहुत मेहनती होना जरूरी है। एक दृष्टिकोण जिसे आप विचार करना चाहते हैं, वह है कि प्रत्येक तालिका में कंपनी आईडी ले जाएं और सुनिश्चित करें कि प्रत्येक WHERE खंड में वर्तमान में लॉग-इन किए गए उपयोगकर्ता के लिए कंपनी आईडी शामिल है। यदि आप डेटा एक्सेस लेयर का उपयोग करते हैं, तो आप उस स्थिति को वहां लागू कर सकते हैं।

आप बड़े हो जाना के रूप में, आप कर सकते हैं अभी भी खड़ी प्रत्येक भौतिक सर्वर पर कंपनियों के समूह रखकर विभाजन, उदा सर्वर एक पर पहले 100 कंपनियों, सर्वर बी

1

पर अगले 100 कंपनियों मैं अपने सह कार्यकर्ता के साथ सहमत होगा। रिलेशनल डेटाबेस को बड़ी मात्रा में डेटा को संभालने के लिए डिज़ाइन किया गया है, और जिन नंबरों के बारे में आप बात कर रहे हैं (1000+ कंपनियां, प्रति कंपनी एकाधिक उपयोगकर्ता, 100+ ऑर्डर/दिन) अपेक्षित सीमाओं के भीतर अच्छी तरह से हैं। अलग डेटाबेस का अर्थ है:

  • प्रत्येक स्क्रिप्ट में कई डेटाबेस कनेक्शन (स्मृति और गति दंड)
  • रखरखाव कठिन है इसलिए स्कीमा परिवर्तन, बैकअप (DB सिस्टम आम तौर पर एक समूह के रूप डेटाबेस पर अभिनय के लिए उपकरण प्रदान नहीं करते हैं), और इसी तरह के कार्यों को कई कंपनियों

अपनी साइट विशाल हो जाता है, तो आप अंत में कई सर्वरों पर अपना डेटा वितरित करने के लिए आवश्यकता हो सकती है से अधिक कठिन

  • कठिन डेटा पर क्वेरी को चलाने के लिए किया जाएगा। ऐसा होने पर उसके साथ सौदा करें। प्रदर्शन कारणों के लिए इस तरह से शुरू करने के लिए समयपूर्व अनुकूलन की तरह लगता है।

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