2009-05-07 8 views
12

दिया गया: एक सी # गणना इंजन जो ऑब्जेक्ट मॉडल लोड करता है, बड़ी मात्रा में संख्याओं को क्रंच करता है, और परिणामों को SQL सर्वर में कुछ विशाल मेगा-इंडेक्टेड डेटाबेस टेबल पर सहेजता है। वे टेबल वेब इंटरफेस, अन्य सॉफ़्टवेयर मॉड्यूल और SQL सर्वर रिपोर्टिंग सेवा 2005 रिपोर्टों को डेटा प्रदान करते हैं।मैं SQL सर्वर रिपोर्टिंग सेवाओं में गैर-तालिका डेटा कैसे प्राप्त करूं?

मैं इंजन के नवीनतम संस्करण में इंजन को लॉट तेज बनाने में कामयाब रहा, अब पर्याप्त तेज़ी से यह अनुरोध पर डेटा प्रदान कर सकता है - कभी-कभी डेटाबेस के लिए क्वेरी करने के लिए जितना तेज़ होता है अनुमानित संख्याएं मैं इसके बारे में बहुत खुश हूं।

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

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

लेकिन मैं एसएसआरएस में डेटा कैसे प्राप्त कर सकता हूं? मैंने थोड़ा सा शोध किया है और कुछ भी आशाजनक नहीं दिख रहा है:

  • हम एक वेब सेवा के माध्यम से डेटा प्रदान कर सकते हैं और एसएसआरएस एक्सएमएल डीपीई का उपयोग कर सकते हैं। लेकिन यह बहुत ही घृणास्पद दिखता है - क्या मैं सही हूं कि आपको अपने एसओएपी लिफाफे को खुद पार्स करना होगा ?! और यह XPath का समर्थन नहीं करता है, लेकिन एक मालिकाना XPath-y बोलीभाषा ?? हमारे रिपोर्ट लेखकों को टी-एसक्यूएल पता है, और यही वह है जो वे सबसे अच्छे हैं।
  • हमारे एपीआई को होस्ट करने के लिए एसक्यूएल सीएलआर का उपयोग करना वांछनीय नहीं है - यह एक बड़ा ऐप है और आप एप्लिकेशन ऑब्जेक्ट बनाने और लॉग इन करने के बिना कुछ भी नहीं कर सकते हैं।
  • वेब सेवा से संपर्क करने के लिए एसक्यूएल सीएलआर का उपयोग करना वेब एप्लिकेशन - यह अब तक का सबसे आशाजनक है (यह आलेख उपयोगी था http://www.simple-talk.com/sql/sql-server-2005/practical-sql-server-2005-clr-assemblies/।) क्या किसी ने इस दृष्टिकोण की कोशिश की है? क्या यह ठीक है, क्या यह बड़े डेटा सेट प्रदान कर सकता है? ओटीओएच मैं अतिरिक्त सेटअप द्वारा बंद कर दिया गया है जिसे हमें क्लाइंट डीबी सर्वर पर करना होगा।
  • किसी भी अन्य सुझाव की सराहना की जाएगी।
+0

मैंने किसी के लिए एक उपहार जोड़ा है जो मुझे एसक्यूएलसीएलआर/वेब सेवाओं के साथ इसे खींचने के बारे में अच्छा अनुभव/जानकारी/चश्मा/संख्या प्रदान कर सकता है या इस स्थिति में मदद के लिए कोई अन्य अच्छा विचार है। –

+0

हाय, क्या मैं इसे सही ढंग से समझता हूं कि रिपोर्टिंग के उद्देश्य से मुख्य रूप से एसएसआरएस द्वारा कैश टेबल का उपयोग किया जाता है? ऐसा लगता है कि रिपोर्टिंग आपके आवेदन/समाधान का एक पहलू है, लेकिन उस पहलू के कारण, यह रिपोर्टिंग के उद्देश्य से कुछ बुरा डीबी काम करने जा रहा है? –

+0

यह सही रिहाना है। रिपोर्टिंग एप्लिकेशन का एक घटक है, और गंदे टेबल केवल रिपोर्ट के लिए डेटा प्रदान करने के लिए मौजूद हैं। –

उत्तर

9

यदि मैं आपको सही ढंग से समझता हूं, तो आप गैर-SQL डेटा पर एक रिपोर्ट बना रहे हैं। आप उन्हें रिपोर्ट करने योग्य बनाने के विशिष्ट उद्देश्य के लिए तालिकाओं में डेटा संग्रहीत कर रहे हैं।

मैं दो समाधानों के बारे में सोच सकता हूं। सबसे पहले अपने सी # गणना इंजन को reporting part के साथ विस्तारित करना है। माइक्रोसॉफ्ट। रिपोर्टिंग। WinForms और माइक्रोसॉफ्ट। रिपोर्टिंग। वेबफॉर्म नामस्थान का उपयोग किसी भी डेटा स्रोत पर रिपोर्ट बनाने के लिए किया जा सकता है, न केवल SQL सर्वर। यदि अंतिम उपयोगकर्ता क्लाइंट के रूप में आपके ऐप का उपयोग करते हैं, तो आप फ्लाई पर डेटा और रिपोर्ट जेनरेट कर सकते हैं।

दूसरा एसक्यूएल सीएलआर का उपयोग करना है। आप एक रिपोर्ट के आधार के रूप में एक सीएलआर संग्रहीत प्रक्रिया का उपयोग कर सकते हैं ("exec mysp" को डेटासोर्स के रूप में दर्ज करें।) यह सीएलआर प्रक्रिया सी # कोड है, और इसमें आपके गणना इंजन को लाइब्रेरी के रूप में शामिल किया जा सकता है। यह आपको रिपोर्ट सर्वर उपयोगकर्ता इंटरफ़ेस का उपयोग करते हुए, फ्लाई पर रिपोर्ट जेनरेट करने की अनुमति देगा।

दिलचस्प सवाल और मैं आशा करती हूं कि अधिक जानकार लोगों के लिए एक बेहतर जवाब :)

