डेटाबेस लेयर में एप्लिकेशन लॉजिक लगाने के खिलाफ या तर्क क्या हैं?


74

नोट प्रोग्रामर्स.से और dba.se के ऑडियंस अलग-अलग हैं, और उनके पास अलग-अलग दृष्टिकोण होंगे, इसलिए इस उदाहरण में, मुझे लगता है कि यह डुप्लिकेट के लिए मान्य है डेटाबेस परत में एप्लिकेशन लॉजिक के खिलाफ या तर्क रखने के लिए क्या तर्क हैं? प्रोग्रामर पर .se

मुझे इस पर पहले से ही dba पर चर्चा नहीं मिली, और मूल पोस्ट यह सब कहती है, इसलिए:

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

व्यक्तिगत रूप से मैं डिबग को आसान बनाने और परतों की जिम्मेदारियों को अलग रखने के लिए आवेदन परत में यथासंभव रखना पसंद करूंगा।

इस पर आपके विचार क्या हैं, और डेटाबेस परत में लागू करने के लिए क्या होना चाहिए या ठीक नहीं होना चाहिए?

एनबी मैं उस प्रश्न के लिए ओपी नहीं हूं, लेकिन मूल शब्द को बरकरार रखा।


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

मुझे ऐसा लगता है कि यहाँ उत्तर डेटाबेस के उपयोग का एक निश्चित तरीका है (कई अनुप्रयोग, कुछ उपयोगकर्ताओं को सीधे डेटाबेस एक्सेस की अनुमति देते हैं, आदि) मुझे लगता है कि अंतर का मुख्य कारण है।
जेएमडी कोलेसस

जवाबों:


56

मिश्रित विचार ...

आपका डेटाबेस कोड आपके एप्लिकेशन क्लाइंट तकनीक को रेखांकित करेगा। ADO.NET के बारे में सोचें -> Linq -> EF साथ ही साथ ORMs। जबकि आप अभी भी उपरोक्त सभी क्लाइंट तकनीकों के खिलाफ पिछले सहस्राब्दी से SQL Server 2000 कोड चला सकते हैं ।

आपके पास कई क्लाइंट समस्या है: मेरे पास .net, जावा और एक्सेल है। यह अनुप्रयोग तर्क के 3 सेट है।

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

एप्लिकेशन तर्क उच्च डेटा वॉल्यूम के लिए स्केल नहीं करता है। हमारे पास प्रति सेकंड 50k पंक्तियाँ संग्रहीत procs का उपयोग कर रही हैं। हाइबरनेट का उपयोग करने वाली एक बहन टीम प्रति सेकंड एक प्राप्त नहीं कर सकती है


जब तक आप रिलेशनल डेटाबेस के साथ रहते हैं
JMD Coalesce

1
@JMDCoalesce: आपको अभी भी व्यावसायिक तर्क की आवश्यकता है और कई ग्राहक ऐप्स के लिए उत्तरदायी हैं। तो आपकी बात क्या है?
gbn

40

मैं सभी तर्क चाहता हूं जो डेटाबेस में सभी उपयोगकर्ताओं और सभी अनुप्रयोगों पर लागू होता है। इसे लगाने के लिए एकमात्र एकमात्र जगह है।

पिछले फॉर्च्यून 500 पर मैंने काम किया था जिसमें कम से कम 25 भाषाओं में उनके ओएलटीपी डेटाबेस को मारते हुए आवेदन लिखे गए थे। उन कार्यक्रमों में से कुछ 1970 के दशक में उत्पादन में चले गए।

डेटाबेस में इस तरह की आवश्यकता को लागू करने का विकल्प यह है कि प्रत्येक एप्लिकेशन प्रोग्रामर को 100% सही तरीके से सभी या उसके हिस्से को पुन: लागू करने दिया जाए, हर बार जब तक वे कंपनी से बाहर नहीं जाते हैं, उस दिन से वे अपने दरवाजे से पहली बार चलते हैं। व्यापार।

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

क्या यह ग्रह पर सबसे बड़ा " खुद को दोहराना नहीं " है?


यह तभी लागू होता है जब कई अनुप्रयोग एक डेटाबेस का उपयोग करते हैं
जेएमडी कोलेसस

1
@JMDCoalesce जो कई वातावरणों में आम है। मुख्य ऐप, एक्सेल रिपोर्टिंग, सर्वर साइड रिपोर्टिंग, बल्क एक्सट्रैक्ट्स: यह जल्द ही जुड़ जाता है। लगभग किसी भी बैंकिंग एप्लिकेशन में क्लाइंट ऐप्स का असंख्य नाम है,
gbn

