मेरी टीम विदेशी कुंजी रिश्तों के साथ संबंधपरक डेटाबेस संस्थाओं से डरती है और मुझे समझ नहीं आता कि क्यों


12

मैं कॉलेज से अपेक्षाकृत ताज़ा हूं, इसलिए रिलेशनल डेटाबेस के साथ मेरी अधिकांश परिचितता मेरे डेटाबेस कोर्स से है जहां बीसीएनएफ या 3 एनएफ में कुछ भी नहीं है, एक देशद्रोही है। निश्चित रूप से यह चरम का एक छोर है, लेकिन काम पर मेरी टीम वास्तव में इसे पूर्ण विपरीत छोर पर ले जाती है।

हमारे microservice db स्कीमा में, इकाइयां शायद ही कभी एक से अधिक तालिका में हों। जो कुछ भी आप सामान्य रूप से किसी अन्य तालिका में सामान्यीकृत करते हैं वह एक json कॉलम में संग्रहीत होता है। अगर बाद में पता चला कि इस जोंस में से किसी एक गुण को क्वेर करने की जरूरत है, तो एक नया कॉलम जोड़ा जाता है और डेटा को दोनों जगहों पर संग्रहीत किया जाता है (हाँ, एक ही तालिका में दो अलग-अलग कॉलम में)।

बहुत सारे मामलों में इन जोंस कॉलम का एक फायदा जरूर होता है। यदि आपको उस डेटा पर क्वेरी करने की आवश्यकता नहीं है और यदि आपको कभी भी उस डेटा में एकतरफा परिवर्तन नहीं करना है (जो ऐसा कुछ है जिसे आप स्पष्ट रूप से अनुमान नहीं लगा सकते हैं), यह एक बुरा विचार नहीं है। इसके अलावा हमारी कई सेवाएँ सर्वर को नहीं देख पाती हैं या मशीनों पर डिस्क स्थान की एक अश्लील राशि के साथ होस्ट की जाती हैं, जिसकी उन्हें आवश्यकता होती है, इसलिए डेटा दोहराव बहुत बड़ी समस्या नहीं है। (हालांकि कुछ ऐसी चीज़ जो मैं आमतौर पर दर्शन से बचना चाहूंगा)

वर्तमान में हम एक ऐसी सेवा का निर्माण कर रहे हैं जो नियमों के साथ मेल खाने वाले नियमों के आधार पर मेल खाती है और फिर उन नियमों से जुड़ी कार्रवाई का एक सेट निष्पादित करती है जब नियम सही होते हैं (उदाहरण के लिए सभी शर्तें सत्य हैं)। इस सेवा का निर्माण करने वाली मेरी उप टीम का मानना ​​है कि स्कीमा में नियमों से हटकर कार्यों और स्थितियों को सामान्य करने का पर्याप्त लाभ है। स्पष्ट रूप से ये तालिका नियम आईडी के साथ विदेशी प्रमुख संबंधों को बनाए रखती है। अपने दृष्टिकोण से हम यह सुनिश्चित करने वाली स्थितियों पर डेटा के दोहराव से बच सकते हैं ताकि वे यह सुनिश्चित कर सकें कि उनका केवल एक बार मूल्यांकन किया गया है और उन शर्तों और नियमों को खोजना आसान है जिनकी हमें आवश्यकता है जब उन्हें हर एक नियम को खींचने की आवश्यकता होती है और स्मृति में खोज करते हैं।

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

मैं समझता हूं कि गैर-संबंधपरक डेटाबेस हाल के वर्षों में अधिक लोकप्रिय हो गए हैं, लेकिन यहां तक ​​कि जब सक्रिय रूप से विदेशी प्रमुख संबंधों के प्रदर्शन निहितार्थ के बारे में जानकारी के लिए खोज कर रहा हूं, तो मुझे उनके मामले में बहुत सारी जानकारी दिखाई नहीं दे रही है। मुझे लगता है कि वे बड़े लेन-देन शुरू कर सकते हैं जो मुद्दों का कारण बन सकते हैं, लेकिन यह विदेशी कुंजी से स्वतंत्र एक समस्या की तरह लगता है।

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


