मुझे संग्रहीत प्रक्रियाओं का उपयोग कब करना चाहिए?


19

यदि मेरे पास कोड में मेरे सभी व्यावसायिक तर्क हैं और एंटिटी फ्रेमवर्क का उपयोग करते हैं, तो मैं किन परिस्थितियों में (यदि कोई हो) बेहतर होगा कि मैं सभी कोड में रखने के बजाय, किसी व्यवसाय तर्क को किसी संग्रहीत प्रक्रिया में स्थानांतरित करना बेहतर होगा ?

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

अगर इससे कोई फर्क पड़ता है, तो मैं MSSQL और Entity फ्रेमवर्क का उपयोग कर रहा हूं।


ये वे परिस्थितियाँ हैं जहाँ मैंने पहले संग्रहीत प्रक्रियाओं का उपयोग किया है:

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

इस प्रश्न को पूछने से पहले मैंने अन्य पदों को देखा:


4
आपकी दोनों स्थितियाँ संग्रहीत प्रक्रियाओं को लिखने के लिए पूरी तरह से वैध कारण हैं। क्या आप पूछ रहे हो रहे हैं कि वे वैध क्यों हैं?
रॉबर्ट हार्वे

@RobertHarvey मैं सुनिश्चित कर रहा था कि वे वैध थे और अन्य परिदृश्यों या कारणों की तलाश में थे कि आप एक अपवाद क्यों बना सकते हैं और कोड में रखने के बजाय एक संग्रहीत कार्यविधि लिख सकते हैं।
एमी बैरेट

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

जवाबों:


10

आपके पास पहले से ही अच्छे परिदृश्यों की एक जोड़ी है।

इसके कई अन्य कारण भी हैं। EF वास्तव में CRUD में और बहुत सीधे फॉरवर्ड रिपोर्टिंग में अच्छा है। कभी-कभी, हालांकि, ईएफ सही उपकरण नहीं है। एंटिटी फ्रेमवर्क के साथ संयोजन में संग्रहीत प्रक्रियाओं का उपयोग करने पर विचार करने के लिए कुछ अन्य कारण (परिदृश्य) शामिल होंगे:

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

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


धन्यवाद जोएल, आपने कुछ अन्य परिदृश्यों का उल्लेख किया है जिनके बारे में मैंने नहीं सोचा था।
एमी बैरेट

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

1
@RipalBarot इसमें कोई सवाल नहीं है कि काम के बोझ के साथ जो चल रहा है (अधिक उपयोगकर्ता, अधिक जटिल प्रश्न) आपके डेटाबेस सर्वर पर अधिक मांग होगी। हालाँकि, एक बात का ध्यान रखें, यह है कि इकाई फ्रेमवर्क जैसे ORM के बजाय संग्रहीत कार्यविधियों का उपयोग करने से अक्सर कार्यभार (तुलनात्मक रूप से) कम हो सकता है क्योंकि संग्रहीत प्रक्रियाओं में पहले से तैयार क्वेरी योजनाएँ हो सकती हैं। जब ओआरएम से एक क्वेरी आती है, तो डीबीएमएस को अक्सर वर्कआउट करने के साथ शुरुआत करनी होती है। जब आप समतुल्य संग्रहित प्रक्रिया को कहते हैं, तो डेटाबेस पहले से ही जानता है कि इसे कुशलता से कैसे पूरा किया जाए।
जोएल ब्राउन

2

शायद यह समझ में आता है, सवाल को चारों ओर मोड़ने और usecases खोजने के लिए जहां केवल संग्रहीत प्रक्रियाएं कर सकती थीं , आप क्या हासिल करना चाहते हैं। शायद वास्तव में उपयोग के मामले हैं, जहां संग्रहीत प्रक्रियाएं बाहर खड़ी हैं।

अगर इससे कोई फर्क पड़ता है, तो मैं MSSQL और Entity फ्रेमवर्क का उपयोग कर रहा हूं।