निश्चित रूप से, लेकिन सभी अनुप्रयोग बैंकिंग के लिए नहीं हैं।
जेएमडी कोलेसस

29

मैं अपने पुराने उत्तर को प्रोग्रामर से अनसाइड कर रहा हूं। क्योंकि साइट के बीच उत्तर बहुत ध्रुवीकृत लगते हैं।

मुझे पता है कि मैं यहाँ चोट की दुनिया में हूँ, लेकिन डेटाबेस में व्यावसायिक तर्क रखा क्योंकि:

  • आप व्यावसायिक बिजली उपयोगकर्ताओं को डेटाबेस तक सीधे पहुंच की अनुमति दे सकते हैं और उनके बारे में चिंता करने की चिंता नहीं कर सकते हैं (या ऐप-आधारित डेटा से कम चिंता करेंगे)
  • एक पावर उपयोगकर्ता एक नए सॉफ़्टवेयर रिलीज़ की प्रतीक्षा किए बिना नई रिपोर्ट बना सकता है।
  • आप डेटाबेस की एक कॉपी में SP / TRIGGER कोड का परीक्षण कर सकते हैं, ठीक उसी तरह जैसे आप ऐप-आधारित लॉजिक का परीक्षण करते हैं
  • आप एसक्यूएल को टेक्स्ट फ़ाइलों में स्पर्स और ट्रिगर्स बनाने के लिए रख सकते हैं (आपको टेबल / व्यू कोड के लिए वैसे भी ऐसा करना चाहिए)
  • आप व्यापार तर्क को पोर्ट किए बिना भाषाओं का मिश्रण और मिलान कर सकते हैं
  • आप हर बिट सॉफ्टवेयर को अपग्रेड किए बिना बिजनेस लॉजिक में बदलाव कर सकते हैं
  • आप ऑडिट संरचना उसी तरह से बदलते हैं जैसे आप डेटाबेस गतिविधि का ऑडिट करते हैं - लॉगिंग के माध्यम से
  • बहुत ही बेहतर सुरक्षा और बढ़िया अनाज पहुंच नियंत्रण (अधिकांश ऐप-आधारित तर्क कार्यान्वयन अपने स्वयं के सुरक्षा मॉडल का उपयोग करते हैं, इसलिए डेटा को समझौता करना बहुत आसान है। प्रतिवर्ती पासवर्ड एन्क्रिप्शन असामान्य नहीं है)
  • डेटाबेस-साइड उपयोगकर्ता सुरक्षा क्षति को कम करता है / चोरी दुष्ट एसक्यूएल कर सकता है

विपक्ष हैं: - डेवलपर्स ने धमकी दी कि जब उपयोगकर्ता कस्टम रिपोर्ट के लिए डेवलपर्स पर कम निर्भर हो जाते हैं - डेवलपर्स को एक और प्रोग्रामिंग भाषा सीखने की आवश्यकता होती है

उनमें से किसी भी एक कुशल डेवलपर के लिए मायने नहीं रखना चाहिए।

ध्यान देने वाली बात यह है कि अधिकांश उत्तर 'एप्लिकेशन लॉजिक' के संदर्भ में बात करते हैं, न कि 'व्यावसायिक तर्क' के रूप में, जैसे कि सॉफ्टवेयर एक व्यावसायिक कार्य प्रदान करने के लिए नहीं है।


1
* संग्रहित प्रोक्स / ट्रिगर एब्सट्रैक्शन का एक स्तर प्रदान कर सकते हैं जो आपको डेटाबेस में संरचनात्मक परिवर्तन करने की अनुमति देता है, बिना एप्लिकेशन कोड के सभी को बदलने के लिए। * डेटाबेस का प्रत्येक उपयोगकर्ता विश्वासपूर्वक आपके मिडलवेयर का उपयोग नहीं करेगा। * चलो, एक विदेशी कुंजी है व्यापार नियम !! * Db से सभी जाँच / अड़चनों / कोड को हटाने का अर्थ है कि यह विसंगति / भ्रष्टाचार के विरुद्ध अपनी रक्षा नहीं कर सकता है। * हर ऐप कतार-चालित लेन-देन रहित डिजाइनों के लिए कॉल नहीं करता है जैसे कि एक ईबे विकसित होने के बाद वे सफल हो गए और इसे बनाने का खर्च उठा सकते हैं। * SQL वह सब मुश्किल नहीं है, दोस्तों।
क्रेग

23

