5

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

  • डेटाबेस पूरी तरह से सामान्यीकृत है?
  • कौन सा ओआरएम (linq2sql, इकाई ढांचा) इस परियोजना के लिए उपयुक्त है?
  • क्या मुझे संग्रहित प्रक्रियाओं, डीबी फ़ंक्शंस, ट्रिगर्स इत्यादि का उपयोग करना चाहिए?

उत्तर

4

किया जाए या नहीं डेटाबेस सामान्यीकृत है कुछ आप जरूरत को जानते हैं और जवाब देने के लिए की जरूरत है!

ओआरएम के लिए: यह वास्तव में डेटा और इसकी संरचना के प्रकार पर निर्भर करता है।

लिंक-टू-एसक्यूएल एक बहुत ही सरल ओआरएम है जो मूल रूप से डोमेन ऑब्जेक्ट्स के लिए तालिकाओं का 1: 1 मैपिंग करता है। जब तक आपको किसी और चीज की आवश्यकता नहीं है - यह ठीक है। लिंक-टू-एसक्यूएल अब सक्रिय रूप से विकसित नहीं किया जा रहा है, इसलिए यह एक कमी हो सकती है। इसके अलावा, संग्रहित प्रो समर्थन थोड़ा सीमित है।

इकाई फ्रेमवर्क (कम से कम .NET 4 में) बहुत अच्छा है और माइक्रोसॉफ्ट में पसंद का वर्तमान ओआरएम है - इसे सक्रिय रूप से विकसित किया जा रहा है, इसमें काफी समर्थन है, बहुत लचीलापन है। यह डेटाबेस-प्रथम, मॉडल-प्रथम और कोड-प्रथम विकास शैलियों की पेशकश करता है, यह पीओसीओ ऑब्जेक्ट्स और सेल्फ-ट्रैकिंग इकाइयों का समर्थन करता है, और संग्रहीत प्रोसेस के साथ बहुत अच्छी तरह से एकीकृत है (आप INSERT, UPDATE, प्रत्येक एकल पर हटाए गए संग्रह के लिए एक संग्रहित प्रो को परिभाषित कर सकते हैं इकाई, अगर आप ऐसा करना चाहते हैं)। यह मेरी पहली पसंद होगी।

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

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

1

@Xulfee, यह एक काफी व्यापक प्रश्न है और बहुत कुछ आपके प्रोजेक्ट की प्रकृति पर निर्भर करता है। आपके द्वारा संदर्भित दृष्टिकोण समग्र वास्तुकला के कई पहलुओं को प्रभावित करते हैं। उदाहरण के लिए:

क्या डेटाबेस पूरी तरह से सामान्यीकृत है?
डाटाबेस सामान्यीकरण आमतौर पर आपके वैचारिक मॉडल की जटिलता की समस्या से निपटने में सहायता करता है। जब ठीक से (नोट मैंने नहीं कहा, "पूरी तरह से") सामान्यीकृत, आपका मॉडल काफी सीधे आगे होना चाहिए और डेटाबेस के उपभोक्ता (डेवलपर्स, आपकी बीआई टीम, डोमेन विशेषज्ञ इत्यादि) को एक अच्छा विचार प्राप्त करने में सक्षम होना चाहिए व्यवसाय की समस्याएं जिनके साथ आपके डेटाबेस से संपर्क किया जा रहा है। ऐसा कहा जा रहा है कि, सामान्यीकरण काफी बड़ी रिपोर्टिंग और विश्लेषण समस्या का कारण बन सकता है। एक बड़े, काफी सामान्यीकृत डेटाबेस के खिलाफ एक रिपोर्ट के लिए एक प्रश्न लिखते समय, आप कई तालिकाओं में शामिल होने से प्रदर्शन समस्याओं को पेश कर सकते हैं। snowflake schemas दर्ज करें। तो, आपके प्रश्न के लिए: यह निर्भर करता है। आप रिपोर्टिंग आवश्यकताओं क्या कर रहे हैं? औसत पर आपको कितने लेन-देन की आवश्यकता है? आपका वैचारिक मॉडल कितना जटिल है?क्या आप डेटाबेस को छोटे मॉडल में तोड़ने में सक्षम हैं, जो एक बड़े से अधिक हैं?

कौन सा ORM (linq2sql, इकाई ढांचा) इस परियोजना के लिए उपयुक्त है?
फिर, एक ओआरएम एक उपकरण है। आपको खुद से पूछना चाहिए कि आप किस विशिष्ट नौकरी को पूरा करने की कोशिश कर रहे हैं? एक ओआरएम (या पहली जगह में ओआरएम का उपयोग करने में) का विकल्प एक निर्णय है कि मैं आपको सलाह देता हूं कि आप काफी जल्दी करें क्योंकि यह प्रदर्शन से लेकर विकास टीम समेकन तक सबकुछ प्रभावित कर सकता है। वहाँ वहाँ बाहर महान विकल्पों में से एक बहुत कुछ कर रहे हैं:

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

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

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

संबंधित मुद्दे