शीर्षक में आपके प्रश्न का उत्तर होगा "आपकी कंपनी में पुराने मोनोलिथ के कारण वे डर गए हैं"। लेकिन आपके सवाल का शरीर पूरी तरह से कुछ अलग करने के लिए लगता है, यानी "क्या विदेशी चाबियां प्रदर्शन समस्याओं का परिचय देती हैं?"
क्रिश्चियन हैकल

2
मुझे आश्चर्य है कि उन्होंने कितने% RDBMS "ऐप" कोड में बनाए हैं
Caleth

क्या दृष्टिकोण अच्छा है या नहीं आप किस तरह के अनुप्रयोग का निर्माण कर रहे हैं, इसकी ज़रूरतें, और यह जिस दिशा में जा रहा है, उस पर निर्भर करता है (आवश्यकताएं, वास्तु बाधाएँ) - ऐसी चीज़ जिसका हम वास्तव में मूल्यांकन नहीं कर सकते। NoSQL के लिए के रूप में - पूरी बात बड़े पैमाने पर क्षैतिज सामर्थ्य का समर्थन करने के बारे में थी, और इस मान्यता के बारे में कि सभी अनुप्रयोगों को आरडीबीएमएस की सख्त बाधाओं की आवश्यकता नहीं है। अधिक जानने के लिए, शीर्ष 3 उत्तरों का उपयोग यहां एक प्रारंभिक बिंदु के रूप में करें (2 और 3 अधिक गहराई में जाएं)।
फिलीप मिलोवानोविक

2
अगर मैं कुछ गैर-तकनीकी सलाह दे सकता हूं: इसे थोड़ा नीचे करें। आप बहुत से निर्णय पारित कर रहे हैं ("हाँ, एक ही तालिका में दो अलग-अलग स्तंभों में", "डिज़ाइन ट्रैस्टी") काम पर जहां आपको डिज़ाइन के निर्णयों में कोई भागीदारी नहीं थी और इसे न्यूनतम वास्तविक दुनिया के अनुभव की स्थिति से कर रहे थे । मैं यह नहीं कह सकता कि आप सही हैं या गलत हैं क्योंकि मैंने प्रोजेक्ट नहीं देखा है, लेकिन सिस्टम में समझौता होने की एक श्रृंखला है, जिसके परिणामस्वरूप उत्पाद कार्यात्मक है, लेकिन कम-से-वैचारिक रूप से शुद्ध है। जैसे-जैसे आपका करियर आगे बढ़ेगा, यह स्पष्ट होता जाएगा और वे निर्णय लेना आपकी नौकरी का हिस्सा बन जाता है।
Blrfl

@ ब्लरफेल ने उत्कृष्ट रूप से
रॉबी डी

जवाबों:


8

यह समझने के लिए कि आपकी टीम कहां से आ रही है, यह समझने के लिए प्रमुख शब्द है "माइक्रोसेवर्सीज़"। यह उस अवधारणा पर पहले पढ़ने के लायक होगा, विशेष रूप से निम्नलिखित जानकारी के लिए:

  • डेटा को कैसे संग्रहीत किया जाना चाहिए?
  • डिज़ाइन सिद्धांत?
  • उन्हें पैमाने पर कैसे बनाया गया है?

चीजों को करने के किसी भी अपेक्षाकृत नए तरीके के साथ (और 5-10 साल अपेक्षाकृत नया है जब सॉफ्टवेयर आर्किटेक्चर की बात आती है), आप पाएंगे कि आदर्श और वास्तविकता थोड़ा अलग हैं।