एफई पर मेरे ज्ञान सीमित है, लेकिन जहाँ तक मैं देख सकते हैं, एफई (है बस ) किसी भी अन्य की तरह एक ORM; और सौभाग्य से उपयोग करने में सक्षम है कच्चे SQL

अगर मैं आपके दो प्रमुख बिंदु ले लूँ:

एक जटिल रिपोर्ट जिसे चलने में मिनट लग रहे थे (यह एक वेब ऐप में एक पेज था)। मैंने पाया कि मैं SQL लिख सकता हूं जो LINQ प्रदान करने की तुलना में बहुत अधिक कुशल था (केवल सेकंड चलने के लिए)।

एक रिपोर्ट करते समय LINQ / EF कम पड़ रहा था। और जैसा कि आपने देखा, SQLORM का उपयोग करने की तुलना में अधिक तेज़ था । लेकिन यह केवल संग्रहीत प्रक्रियाओं के पक्ष में या केवल बोलता है सब कुछ के लिए ओआरएम का उपयोग करने के खिलाफ है ?

आपकी समस्या स्पष्ट रूप से SQL के साथ हल हो सकती है । यदि वह क्वेरी संग्रहीत थी और आपके कोडबेस में नियंत्रित संस्करण - आपके उदाहरण के अनुसार - कम से कम कोई अंतर नहीं है

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

यहाँ एक ही बात: एक साधारण कनेक्शन स्ट्रिंग और अद्यतन और आपकी समस्या है। यह समस्या एक ORM के साथ भी हल की जा सकती है : बस दूसरे DB के सामने एक webservice का उपयोग करें और एक ही compartementalization / अलगाव हासिल किया जाता है।

इसलिए यहां देखने के लिए कुछ नहीं है।

कुछ अन्य बिंदुओं को देखते हुए:

आपके पास काम की जटिल इकाइयाँ हैं, जिनमें शायद कई तालिकाओं को शामिल किया गया है, जिन्हें आसानी से EF की सुविधाओं का उपयोग करके लेनदेन में नहीं लपेटा जा सकता है।

लेकिन SQLऐसा कर सकते हैं। यहां कोई जादू शामिल नहीं है।

आपका डेटाबेस EF के साथ अच्छा नहीं खेलता है

फिर: उपयुक्त होने पर ईएफ का उपयोग करें ।

आपको उन डेटा के साथ काम करना होगा जो लिंक किए गए सर्वर के साथ सर्वर की सीमाओं को पार करते हैं

मैं नहीं देखता, कैसे संग्रहीत कार्यविधियाँ मदद करती हैं। इसलिए मैं संग्रहीत प्रक्रियाओं का लाभ नहीं देख सकता हूं ; लेकिन शायद किसी ने उस पर कुछ प्रकाश डाला।

आपके पास बहुत जटिल डेटा पुनर्प्राप्ति परिदृश्य हैं जहां पर्याप्त प्रदर्शन सुनिश्चित करने के लिए "नंगे धातु" SQL की आवश्यकता है

दोबारा: " ईएफ की सीमाएं "।

आपके आवेदन में एक मेज पर पूर्ण सीआरयूडी की अनुमति नहीं है लेकिन आपके आवेदन को एक सुरक्षा संदर्भ के तहत चलाने की अनुमति दी जा सकती है जो आपके सर्वर पर भरोसा करता है

ठीक है। मैं शायद साथ जाता हूं

अब तक केवल एक आधा बिंदु संग्रहीत प्रक्रियाओं के पक्ष में बनाया गया था।


शायद प्रदर्शन विचार हैं, जो संग्रहीत प्रक्रियाओं के पक्ष में बोलते हैं।

1) स्टोरेज क्वेरी में एक साधारण का लाभ है संग्रहित प्रक्रिया को कॉल का लाभ होता है जो जटिलता को घेरता है। चूंकि क्वेरी प्लानर क्वेरी को जानता है, इसलिए इसे अनुकूलित करना "आसान" है। लेकिन बचत वर्तमान परिष्कृत क्वेरी प्लानर _minimal के साथ है।

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