+0

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

+0

क्या इसका मतलब है कि आप एसक्यूएल सीएलआर करने जा रहे हैं? – Gator

+0

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

3

मैं एक ऐसी ही स्थिति पहले से किया गया है और दोनों SSRS XML डेटा स्रोत और रिपोर्टिंग विस्तार की कोशिश की है कि Andomar का उल्लेख है प्रदान कर सकते हैं ।मेरी सिफारिश एसएसआरएस एक्सएमएल डेटा स्रोत सुविधा का उपयोग करना है। यदि वेब सेवा द्वारा लौटाई गई डेटा संरचना सरल है तो XPath भी सरल है। मुझे डीबग करना भी आसान लगता है। टाइमआउट के लिए बाहर देखने के लिए मुख्य बात है।

वेब सेवाओं का उपयोग करने के साथ अच्छी बात यह है कि उन्हें आसानी से कई अलग-अलग तकनीकों द्वारा उपभोग किया जाता है ताकि वे वैसे भी बहुत आसान हो सकें।

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

+0

+1 प्रश्न "वेब अनुप्रयोग पर किसी वेब सेवा से संपर्क करने के लिए एसक्यूएल सीएलआर का उपयोग करना" का उल्लेख है, लेकिन एक एक्सएमएल डेटा स्रोत के साथ आप एसक्यूएल सीएलआर के बिना वेब सेवा से संपर्क कर सकते हैं। – Andomar

+0

दाएं। यही वह है जिसे मैं स्पष्ट कर रहा था, स्पष्ट कर दूंगा। –

3

आप अपने डेटा को ADO.NET DataSet and use it as a Reporting Services Data Source. में लपेट सकते हैं।

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

मुझे पता है कि यह वह नहीं है जो आप करना चाहते हैं, लेकिन ऐसा लगता है जैसे यह आपको आवश्यक अमूर्तता की एक ही परत प्रदान करेगा।

+0

इस चर्चा में एक कस्टम डेटा प्रोसेसिंग एक्सटेंशन निश्चित रूप से एक नया विचार है। नमूना एक कस्टम बनाया गया ADO.NET डीपीई वर्णन करता है जो डिस्क स्थानों से निश्चित xml फ़ाइलों को पढ़ता है, वास्तविक दुनिया में बहुत व्यावहारिक नहीं है। मुझे लगता है कि मैं एक डीपीई बना सकता हूं जो एक वेब सेवा यूआरएल को इसकी कनेक्शन स्ट्रिंग के रूप में लेता है, फिर क्वेरी के रूप में पैरामीटर मानों के साथ एक विधि नाम - क्या यह सही है? –

+0

मैंने कभी इसे लागू नहीं किया है, इसलिए मैं आपको अनुभव से कोई व्यावहारिक सलाह नहीं दे सकता। कहा जा रहा है, यह उस दृष्टिकोण की तरह लगता है जो मैं लेता हूं। क्या आपके पास उपयोग करने के लिए पहले से ही एक वेब सेवा है? यदि ऐसा है, तो .NET डेटा प्रदाता (एस्क्यू) इंटरफेस के पीछे अपनी कॉल मास्किंग करने के तरीके की तरह लगता है। यदि नहीं, और आपके पास .NET लाइब्रेरी है, तो हो सकता है कि इसके एपीआई तरीकों को जोड़ना बेहतर होगा। आप एसओएपी के ऊपर की ओर से बचें और क्या नहीं। यह उन चीजों में से एक था जो मैंने अपने दिमाग के पीछे टकराया था और कभी भी व्यक्तिगत रूप से इसका उपयोग करने का मौका नहीं था। –