आदर्शों में से एक यह है कि प्रत्येक माइक्रोसेवा के पास अपना डेटा स्टोर होना चाहिए। नोट: मैंने कहा कि डेटा स्टोर, डेटाबेस नहीं। ऐसे मामले हैं जहां आप बस एक नियमित इंजन के विपरीत एक खोज इंजन, बूँद भंडारण, या साधारण कैशिंग चाहते हैं। इस बात पर निर्भर करता है कि आप किससे बात करते हैं, यह आदर्श प्रति माइक्रोसॉर्स्ट उदाहरण के डेटा स्टोर में भी जा सकता है!

लब्बोलुआब यह है कि जब आप इंटरनेट के पैमाने पर जाने के बारे में बात कर रहे हैं, तो ACID की सुरक्षा और परिचितता (Atomicity, Consistency, Isolation और Durability) लेन-देन केवल तब नहीं होता जब आपके एक डेटाबेस पर लाखों उपयोगकर्ता होते हैं। NoSQL के आगमन के साथ, प्रतिमान BASE (मूल रूप से उपलब्ध, शीतल स्थिति, अंतिम स्थिरता) की ओर अधिक स्थानांतरित हो गया है। ( संदर्भ )

आपके द्वारा डेटा का प्रबंधन करने के PH को बदलने का एक प्रभाव है:

  • आपके लिए देखभाल करने के लिए जिन डेटाबेस का उपयोग किया जाता है उन्हें अब कोड में प्रबंधित किया जाना है
  • एक सर्वर पर "अनंत" संसाधनों को जोड़ने की तुलना में एक समस्या पर अधिक माइक्रोसेवा इंस्टेंस को फेंकने से इसे स्केल करना आसान है
  • आप बढ़ी हुई जटिलता की कीमत पर विश्वसनीयता बढ़ाते हैं

मैं आपकी टीम के विवरण के लिए उत्तर नहीं दे सकता या वे कितना बड़ा समाधान प्राप्त करने का इरादा रखते हैं, लेकिन आमतौर पर आपके पास सभी या कुछ भी समाधान नहीं है। मैं यहां बैठकर जज नहीं कर सकता कि टीम सही विकल्प बना रही है या नहीं। मैं आपको केवल कुछ संदर्भ प्रदान कर रहा हूं ताकि आप कम से कम यह समझ सकें कि वे कहां से आ रहे हैं।


+1 महान सामान - यह सुनिश्चित करने के लिए कि यह डेटाबेस से बाहर स्वैपिंग का मामला नहीं है, इसका मतलब है कि माइक्रोसरोवर्स के आसपास बहुत सारी सूक्ष्मताएं हैं।
रॉबी डे

@ रोबीडी, सहमत। उस दुनिया में बहुत जटिलता है, और हर कोई विवरण पर सहमत नहीं है।
बेरिन लोरिट्श

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

7
यह एक अच्छा जवाब है, और मैंने इसे उकेरा है। मैं केवल यह बताना चाहूंगा कि आप "इंटरनेट स्केल" के रूप में जो उल्लेख करते हैं, वह केवल सबसे बड़ी कंपनियों पर लागू होता है ; अधिकांश कॉर्पोरेट डेटाबेस और वेबसाइटों के लिए (मैं उनमें से 95% कहूंगा), "पारंपरिक" सामान्यीकृत SQL डेटाबेस अभी भी पूरी तरह से व्यवहार्य हैं।
रॉबर्ट हार्वे

@ रोबर्टहवे, मैं पूरे दिल से सहमत हूँ। मैंने माइक्रोसर्विसेज के बारे में कई लेख पढ़े हैं, जो यह बताते हैं कि मैंने क्या लिखा है। अपनी स्वयं की परियोजनाओं में हम उचित सामान्यीकरण और बाधाओं के साथ एक SQL डेटाबेस का उपयोग करते हैं। यह शुद्धतावादी के दिल को चोट पहुंचाएगा, लेकिन वास्तविकता यह है कि हमारा उपयोगकर्ता आधार छोटा है (सैकड़ों या उपयोगकर्ता) और डेटाबेस हमारे लिए प्रदर्शन समस्या नहीं है।
बेरिन लोरिटश

3

