9

मुझे NHibernate और Linq2Sql पर एक संक्षिप्त रूप से देखा गया है। मैं भी इकाई फ्रेमवर्क पर एक झांक देखने का इरादा रख रहा हूं।दृढ़ता अज्ञान स्केल कर सकते हैं?

प्रश्न जो उठाया जाता है, जब मैं इन ओआरएम के बारे में बात करता हूं तो "वे स्केल नहीं कर सकते", तो क्या वे कर सकते हैं? Google से मुझे लगता है कि वे अच्छी तरह से स्केल करने में सक्षम हैं, लेकिन आखिरकार मुझे लगता है कि भुगतान करने की कीमत होनी चाहिए, क्या यह एक समृद्ध सरल व्यापार परत के लिए भुगतान करने लायक है।

+0

दृढ़ता/ओआरएम स्केल करके आपका क्या मतलब है? –

+0

हाहा, यह सवाल चट्टानों –

+0

तो हमारे वेब ऐप में बाधा डेटाबेस है, जिसके परिणामस्वरूप हमारे व्यापार तर्क को डेटाबेस के लिए सबसे अच्छा क्या बनाया गया है। दृढ़ता अज्ञानता, डीबी की कीमत पर एक समृद्ध अधिक लचीली व्यावसायिक परत प्रदान करेगी। स्केलिंग के दौरान आप दृढ़ता से अनजान हो सकते हैं? – danswain

उत्तर

5

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

  • लेज़ी लोड हो रहा है - चूंकि यह आलसी लोड हो रहा है समर्थन करता है, तो आप किसी भी unnessecary आइटम लोड करने से बच सकते हैं। बेशक आपको एन + 1 समस्या का चयन करने की आवश्यकता है, हालांकि इसे रोकने के लिए सिस्टम में चीजें हैं।
  • उत्सुक लेटिंग - ऑब्जेक्ट्स को उत्सुकता से लाने के कई तरीके हैं जिन्हें आपको एसक्यूएल के लिए अतिरिक्त यात्रा से बचने की अनुमति हो सकती है।
  • द्वितीय स्तर कैश - nHibernate को दूसरे स्तर के कैश के लिए समर्थन है जिसका उपयोग डीबी को यात्रा को कम करके स्केलेबिलिटी बढ़ाने के लिए किया जा सकता है। विभिन्न बैकिंग प्रदाता उपलब्ध हैं जो आपको कुछ लचीलापन देते हैं।
  • अपना स्वयं का एसक्यूएल लिखें - nHibernate में आप संग्रहित प्रक्रियाओं को कॉल कर सकते हैं, या SQL क्वेरी इनलाइन प्रदान कर सकते हैं जो आपकी इकाइयों को वापस कर देगा। जब आप जेनरेट एसक्यूएल इसे काट नहीं देता है तो यह आपको अपने स्वयं के एसक्यूएल का उपयोग करने देगा। उदाहरण के लिए एक पुनरावर्ती क्वेरी का उपयोग कर एक स्वयं जुड़ने वाले पेड़ को लोड करना उत्सुक है।

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

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

+0

इससे मुझे लगता है कि ओआरएम पर्याप्त चालाक है कि वे कुछ परिस्थितियों में स्केलिंग को आसान बना सकते हैं और लचीलापन अनुकूलित करने के लिए है। क्या उस साइट का निर्माण करते समय डिफ़ॉल्ट विकल्प होना चाहिए जिसे आप स्केल करना चाहते हैं? – danswain

+0

मुझे लगता है कि स्केलेबिलिटी के बावजूद वे डिफ़ॉल्ट विकल्प हैं क्योंकि वे विकास को सरल बनाते हैं और कोड लिखने और बनाए रखने की मात्रा को कम करते हैं। मैं अभी भी एक ORM मैन्युअल रूप से तेज़ कोड लिख सकता हूं; हालांकि, मुझे इसे बनाने और बनाए रखने में लंबा समय लगता है – JoshBerke

2

Hibernate Shardsported to NHibernate किया जा रहा है के कार्यान्वयन, जो क्षैतिज स्केलिंग के लिए अनुमति देगा बाहर स्वैप है।

शेर्डिंग को लागू करने के लिए this one जैसे कुछ बहुत ही अच्छे हैक भी हैं।

तो उत्तर हाँ है, एनएचबेर्नेट एक निरंतर-अज्ञानी और पूरी तरह से पारदर्शी तरीके से स्केल कर सकता है।

1

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

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