2) फिर भी यह भंडारण के लिए तर्क दिया गया था जटिल डीबी में प्रश्नों को । विचार करने के लिए दो चीजें हैं:

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

b) यदि क्वेरी में समय लगता है, तो किसी संग्रहीत प्रक्रिया की छोटी गति की जीत से परेशान क्यों हैं।

tl; डॉ

कुछ भी सीधे खिलाफ नहीं बोलता संग्रहीत प्रक्रियाओं के । तो संग्रहीत प्रक्रियाओं का उपयोग करना ठीक है - अगर यह आपको खुश करता है।

लेकिन दूसरी ओर: मैं एक उचित उपयोग के मामले की कल्पना नहीं कर सकता, जो असमान रूप से बोलता है ।

मुझे संग्रहीत प्रक्रियाओं का उपयोग कब करना चाहिए?

उचित उत्तर है: जब भी आप चाहें । लेकिन अन्य विकल्प भी हैं।


0

आपके विशिष्ट मामले के लिए, चूंकि आप इकाई ढांचे का उपयोग कर रहे हैं, किसी को संग्रहीत प्रक्रियाओं का उपयोग करने पर विचार करना चाहिए जब इकाई रूपरेखा किसी आवश्यकता या चिंता को पूरा करने में विफल हो जाती है।

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

लेकिन वहाँ एक किनारे का मामला हो सकता है जहां इकाई ढांचा कम हो जाता है और आपकी आवश्यकताओं को पूरा नहीं कर सकता है। इस मामले में एक संग्रहीत प्रक्रिया या पैरामीटर की गई क्वेरी का उपयोग करके SQL हाथ से लिखेगा और फिर उस संग्रहीत कार्यविधि / प्रोग्राम को सीधे कॉल करने के लिए इकाई फ्रेमवर्क का उपयोग करेगा।

इसलिए, मैं कुछ भी संग्रहीत प्रक्रिया में नहीं ले जाऊंगा, जब तक कि जिस फ्रेमवर्क को नियोजित किया जा रहा है वह आवश्यकता को पूरा न कर सके।

मुझे लगता है कि सबसे खराब चीज यह हो सकती है कि एक इकाई ढांचे का उपयोग करने के लिए धोखा देता है और फिर सभी संग्रहीत प्रक्रियाओं को लिखता है। अब एक अतिरिक्त परत है जो कोई मूल्य नहीं जोड़ता है।


100% अंतिम पैराग्राफ से सहमत हैं
इवान

0

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

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

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

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

जब तक आप अपने ऐप में सभी कार्यक्षमता प्राप्त नहीं कर सकते, तब तक कुछ तदर्थ अनुरोधों को लिखना आसान होता है। हम इससे नफरत करते हैं। हम पीछे धकेलते हैं, लेकिन शो को आगे बढ़ना चाहिए।


0

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

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

संपादित करें: जब डेवलपर्स मुझसे व्यवसाय / डेटा एक्सेस लॉजिक के बारे में पूछते हैं, तो मैं कहता हूं कि डेटा के बारे में व्यापार तर्क व्यवहार और बातचीत कैसे करता है, जबकि डेटा एक्सेस लॉजिक इस बारे में है कि डेटा कैसे संग्रहीत और पुनर्प्राप्त किया जाता है।

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

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

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


2
आप व्यावसायिक तर्क और डेटा एक्सेस लॉजिक को कैसे परिभाषित करेंगे ?
एमी बैरेट


@RobertHarvey लिंक के लिए धन्यवाद। क्या डेटा एक्सेस लेयर डेटा एक्सेस लॉजिक के समान है? मैं पूछता हूं कि डेटा एक्सेस लेयर में बहुत वास्तविक तर्क शामिल नहीं हैं - बस साधारण CRUD ऑपरेशन।
एमी बैरेट