ठीक है, इस परियोजना पर सिद्धांत इंजीनियर नहीं होने के कारण आपको वास्तव में इस परियोजना के लिए उसके निर्देशों का पालन करना होगा।

मैं आपको सिस्टम के अपने स्वयं के डिजाइन के माध्यम से काम करने के लिए प्रोत्साहित करूंगा और यह घर पर प्रोटोटाइप है ताकि आप किसी भी व्यापार को समझ सकें। अपनी खुद की शिक्षा के लिए ऐसा करें और केवल काम पर इसका उल्लेख करें जब आप काम के उदाहरणों को प्रदर्शित कर सकते हैं।

मेरा अनुभव यह रहा है कि दावा किया जाता है कि बाधाएँ डेटाबेस प्रदर्शन में धीमी गति का कारण बनती हैं। और हाँ, यह होगा, आपको उन बाधाओं की जाँच करनी होगी। हालाँकि, यह एक बड़ी समस्या है जब डेटाबेस असंगत होता है और यह आपको मुआवजा देने के लिए SQL और अधिक कोड लिखने का कारण होगा, अक्सर सिस्टम की जटिलता को बढ़ाने के साथ-साथ इसे धीमा भी करता है।

3nf, जब उचित रूप से किया जाता है, तो डेटाबेस को तेज कर देगा क्योंकि इसमें से अधिक को कैश किया जा सकता है क्योंकि संग्रहीत किए गए अनावश्यक डेटा कम है। हालांकि, आपकी वर्तमान नौकरी में, वास्तव में एक सामान्यीकृत डेटाबेस और एक गैर-सामान्य के बीच प्रदर्शन अंतर को देखने के लिए एक बड़ा पर्याप्त डेटासेट नहीं हो सकता है।


+1 महान विचार। और अगर एक देव मशीन के लिए वॉल्यूम बहुत बड़ा है, तो एन नमूने में एक 1 अक्सर महान अंतर्दृष्टि भी दे सकता है।
रॉबी डी

2

मुझे लगता है कि वे उसी पुरानी "ट्रैस्टी" को फिर से बनाने से डर रहे हैं जो पहले रेफरेंशियल इंटीग्रिटी के बजाय पहले थी।

उन्होंने तर्क दिया कि जिन जगहों पर मैं परमाणुता चाहता हूं, हमें इसकी आवश्यकता नहीं है ...

यदि आप परमाणुता की आवश्यकता के लिए एक ठोस मामला (उर्फ गैर-कार्यात्मक आवश्यकता) बना सकते हैं, तो उन्हें इसे प्रदान करने के लिए एक अच्छा, ठोस प्रतिवाद की आवश्यकता होगी।

... प्रश्नों के बजाय हमें स्मृति में और बातें करनी चाहिए। यह एक डिज़ाइन सिद्धांत है ... हमें अनुमान नहीं है कि हमारे डेटा की मात्रा में पर्याप्त वृद्धि होगी ...

चलो आशा है कि तुम सही हो। मेरा सुझाव है कि प्रदर्शन करने के लिए "छोटे पर्याप्त" रहने वाले डेटा पर भरोसा करना जोखिम भरा है।

इसके अलावा, इन नियमों में परिवर्तन की दर क्या है? आपके पास जितना अधिक दोहराव होगा, उतना अधिक समय (उर्फ पैसा) आप एक ही चीज़ को कई स्थानों पर अपडेट करने में बर्बाद कर रहे होंगे।


1

RDBMS के पीछे प्रमुख अवधारणाएं 40 साल से अधिक पुरानी हैं। इसके बाद भंडारण बहुत महंगा था और किसी भी तरह की अतिरेक को खत्म कर दिया गया था। हालांकि आरडीबीएमएस के पीछे की अवधारणाएं अभी भी ध्वनि हैं, प्रदर्शन के लिए अपभ्रंश (जुड़ाव कम करने के लिए) का विचार आमतौर पर हाल के दशकों में स्वीकार किया गया है।