सबसे महत्वपूर्ण मुद्दा यह है कि क्या डेटाबेस के ऊपर किसी भी 'परत' को लगता है कि यह डेटा का मालिक है। कंजेरिबिलिटी और डेटा अखंडता ऐसी समस्याएं हैं जिनके लिए समाधान एक RDBMS है - कुछ एप्लिकेशन विकसित किए जाते हैं जैसे कि डेटाबेस सिर्फ उनकी व्यक्तिगत बिट बाल्टी है और निश्चित रूप से वे हर तरह से पहिया को फिर से आविष्कार करने की कोशिश कर रहे हैं, साथ ही साथ जैसे ही कुछ अन्य एप्लिकेशन उसी डेटाबेस तक पहुँचते हैं, अपूरणीय रूप से टूट जाते हैं


1
मुझे लगता है कि जो कोई भी सिस्टम को प्रायोजित करता है वह डेटा का मालिक है - उन्होंने इसके लिए भुगतान किया है। इसके अलावा, मैं डेटाबेस को हिट करने से पहले कई संगामिति समस्याओं को हल करता हूं - कई मामलों में यह बहुत आसान है।
एके

4
आप 'मैं' से अलग अर्थों में 'स्वयं' का उपयोग कर रहे हैं: मेरी बात यह है कि यदि आप डेटाबेस को हिट करने से पहले 'समसामयिक समस्याओं' को हल करते हैं, तो आपको यह भी सुनिश्चित करना होगा कि आपके डेटाबेस को हिट करने वाले केवल एप्लिकेशन हैं या उन्हें हल किया जाना है। उस स्तर पर फिर से। मैं शीर्ष मतदान के जवाब से सहमत हूं: "आपका डेटाबेस कोड [संभावना] आपके एप्लिकेशन क्लाइंट तकनीक को रेखांकित करेगा।"
जैक डगलस

17

मैंने अपने ब्लॉग में इसका जवाब लिखा । मेरा निष्कर्ष यह है, कि आवेदन में ऐसा करने से केवल एक बार स्केल नहीं होता है जब आप पूरे आवेदन को जीवन चक्र मान लेते हैं।


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

... कुछ [आपत्तियां] मैं अक्सर सुनता हूं:

  • DB में तैनात SP कोड SP वर्जन को कंट्रोल करना मुश्किल है। मुझे नहीं लगता कि यह कहने की तुलना में कोई भी ट्रुअर है, जो कि ऐप सर्वर में तैनात जावा कोड को नियंत्रित करना मुश्किल है, जो कहना है, यह बिल्कुल भी मुश्किल नहीं है। और रूबी-भूमि पर, पूरी किताबें सिर्फ इस बारे में लिखी जाती हैं कि कैसे एक विकास के माहौल से उत्पादन में अपने कोड को प्राप्त करने के लिए, ऐसा कुछ जिसके साथ कोई अन्य भाषा समुदाय संघर्ष नहीं करता है। अभी तक एक संग्रहीत प्रक्रिया को नियंत्रित करने वाला संस्करण स्पष्ट रूप से बहुत मुश्किल है।
  • संग्रहीत प्रक्रियाओं का परीक्षण करना कठिन है। यह एक अजूबा है। एक शुरुआत के लिए, एसपी दृढ़ता से टाइप किया जाता है; कंपाइलर आपको बताएगा कि क्या कोई ऐसा कोड पाथ इन या आउट है जिसका कोई मतलब नहीं है, और कम से कम ओरेकल में, आपके लिए सभी निर्भरता की गणना करेगा। तो यह आम इकाई परीक्षणों का एक सेट है जिसे आपको रूबी में बल्ले से समाप्त करने की आवश्यकता हो सकती है। OO कोड का परीक्षण करने के लिए परीक्षण परिदृश्य का प्रतिनिधित्व करने के लिए आवश्यक आंतरिक स्थिति में वस्तु के साथ छेड़छाड़ करने की आवश्यकता होती है - परीक्षण डेटा को किसी भी अलग से कैसे सेट किया जा रहा है? पीएल / एसक्यूएल और इसके अलावा अन्य उपकरणों के लिए एक टैप निर्माता है। डिबगर और प्रोफाइलर भी हैं।
  • एक संग्रहीत प्रक्रिया भाषा पूरी तरह से चित्रित भाषा नहीं है। ठीक है, हम सिर्फ संग्रहीत प्रक्रियाओं में एक संपूर्ण आवेदन लिखने की कोशिश नहीं कर रहे हैं! अधिकांश समर्पित SP भाषाओं में वे सभी आधुनिक निर्माण होते हैं जिनकी आप अपेक्षा करते हैं, और Oracle में कम से कम, आप उन सभी भाषाओं सुविधाओं के साथ जावा संग्रहित प्रक्रियाओं का उपयोग कर सकते हैं जिन्हें OO डेवलपर किसी भी भाषा में या बाहरी प्रक्रियाओं से परिचित हैं। क्या मायने रखता है जहां तर्क लागू किया जाता है - एक स्थान पर, डेटा के करीब - वास्तविक भाषा केवल एक विस्तार है। PL / SQL मूल कोड के लिए संकलित करता है और डेटाबेस के साथ इन-प्रोसेस चलाता है; इससे उच्चतर प्रदर्शन वास्तुकला नहीं है।
  • मुझे दूसरी भाषा नहीं सीखनी है। एक दूसरे के लिए अनदेखी यह किसी भी डेवलपर (विशेष रूप से एक जो उत्पादन एप्लिकेशन को संशोधित करने का प्रस्ताव करता है, जो अन्य भाषाओं में हो सकता है) में एक विशाल लाल झंडा है!) किसी भी आधुनिक वातावरण में काम करने के लिए बहुत कुछ सीखना है: एक विशिष्ट जावा दुकान में ग्रहण हो सकता है! , WebLogic, मावेन, हडसन, एंथिल, तोड़फोड़, और दूसरों की एक पूरी बहुतायत, कि आपको आवेदन कोड की एक पंक्ति लिखने से पहले सीखने की जरूरत है। एक उच्च स्तरीय एसपी भाषा का कार्यसाधक ज्ञान तुलनात्मक रूप से सीधा है, और आपकी मदद करने के लिए किसी विशेषज्ञ या डीबीए के आस-पास होने की संभावना अधिक होगी। यह उल्लेख करने के लिए कि डेवलपर पसंदीदा हाइबरनेट अपनी क्वेरी भाषा के साथ आता है ...

