2009-01-13 12 views
12

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

+0

CLR SSISDB तैनाती है, जो काफी कम आरडीपी खातों, फाइल सिस्टम के प्रबंधन और कम सही आवश्यकताओं, रखरखाव योजनाओं के अंदर बैकअप विरासत, TDE के माध्यम से पूर्ण पैकेज एन्क्रिप्शन के माध्यम से निष्पादन समय समीक्षाएँ, सफलता/असफलता/ईटीए प्रवेश, सुरक्षा को बढ़ाता है सक्षम बनाता है एसएसआईएसडीबी के पर्यावरण खंड के माध्यम से एसएसआईएस पैकेज तैनाती और रखरखाव के कुछ भी नहीं कहने के लिए और एसएसआईएस में कई सी # कार्यों की कमी के लिए सीएलआर की आवश्यकता है। यदि आप उचित एसएसआईएस तैनाती या सी # चलाने की योजना बना रहे हैं, तो एसएसआईएसडीबी बनाते समय सीएलआर सक्षम होना आवश्यक है। –

उत्तर

17

मैं एक अच्छा उदाहरण दूंगा: सीएलआर ने RegEx ऑब्जेक्ट में बनाया है, जो SQL सर्वर में गंभीर रूप से कमी है। अब रेगेक्स-आधारित सत्यापन बाधाओं/मरम्मत करने के लिए कार्यों को लिखना मुश्किल है।

+0

यदि आप एक हाथ से जानते हैं तो मुझे इस तरह के एक उदाहरण के लिए एक लिंक पसंद आएगा। –

+2

http://weblogs.sqlteam.com/jeffs/archive/2007/04/27/SQL-2005- नियमित- एक्सप्रेशन-Replace.aspx –

8

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

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

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

कोई भी टी-एसक्यूएल कोड के लिए सुलभ कार्यों को परिभाषित करने के लिए सीएलआर एकीकरण का उपयोग कर सकता है। कुछ मामलों में ये टी-एसक्यूएल कार्यों की तुलना में तेज़ और अधिक मेमोरी कुशल हो सकते हैं। Wrox press book on CLR integration कुछ गहराई में इस पर चर्चा करता है।

6

आप भी उदाहरण सकते हैं एक SQLCLR विधि से एक बाहरी वेब सेवा कहते हैं - T-SQL में वास्तव में संभव नहीं :-)

मार्क

+0

किसी बाहरी सेवा में अवरुद्ध कॉल डालना जो डेटाबेस में उपलब्ध हो या न हो कोड .. क्या संभवतः गलत हो सकता है? – ConcernedOfTunbridgeWells

+0

@ConcernedOfTunbridgeWells यह अवरुद्ध नहीं है क्योंकि अधिकांश विश्वास करने के लिए नेतृत्व कर रहे हैं। ** एसक्यूएल सर्वर और सीएलआर कैसे काम करते हैं ** [सीएलआर होस्टेड पर्यावरण] के अनुभाग [https://msdn.microsoft.com/en-us/library/ms131047.aspx#Anchor_3) कहते हैं (हल्के ढंग से संपादित): " .NET कोड SQL सर्वर में preemptively चलाता है।एसक्यूएल सर्वर उन धागे को पहचान और रोक सकता है जो काफी समय तक नहीं पहुंचे हैं। एसक्यूएल सर्वर "रनवे" सीएलआर धागे की पहचान कर सकता है, अपनी प्राथमिकता का प्रबंधन कर सकता है, और निलंबित कर दिया और उन्हें कतार में वापस रख सकता है। रनवे के रूप में बार-बार पहचान की गई थ्रेड को किसी निश्चित अवधि के लिए चलाने की अनुमति नहीं है। " –

2

SQLCLR/एसक्यूएल सर्वर के भीतर CLR एकता सिर्फ एक और समस्या है मदद करने के लिए कुछ का समाधान उपकरण (सभी नहीं) है। कुछ चीजें हैं जो शुद्ध टी-एसक्यूएल में क्या किया जा सकता है उससे बेहतर है, और कुछ चीजें हैं जो केवल SQLCLR के माध्यम से की जा सकती हैं। मैंने SQL सर्वर सेंट्रल, Stairway to SQLCLR Level 1: What is SQLCLR? (वहां लेख पढ़ने के लिए नि: शुल्क पंजीकरण की आवश्यकता है) के लिए एक लेख लिखा है, जो इस प्रश्न को संबोधित करता है। मूल बातें हैं (विवरण के लिए जुड़ा हुआ लेख देखें):

  • स्ट्रीमिंग टेबल-वैल्यूड कार्य (sTVF)
  • गतिशील एसक्यूएल (कार्य के अंदर) के बाहरी संसाधन के लिए
  • बेहतर उपयोग/बदलें xp_cmdshell
    • डेटा पास करना आसान है
    • परिणाम सेट के कई कॉलम प्राप्त करना आसान है
    • कोई बाह्य निर्भरता (उदाहरण के लिए 7 ज़िप।exe) प्रतिरूपण
    • के माध्यम से
    • बेहतर सुरक्षा
  • बहु धागा करने की क्षमता
  • (कार्य भीतर हैंडलिंग त्रुटि)
  • कस्टम समुच्चय
  • कस्टम प्रकार
  • संशोधित राज्य (एक समारोह भीतर और बाहर OPENQUERY/OPENROWSET)
  • एक संग्रहीत प्रक्रिया निष्पादित करें (केवल पढ़ने के लिए; एक समारोह के भीतर और OPENQUERY/0 के बिना)
  • प्रदर्शन (ध्यान दें: इस सभी मामलों में नहीं अर्थ है, लेकिन प्रकार और ऑपरेशन की जटिलता)
  • आउटपुट को कैप्चर कर सकते हैं पर निर्भर करता है निश्चित रूप से कुछ मामलों में (अर्थात् एसएसएमएस में संदेश टैब को क्या भेजा जाता है) (उदा। PRINT और RAISERRORगंभीरता = 0 से 10) - मैं इस आलेख में इस उल्लेख का उल्लेख करना भूल गया ;-)।

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

यदि किसी भी कोड को लिखने के बिना इन क्षमताओं में से कुछ को देखने में दिलचस्पी है, तो SQL# का मुफ्त संस्करण (जिसमें से मैं लेखक हूं) में RegEx फ़ंक्शन, कस्टम एग्रीगेट्स (यूडीए), कस्टम टाइप (यूडीटी), आदि

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