डेटाबेस अखंडता को लागू करना


19

क्या यह कभी समझ में आता है कि विदेशी कुंजी, चेक की कमी, आदि के बजाय डेटाबेस की अखंडता के लिए आवेदन को लागू करना होगा?

आंतरिक डेटाबेस टूल के माध्यम से डेटाबेस अखंडता को लागू नहीं करने के लिए प्रदर्शन प्रदर्शन में सुधार की कितनी उम्मीद की जा सकती है?

जवाबों:


24

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

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

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

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


2
कि मैं क्या सोचा था और उम्मीद की तर्ज पर बहुत ज्यादा है। मुझे पता था कि मेरी पिछली नौकरी में डीबीए इसके बारे में गलत था, बस इस पर एक स्वतंत्र राय प्राप्त करना चाहता था। धन्यवाद!
रेनैट स्टोज़कोव्स

17

बहुत सारे एप्लिकेशन डेवलपर्स ऐसा सोचते हैं।

जब आपको एप्लिकेशन कोड के लिए डेटा अखंडता को सौंपने का प्रलोभन दिया जाता है, तो सोचें "हर प्रोग्रामर और हर एप्लिकेशन जो अब तक इस डेटाबेस को हिट करता है, समय के अंत तक इसे पूरी तरह से सही, हर बार प्राप्त करना है।"

हालात क्या हैं?


5
+1। वह मूल रूप से यह है। आप एक अच्छी तरह से परीक्षण किए गए और केंद्रीय प्रणाली को बदलते हैं, जिसमें प्रोग्रामर के पुनर्खरीद टन का पालन करना पड़ता है। हर बार। ऐसा नहीं होगा-समय के साथ खराब डेटा वाले डेटाबेस मिलते हैं।
टॉमटॉम

13

यहां तक ​​कि अगर कोई प्रदर्शन लाभ है, तो यह संदर्भात्मक अखंडता और सामान्यीकृत डेटा अखंडता की वापसी की तुलना में नगण्य है।

लंबे समय से वे दिन हैं जहां एक डेटाबेस एक गूंगा डेटा स्टोर है। RDBMS की पेशकश की शक्ति का लाभ उठाएं।

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


-1। लंबे समय से लोग डेटाबेस में तर्क तर्क डालते हैं, पूरे स्टैक के पैमाने पर सबसे कठिन और एमएसओटी महंगा है - मेरे लिए डेटाबेस अनुप्रयोगों द्वारा संचालित तर्क के साथ एक डंप स्टोर हैं। इस SAID: प्रासंगिक अखंडता डेटाबेस स्तर की अखंडता और बहुत उपयोगी के बारे में है।
टॉमटॉम

5
@TomTom आपके एप्लिकेशन में डेटा अखंडता तर्क को फिर से लिखने का काम पहले से ही RDBMSes में किया गया है। डेटाबेस में डेटा लॉजिक रखें।
थॉमस स्ट्रिंगर

@TomTom - "सैद्धांतिक अमान्य डेटा शूल्ड ने डेटाबेस को कभी नहीं मारा, लेकिन अखंडता रक्षा की अंतिम पंक्ति है।" माना। वह फैंसी AJAX फॉर्म आपके इनपुट-अपफ्रंट को मान्य करके आपके अंतिम-उपयोगकर्ताओं को बहुत सिरदर्द से बचाएगा। इसी तरह, उन डेटाबेस बाधाओं से आपके व्यवसाय और आपके इंजीनियरों को समय, धन, और ऊर्जा के खराब कोड के बाद खो जाने वाली ऊर्जा की बचत होगी ।
निक चामास

6

यदि आप एक बड़ा पर्याप्त डेटा लोड कर रहे हैं, और बाद में बाधाओं और अनुक्रमितों को फिर से सक्षम / कार्यान्वित कर रहे हैं, तो बाधाओं (विदेशी कुंजियों, चेक, आदि) और अनुक्रमित को छोड़ना आम बात है। उस मान्यता की एक समय लागत है। यह मानकर कि आप डेटाबेस विशिष्ट बल्क लोड सिंटैक्स (incl। न्यूनतम लॉगिंग) का उपयोग नहीं कर सकते हैं।

यह कहना असंभव है कि प्रदर्शन में कितनी वृद्धि होने की उम्मीद है - प्रत्येक स्थिति अद्वितीय है (डेटा प्रकार, डिज़ाइन, आदि)। सही मायने में पता करने का एकमात्र तरीका परीक्षण करना है।


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

3

कुछ समय होते हैं जब रास्ते में अड़चनें आती हैं:

  1. जब आपको सिंगल टेबल इनहेरिटेंस (एसटीआई) का उपयोग करने की आवश्यकता होती है । कल्पना कीजिए कि आप दोनों व्यक्तियों और संगठनों को बेचते हैं। आपको एक "पार्टी" तालिका की आवश्यकता होगी जिसकी पंक्ति या तो एक व्यक्ति या एक अंग है। एसटीआई का मतलब है कि आपको कुछ अशक्त क्षेत्र चाहिए जो अशक्त न हों। क्लास टेबल इनहेरिटेंस इसे हल करती है, लेकिन कुछ ओआरएम के लिए यह कठिन है। उदाहरण के लिए, रूबी का ActiveRecord केवल STI का समर्थन करता है।

  2. जब आपको किसी इकाई के ड्राफ्ट संस्करणों का समर्थन करने की आवश्यकता होती है, तो यह पूरी तरह से मान्य नहीं हो सकता है। आप ड्राफ्ट को जौन के रूप में संग्रहीत कर सकते हैं, लेकिन फिर क्लाइंट पर समान पहचानकर्ता का पुन: उपयोग करना कठिन है - कल्पना करें कि इसे आईडी = 5 के साथ सहेजा गया है, जिसे मान्य नहीं होने के लिए संपादित किया गया है, और ड्राफ्टिड = 99 के रूप में स्वतः सहेजा गया है। इस मामले में आपके सभी क्षेत्रों को शायद अशक्त होना पड़ेगा।

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