...


12

क्या SQL सेट लॉजिक और एप्लिकेशन ओरिएंटेड रिजल्ट फ़िल्टरिंग जैसी चीजों को करता है? SQL एक अद्भुत सेट हेरफेर भाषा है।

इसके अतिरिक्त, जैसा कि GBN ने ऊपर बताया है, SQL कोड लगभग सार्वभौमिक रूप से एप्लिकेशन कोड को रेखांकित करने वाला है।

हालांकि यह सही है कि EF या NHibernate या LinqToSql या जो भी आपको कोड को तेज़ी से उत्पन्न करने की अनुमति देगा, उनके प्रदर्शन के लायक हर प्रोग्रामर जानता है कि केवल SQL का अनुकूलन करने से डेटा पुनर्प्राप्ति का अनुकूलन होगा। RDBMS केवल SQL को समझता है, इसलिए आपको सबकुछ SQL में करना होगा, इससे पहले कि यह कहा और किया जाए। (यह मानते हुए कि हम सहमत हो सकते हैं कि TSQL और PLSQL अभी भी SQL हैं)


11

एक चोर कि लोग जरूरी चर्चा नहीं कर रहे हैं - पेशेवरों को यहां समाप्त कर दिया गया है - लागत है।

डेटाबेस सर्वर पर सीपीयू अक्सर किसी भी संगठन में सबसे महंगे सीपीयू होते हैं जब सॉफ्टवेयर लाइसेंस की लागत को पकाते हैं। इसलिए डेटा लॉजिक के लिए व्यावसायिक तर्क को आगे बढ़ाना कुछ ऐसा है जिसे विवेकपूर्ण रूप से किया जाना चाहिए, जरूरी नहीं कि समान रूप से।


7

यहाँ वह जगह है जहाँ मन की बैठक, यानी डेवलपर्स (DVs) और DBA के दिमाग अनिवार्य रूप से होने चाहिए। बिजनेस लॉजिक (बीएल) के साथ काम करना और इस तरह के डेटाबेस में संग्रहीत करने से एक प्रभाव हो सकता है जो इसके कार्यान्वयन को महिमा या भयावह बना सकता है।

RDBMS के कुछ उत्पादों के लिए, बिजनेस लॉजिक और ऑब्जेक्ट इंफ्रास्ट्रक्चर के लिए बेहतर लाइब्रेरी / टूल / API मौजूद हैं, जो कोई व्यक्ति अपने अनुप्रयोगों में जल्दी सीख और नियोजित कर सकता है। अन्य RDBMS के लिए, कोई पुस्तकालय / उपकरण / एपीआई मौजूद नहीं है।

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

वास्तव में केवल एक ही प्रश्न है: RDBMS के बावजूद, BL को डेटाबेस में संपूर्ण या आंशिक रूप से रहना चाहिए?

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

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