@AmyBarrett: खैर, कभी-कभी आप डेटा एक्सेस लेयर में कस्टम तरीके लिखते हैं, इसलिए यह हमेशा CRUD नहीं होता है।
रॉबर्ट हार्वे

@RobertHarvey हालांकि उन कस्टम तरीकों का व्यापार तर्क परत में नहीं होगा?
एमी बैरेट

-4

मुझे लगता है कि यहां तीन मुद्दे हैं।

  1. SQL में व्यावसायिक तर्क खराब है। भले ही यह तेजी से अलग-अलग चलता हो, लेकिन यह पैमाना नहीं है।

  2. त्रैमासिक SPROCs हमेशा एक अमूर्त परत के रूप में सभी डेटा एक्सेस के लिए उपयोग किया जाना चाहिए। उपभोग अनुप्रयोगों को प्रभावित किए बिना प्रदर्शन या अन्य डलाटियर परिवर्तनों को पेश करने के लिए एक डीबीए को सक्षम करना।

  3. EF sprocs के साथ अच्छा नहीं खेलता है। आप Linq की गतिशील क्वेरी पीढ़ी से हटकर बहुत सारी 'अच्छी' सुविधाएँ और उत्पादकता लाभ खो देंगे।

तो मेरी समग्र सलाह होगी

  • सभी SQL प्रश्नों के लिए SPROCs का उपयोग करें,

  • व्यापार तर्क या उन में किसी भी प्रकार के छोरों को मत डालो,

  • EF का उपयोग न करें।


क्योंकि सभी SQL db सर्वर पर चलती है, आप केवल अतिरिक्त गणना बॉक्स की बजाय अतिरिक्त dbs के साथ स्केल कर सकते हैं।
इवान

1
समझा। लेकिन फिर बिंदु # 1 विशुद्ध रूप से दो प्रदर्शन मुद्दों के बीच एक व्यापार बंद के बारे में है। लेकिन ऐसे समय होंगे जब SQL समाधान प्रदर्शन के मामले में एक स्पष्ट जीत है, इसलिए मैं यह नहीं देखता कि इस आधार पर इसे स्पष्ट रूप से "बुरा" कैसे माना जा सकता है।

1
आप एक webservice है जो एक गणना करता है कहते हैं। आप इसे कोड में या sql में कर सकते हैं। sql एक गणना के सिर से सिर तक तेजी से होता है। लेकिन जब सेवा को एक बहुत सस्ता और एक दूसरा, तीसरा, चौथा .. बॉक्स जोड़ने के लिए अधिकतम किया जाता है, तो बॉक्स पर वेबस्पे चल रहा होता है, लेकिन एक दूसरे प्रतिकृति डेटाबेस को जोड़ने के लिए कठिन और महंगा होता है
इवान

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

3
यह बुरी सलाह है, कुल मिलाकर। डेटा एक्सेस के लिए बहुत सारे विकल्प हैं जिनके पास हाथ-कोडिंग संग्रहीत प्रक्रियाओं पर फायदे हैं और बस भी प्रदर्शन करते हैं। आप ईएफ से सीधे स्पोक्स चला सकते हैं; वास्तव में, आप EF से सीधे किसी भी sql क्वेरी को चला सकते हैं । कुछ व्यावसायिक तर्क डेटाबेस सर्वर पर बेहतर तरीके से चलते हैं, इसलिए आप स्पष्ट रूप से यह नहीं बता सकते कि यह वहां निषिद्ध है। ऑब्जेक्ट रिलेशनल मैपर्स एक 80% उपकरण हैं; वे कभी भी आपके डेटा एक्सेस प्रक्रियाओं को पूरी तरह से बदलने के लिए नहीं थे। संग्रहीत कार्यविधियों का उपयोग उनके लिए क्या किया जाना चाहिए: 20% जो एक ORM अच्छा नहीं करता है।
रॉबर्ट हार्वे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.