तो किसी दिए गए आकार के RDBMS के लिए, आपके पास आमतौर पर आपके तार्किक डिजाइन (बिना अतिरेक के) और प्रदर्शन के लिए आपका भौतिक डिज़ाइन (अतिरेक के साथ) है।

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

जैसे कि क्या आपकी टीम उन प्रतिबंधों से असहज है जो RDBMS ला सकते हैं - कौन जानता है? निश्चित रूप से कनिष्ठ डेवलपर्स मैं देख रहा हूँ कि RDBMS नेस नहीं है जो पिछली पीढ़ियों के डेवलपर्स ने किया था, लेकिन यह संभवतः डेवलपर प्रौद्योगिकियों और डेटाबेस प्लेटफार्मों के प्रसार के साथ अधिक है।

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

लेकिन - हाथ में सवाल करने के लिए। अपने स्वयं के प्रवेश द्वारा, आप डेटा वॉल्यूम बढ़ने की उम्मीद नहीं करते हैं और सिस्टम अच्छा प्रदर्शन कर रहा है। आपके लिए री-इंजीनियरिंग चीजों के विचार को बिना किसी लाभ के लाभ के साथ बेचना काफी खिंचाव होगा। शायद अगर आप अवधारणा का एक प्रमाण कर सकते हैं जहां आरडीबीएमएस दृष्टिकोण ने लाभ उठाया, तो यह एक अलग कहानी होगी।


1
इसे क्यों उतारा गया है? यह संतुलित उत्तर है। व्यावहारिकता +1
डिर्क बोअर

व्यावहारिकता अच्छी है, लेकिन आपको अभी भी सावधान रहना चाहिए। समय से पहले अनुकूलन के एक परियोजना reeks की शुरुआत में प्रदर्शन के नाम पर डेटा का विघटन। फिर से इंजीनियरिंग करना एक पुरानी प्रणाली है जो काम कर रही है जाहिर तौर पर एक अच्छा, व्यावहारिक विकल्प है, लेकिन "हमने हमेशा विपरीत काम किया है और यह काम करता है" के नाम पर उद्योग मानकों तक एक नई प्रणाली को डिजाइन करने से इनकार करना एक अच्छे तर्क से दूर है ।
विंसेंट सवार्द

किसी प्रोजेक्ट की शुरुआत में प्रदर्शन के नाम पर डेटा को अपवित्र करना ... संकेत: आप नहीं :)
रॉबी डी

1
RDBMS का मान डिस्क दक्षता से नहीं आता है।
तेहरिशके

0

यह निर्भर करता है कि आप किस डेटाबेस का उपयोग कर रहे हैं।

एक पारंपरिक RDBMS में, आप सही हैं। डेटा का दोहराव एक घृणा है। कॉलम और उनके जोंस तुल्यता अनिवार्य रूप से सिंक से बाहर निकलने वाले हैं क्योंकि इसे लागू करने के लिए कुछ भी नहीं है। विदेशी कुंजी समर्थन अच्छी तरह से जाना जाता है, रिश्तों का वर्णन करने और लागू करने में बहुत अच्छा काम करता है। और परमाणु डेटा के साथ लगभग कुछ भी करने के लिए महत्वपूर्ण है।

नौसकल प्रकार के सेटअप में, यह कम स्पष्ट है। चूंकि कोई ठोस संबंध नहीं हैं, इसलिए संबंधों का प्रवर्तन कम महत्वपूर्ण हो जाता है। कॉलम इंडेक्स के साथ उस तरह की जसन सामग्री इन प्रणालियों पर बहुत अधिक सामान्य है क्योंकि कोई भी संबंध इसका मतलब सिंक से बाहर निकलने की कम संभावना है। और परमाणु एकल तालिका के लिए विवश है क्योंकि यह है कि कैसे nosql काम करता है।

जो बेहतर है वह इस बात पर निर्भर करता है कि आप वास्तव में क्या कर रहे हैं, और आपको वास्तव में क्या चाहिए।

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

लेकिन वे नहीं करेंगे। उम्मीद है कि आप हालांकि

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.