इस प्रकार, डेवलपर को दो लैंगुगेस में स्रोत कोड और बीएल को विकसित करने, डिबग करने और बनाए रखने के लिए चुनौती दी जाती है।

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

अब, मन की बैठक के लिए !!!

डेवलपर SP को कोड करता है और पुनरावृत्त तरीकों का उपयोग करता है। डीबीए एसपी को देखता है। डीबीए निर्धारित करता है कि एक एकल एसक्यूएल बयान डेवलपर द्वारा लिखे गए पुनरावृत्त तरीकों को बदल सकता है। डेवलपर देखता है कि DBA द्वारा सुझाए गए SQL कथन को अन्य BL- संबंधित कोड या SQL कॉल करने की आवश्यकता है जो SQL कथन के सामान्य निष्पादन योजनाओं का पालन नहीं करता है।

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

निष्कर्ष

डेटा पुनर्प्राप्ति का तरीका हमेशा डेवलपर और डीबीए दोनों शिविरों में शामिल होना चाहिए। गति और दक्षता दोनों के लिए, कोडिंग विधियों और डेटा पुनर्प्राप्ति प्रतिमानों को एक साथ काम करने के लिए हमेशा रियायतें दी जानी चाहिए। यदि स्रोत कोड को संभालने के लिए डेटा तैयार करने से पहले कोड डेटा प्राप्त करने से केवल एक बार किया जाता है, तो डीबीए को दुबला और मतलब SQL के उपयोग को निर्देशित करना चाहिए। यदि बीएल कुछ ऐसा है जो डीबीए के अनुरूप नहीं है, तो बागडोर फिर डेवलपर के हाथों में है। यही कारण है कि डीबीए को स्वयं / खुद को और परियोजना टीम का हिस्सा देखना चाहिए न कि खुद को / खुद को एक द्वीप।


4

यह डीबीए से भरी वेबसाइट पर पूछने के लिए एक अच्छा सवाल है। उम्मीद है कि अधिकांश उत्तर डेटाबेस को ACID स्थिति में रखने की दिशा में "समर्थक" होंगे, और इस प्रकार डेटाबेस में व्यावसायिक तर्क रखेंगे। :-)

मेरी राय के अनुसार, मुझे लगता है कि आपको अपने आवेदन (ओं) और डेटाबेस दोनों में व्यावसायिक तर्क को लागू करना चाहिए। इस दृष्टिकोण में अधिक समय और पैसा खर्च होगा लेकिन मुझे लगता है कि इसके परिणामस्वरूप गुणात्मक बेहतर व्यावसायिक समाधान होगा।


1
दो परतों में एक ही तर्क?
dezso

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

2
सभी बिज़नेस लॉजिक को डेटाबेस में लागू किया जाना चाहिए (ताकि 'लॉजिक' को विभाजित न करें)। सब कुछ आप आसानी से अनुप्रयोगों में जांच सकते हैं (उदाहरण के लिए जावास्क्रिप्ट में नियमित अभिव्यक्ति के साथ) डेटाबेस के लिए कम काम है (अमान्य इनपुट के मामले में)।
Ruud van de Beeten

2
+1 यह वही है जो मैं करता हूं - मैं इसे "डेटाबेस में व्यावसायिक लॉगिन लगाने और ऐप में सुविधा चेक डाल रहा हूं"
जैक डगलस

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

2

जैसा कि एडम मस्क ने कहा था, प्रदर्शन के लिए यहां पर विचार करने के लिए अधिक है। सि पि यु का उपयोग। स्मृति उपयोग।

डेटाबेस से स्पष्ट रूप से गलत चीजों को ब्लॉक करें।

  • ई-मेल पते जो कुछ बुनियादी तरीके से अनुरूप नहीं हैं, को बाहर निकालें।
  • लंबाई की जाँच करें

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

क्या आप ग्राहक या डीबी सर्वर पर गणित / प्रसंस्करण करते हैं? मेरे लिए जो जटिलता और शामिल रिकॉर्ड की संख्या पर निर्भर करता है। व्यापार तर्क वास्तव में डीबी में ही किया जाना चाहिए ताकि सब कुछ उसी तरह से व्यवहार किया जाए।
आपको वास्तव में भविष्य में खुद को सिरदर्द से बचाने के लिए डीबी को डेटा लिखने के लिए पढ़ने और संग्रहीत प्रोक्स के लिए विचारों का एपीआई बनाना चाहिए।

अपने लाभ के लिए प्रत्येक छोर की ताकत का उपयोग करें।

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