2

क्या आपने अपना खुद का कस्टम डेटाबेस ड्राइवर लिखने पर विचार किया है जो आपके गणना इंजन के शीर्ष पर बैठता है? इसके बाद आप रिपोर्टिंग सेवाओं को सही तरीके से इंगित कर सकते हैं। यह चीजों को तेज़ रखेगा हालांकि यह एक जटिल कार्य हो सकता है। मैंने इसे पहले मालिकाना डेटा वेयरहाउस सॉफ़्टवेयर के लिए माना है जिस पर मैं काम कर रहा था लेकिन चालक बनाने के लिए आगे नहीं बढ़ गया।

रास्ते से बढ़िया सवाल।

+0

क्रिस, निश्चित रूप से बाहर के बॉक्स के लिए इंगित करता है, लेकिन मुझे यकीन नहीं है कि अतिरिक्त कार्य कस्टम एसएसआरएस डाटा प्रोसेसिंग एक्सटेंशन लिखने, या हारून डेनियल द्वारा पोस्ट किए गए एडीओ.NET कस्टम डीपीई का उपयोग करने पर कोई लाभ प्रदान करता है। –

+0

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

+0

साथ ही पीटर ने जो कहा, मैं शर्त लगाता हूं कि आपको अन्य विधि पर प्रदर्शन लाभ से लाभ होगा। –

1

SQL CLR का उपयोग करते हुए वेब अनुप्रयोग

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

महत्वपूर्ण बातें आप की आवश्यकता होगी करने के लिए है:

-- enable CLR on the server 
sp_configure 'clr_enabled', 1 
GO 
RECONFIGURE 
GO 

-- allow your db to execute clr code marked EXTERNAL or UNSAFE 
alter database mydb set trustworthy on 

तो एक वी.एस. SQL CLR परियोजना बनाने (आप के लिए नहीं है, लेकिन उसे लागू करने और यह डिबगिंग के साथ मदद), की अनुमति स्तर सेट 'बाहरी'। यदि आप वीएस प्रोजेक्ट में "वेब रेफरेंस जोड़ें" का उपयोग करते हैं, तो आपको सीरियलाइजेशन असेंबली की पीढ़ी को चालू करना होगा और निर्माण/तैनाती के बाद इसे लोड करने के लिए असीमित बनाना होगा।

यह अभी थोड़ा सा हाथ है - ईमानदार, मैंने यह किया है - मैं बाद में कुछ और विवरण जोड़ूंगा। मैंने पिछले महीने एसक्यूएल सीएलआर पर एक बात की थी। मेरे sample code में GetFibs प्रोजेक्ट है जो एक वेब सेवा (फिबोनासी) को कॉल करता है जिसे भी शामिल किया गया है। , http://footheory.com/blogs/bennie/archive/2006/12/07/invoking-a-web-service-from-a-sqlclr-stored-procedure.aspx और http://www.codeproject.com/KB/database/SQLCLR.aspx?display=Print

यह ठीक प्रदर्शन करता है यह बड़े डेटा सेट प्रदान कर सकते हैं:

इसके अलावा यहां एक बार देख ले?

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

1

मैं ADO.NET DPE road पर निश्चित रूप से नीचे जाऊंगा। यदि आपका डेटा स्रोत वास्तविक समय में निरंतर डेटा प्रदान कर सकता है, तो यह अधिक समझ में आता है। आप खुद को 1,2 या 3 स्तरों को बचाएंगे, जो निश्चित रूप से समग्र प्रदर्शन में सुधार करेंगे। और कोड की प्रत्येक परत के रखरखाव के बारे में बात नहीं करते हैं। संख्या को क्रोन किए गए डेटा को ADO.NET डेटासेट के रूप में एक्सपोज़ करें और अपनी रिपोर्टिंग सेवाओं को सीधे पूछें, मेरी राय में सबसे अच्छा है।

1

SQL 2008 में आप एक डेटा एसएसआईएस पैकेज को डेटासोर्स के रूप में उपयोग कर सकते हैं। फ्लाई पर अपने गणना इंजन को निष्पादित करने के लिए एक एसएसआईएस पैकेज लिखें और इन-मेमोरी .NET डेटासेट (डेटा रीडरडिस्टेशन) आउटपुट करें। इसका उपयोग रिपोर्टिंग के लिए किया जा सकता है।

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