मुझे पता है कि Shopify सभी दुकानों के लिए केवल एक डेटाबेस का उपयोग करता है। लेकिन वे इतने बड़े डेटा के साथ अपने डेटाबेस को कैसे संभाल सकते हैं? क्या 50.000+ दुकानों के लिए एकल डेटाबेस का उपयोग करना एक अच्छा विचार है?
मुझे पता है कि Shopify सभी दुकानों के लिए केवल एक डेटाबेस का उपयोग करता है। लेकिन वे इतने बड़े डेटा के साथ अपने डेटाबेस को कैसे संभाल सकते हैं? क्या 50.000+ दुकानों के लिए एकल डेटाबेस का उपयोग करना एक अच्छा विचार है?
जवाबों:
कृपया ध्यान दें: मैं SQL सर्वर के दृष्टिकोण से उत्तर दे रहा हूं, इसलिए मैं SQL सर्वर के लिए विशिष्ट कुछ अवधारणाओं का उल्लेख करता हूं, लेकिन मेरा मानना है कि इन सभी अवधारणाओं में समान लाभ और सीमाओं के साथ अन्य प्रमुख RDBMS प्लेटफार्मों में समकक्ष हैं।
मैं संभवतः इस उत्तर को संपादित करना जारी रखूंगा क्योंकि मैं अन्य संभावित पेशेवरों / विपक्षों के बारे में सोचता हूं।
खैर, यह वास्तव में स्कीमा, वॉल्यूम, आदि पर निर्भर करता है कि वास्तव में दुकान का भंडारण क्या है? यह 50,000 बिल्लियों या 50,000 उत्पादों या 50,000 विंगनॉट के डेटा को संग्रहीत करने से कैसे अलग है?
कई कारण हैं (केवल अपने आप में आकार के पहलू के अलावा) आप एक ही डेटाबेस में 50,000 विभिन्न ग्राहकों के लिए डेटा स्टोर क्यों नहीं करना चाहते हैं, यदि वास्तव में डेटा को ग्राहक द्वारा पूरी तरह से अलग किया जा सकता है (न कि लुकअप टेबल जैसे ज़िपकोड या अनुप्रयोग-विशिष्ट तालिकाएँ, जो एकल, केंद्रीय डेटाबेस में जा सकती हैं):
यदि कोई ग्राहक एप्लिकेशन को आगे बढ़ाता है, तो उसके डेटा को निकालने और उसे स्केल करने के लिए किसी अन्य उदाहरण, सर्वर आदि पर ले जाने का कोई आसान तरीका नहीं है, जब तक कि आप आगे की योजना नहीं बनाते हैं CustomerID
और जैसे 50,000 फ़ाइलग्रुप हैं (आप सीमित हैं) यदि आप SQL सर्वर के पुराने संस्करण पर हैं, तो वैसे भी 15,000 विभाजन या 1,000 हो सकते हैं, और बहुत सारे फ़ाइलग्रुप होना विनाशकारी हो सकता है )। यह भी ध्यान दें कि विभाजन के लिए एंटरप्राइज़ संस्करण की आवश्यकता होती है।
यदि यह पता चलता है कि आपके सभी ग्राहक इस उदाहरण के लिए बहुत बड़े हैं, तो नए हार्डवेयर प्राप्त करने और पूरे डेटाबेस को वहां ले जाने का मतलब है (और संभवतः फिर से सड़क को नीचे करना)।
ग्राहक को हटाना समान रूप से दर्दनाक हो सकता है, क्योंकि आपको बहुत बड़ी तालिकाओं से कुछ% पंक्तियों को हटाना होगा, और यह सस्ता नहीं होगा।
आपके पास संभवतः ग्राहक डेटा (एक बिलियन पंक्तियों वाला एक ग्राहक, 5,000 के साथ एक अन्य ग्राहक) का व्यापक वितरण होगा। यह कार्डिनैलिटी और प्लान क्वालिटी से जुड़े पैरामीटर सूँघने और हानिकारक प्रदर्शन जैसी चीज़ों को जन्म दे सकता है (क्योंकि आप संभवतः अलग-अलग डेटा सेट के खिलाफ समान प्रश्नों के लिए समान योजनाओं का फिर से उपयोग कर रहे होंगे)।
आपके सभी ग्राहक ठीक उसी SLAs और HA / DR योजनाओं के अधीन हैं। आपके पास पूरे डेटाबेस में एन-मिनट लॉग बैकअप के साथ पूर्ण पुनर्प्राप्ति मोड है, या आप सरल हैं और पूर्ण + भिन्न बैकअप पर भरोसा करते हैं। यदि आपको ग्राहक की त्रुटि के कारण वापस जाना है, या डेटाबेस को एक समय में पुनर्प्राप्त करने की आवश्यकता है, तो यह हर एक ग्राहक को प्रभावित करता है।
डेटा पुनर्प्राप्ति में त्रुटियों की संभावना है - जहां क्लॉस में बग, उदाहरण के लिए, एक ग्राहक को किसी अन्य ग्राहक के डेटा या अन्य सभी ग्राहकों के डेटा को देखने के लिए नेतृत्व कर सकता है ।
कानूनी निहितार्थ हो सकते हैं (कुछ कंपनियों की जगह में सख्त आवश्यकता होगी कि आप अपना डेटा उसी डेटाबेस में किसी अन्य कंपनी और विशेष रूप से अपने प्रतिस्पर्धियों के स्थान पर न रखें)।
यदि किसी एक ग्राहक के डेटा की सुरक्षा महत्वपूर्ण है, तो डेटाबेस टेबल से अलग होने की तुलना में इसे प्राप्त करना बहुत आसान है।
प्रत्येक ग्राहक को एक अलग डेटाबेस में (या कम से कम कई डेटाबेस, प्रत्येक ग्राहकों के समूह के लिए) होने के कुछ फायदे:
DROP DATABASE
।कुछ कमियां: