एक केंद्रीकृत रिपोर्टिंग डेटाबेस में 100 + ग्राहक डीबी से डेटा को कैसे एकीकृत किया जाए, इस बारे में सलाह की तलाश


10

मैं एक छोटा (~ 50 कर्मचारी) सास कंपनी के लिए SQL डेवलपर (डीबीए या आर्किटेक्ट नहीं) हूं। मुझे यह पता लगाने का काम सौंपा गया है कि:

  1. हमारे 100+ ओएलटीपी डेटाबेस से ऑफलोडिंग ऑपरेशनल रिपोर्टिंग
  2. उन रिपोर्ट को कई क्लाइंट डेटाबेस से डेटा के खिलाफ चलाने की अनुमति दें
  3. भविष्य में अधिक विश्लेषिकी-आधारित समाधान प्रदान करने के लिए हमारी कंपनी को स्थिति दें

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

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

लागत की कमी के कारण, हमारा समाधान SQL सर्वर मानक संस्करण में काम करना चाहिए। इसके अलावा, समाधान हमारे छोटे संगठन के भीतर समर्थन / बनाए रखने के लिए उचित होना चाहिए।

मूल विन्यास:

वर्तमान में हमारे पास 100+ व्यक्तिगत क्लाइंट डेटाबेस हैं, जो हमारे डेटा सेंटर में SQL सर्वर पर तैनात हैं, लेकिन कुछ अपने डेटा सेंटर के भीतर क्लाइंट सर्वर पर तैनात हैं जिन्हें हम रिमोट कर सकते हैं। ये सभी SQL Server 2008 R2 डेटाबेस हैं, लेकिन हम जल्द ही SQL 2016 में अपग्रेड करने की योजना बना रहे हैं।

हम डेटाबेस परियोजनाओं और dacpacs का उपयोग यह सुनिश्चित करने के लिए करते हैं कि स्कीमा सभी क्लाइंट डेटाबेसों में समान है जिसे एकीकृत किया जाएगा। हालाँकि, चूंकि हम सभी क्लाइंट को एक ही समय में नए संस्करणों में अपग्रेड करने के लिए बाध्य नहीं करते हैं, इसलिए अपग्रेड के बीच कुछ स्कीमा अंतर संभव हैं। यदि क्लाइंट A सॉफ़्टवेयर संस्करण 1.0 पर है और क्लाइंट B संस्करण 1.1 पर है तो समाधान को लचीला नहीं होना चाहिए।

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

उच्च-स्तरीय आवश्यकताएँ:

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

वर्तमान में हमारे पास अलग-अलग डेटाबेस में कुछ एसपीडी हैं जो वास्तव में एक ही अस्पताल प्रणाली का हिस्सा हैं। ये ग्राहक अपने सिस्टम में सभी एसपीडी के खिलाफ रिपोर्ट करने की क्षमता चाहते हैं।

रणनीतिक रूप से, हम अपनी आंतरिक विश्लेषण पहल का समर्थन करने के लिए अपने सभी ग्राहकों के डेटा को आसानी से एकत्र करने की क्षमता चाहते हैं। हमारी अपेक्षा यह है कि हम एकत्र किए गए परिचालन डेटा को डेटा मॉर्टस / वेयरहाउस के लिए स्रोत के रूप में उपयोग करने में सक्षम होंगे।

बहुत दूर तक सोचा:

लेन-देन प्रतिकृति ऐसा लगता है कि यह सबसे "वास्तविक समय" समाधान प्रदान करेगा। मुझे यह प्रतिक्रिया विशेष रूप से मददगार लगी, लेकिन मुझे चिंता है कि स्कीमा मतभेदों की संभावना के साथ यह हमारे लिए काम नहीं करेगा: SQL सर्वर कई-से-एक प्रतिकृति

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

SQL सेवा ब्रोकर का उपयोग करते हुए, यदि कोई पंक्ति प्रक्रिया करने के लिए संदेशों की संख्या के साथ रखने में असमर्थ थी, तो विलंबता अप्रत्याशित हो सकती है।

सीटी केवल प्रत्येक तालिका पंक्ति के लिए एक संस्करण की पहचान करता है। लेटेंसी इस बात पर निर्भर करेगी कि हम डेटा को पुनः प्राप्त करने और केंद्रीय भंडार में सम्मिलित करने के लिए प्रत्येक डेटाबेस के खिलाफ SSIS पैकेज की तरह कितनी जल्दी प्रक्रिया कर सकते हैं।

क्या हमें व्यक्तिगत रूप से प्रत्येक डेटाबेस की नकल करने पर विचार करने की आवश्यकता है और फिर विभिन्न प्रतिकृति स्रोतों से डेटा को संयोजित करने के लिए किसी प्रकार की डेटा वर्चुअलाइजेशन तकनीक का उपयोग करना चाहिए?

आपके द्वारा प्रदान की जाने वाली किसी भी सलाह या दिशा को बहुत सराहना मिलेगी।


1
आपकी (निकट) वास्तविक समय की आवश्यकता के कारण, मैं केवल कुछ संदेश कतार कार्यान्वयन (डिलीवरी गारंटी के लिए) के साथ घटना आधारित प्रसंस्करण को देखूंगा। आशा है कि यह मदद करता है
ग्रिमाल्डी

1
मैं मिश्रण में HTAP फेंक दूँगा। en.m.wikipedia.org/wiki/Hybrid_Transactional/… BIML और SSIS आम स्टोर को आबाद करने के लिए।
माइकल ग्रीन

@ Grimaldi, क्या आप इवेंट-आधारित प्रसंस्करण / संदेश कतारों या कुछ अन्य संदेश प्रौद्योगिकी को लागू करने के लिए SQL सेवा दलाल का उपयोग करने की सिफारिश करेंगे?
बंपर

सुझाव के लिए धन्यवाद, @MichaelGreen। मूल रूप से ऐसा लगता है कि HTAP हमें अपनी तालिकाओं में गैर-संकुल कॉलमस्टोर इंडेक्स (NCCI) जोड़कर OLTP और OLAP दोनों के लिए अपने मौजूदा डेटाबेस का उपयोग करने की अनुमति देगा। रिपोर्ट क्वेरीज़ NCCI का उपयोग करती हैं, इसलिए वे लेन-देन के कार्यों में हस्तक्षेप नहीं करती हैं। SQL 2016 में मानक संस्करण (SE) में HTAP समर्थन शामिल है लेकिन ऐसा लगता है कि कॉलमस्टोर कैश पूरे SQL उदाहरण में 32GB तक सीमित है। यह हमारे लिए एक मुद्दा हो सकता है क्योंकि हमारे पास एक ही उदाहरण पर दर्जनों डेटाबेस हैं। microsoft.com/en-us/sql-server/sql-server-2016-editions
bperry

1
यदि आपके सर्वर ने आपको वहां जाने की अनुमति दी है, तो कॉलमस्टोर लेकिन मेमोरी भी। मैंने सुनील अग्रवाल से हाल ही में इस बारे में बात की। शून्य विलंबता रिपोर्टिंग के लाभ के लिए एमएस का नियम अंगूठे का लगभग 3% ओएलटीपी था। अफसोस की बात है कि कोई मुफ्त लंच नहीं है; रिपोर्टिंग DB को धारण करने के लिए आप नए उदाहरण बना सकते हैं या HTAP का समर्थन करने के लिए पर्याप्त हेडरूम प्राप्त करने के लिए नए उदाहरण बना सकते हैं। मैं इस पैटर्न की वकालत नहीं कर रहा हूं। यह आपके लिए काम नहीं कर सकता है। बस आपको यह पता होना चाहिए कि यह अस्तित्व में था।
माइकल ग्रीन

जवाबों:


1

क्या हमें व्यक्तिगत रूप से प्रत्येक डेटाबेस की नकल करने पर विचार करने की आवश्यकता है और फिर विभिन्न प्रतिकृति स्रोतों से डेटा को संयोजित करने के लिए किसी प्रकार की डेटा वर्चुअलाइजेशन तकनीक का उपयोग करना चाहिए?

हाँ। आप एक ही उदाहरण पर कई सब्सक्राइबर डेटाबेस होस्ट कर सकते हैं, और फिर उनके साथ विचार कर सकते हैं या उन्हें समेकित डेटाबेस में लोड कर सकते हैं।


क्या कुछ और के अलावा उन विचारों को स्थापित करने का एक और अधिक सुंदर तरीका है ... SELECT फ़ील्ड 1, फ़ील्ड 2, फील्ड 3 फॉरम [डेटाबेस 1]। [स्कीमा]। ]। [
टेबलनेम

1

नीचे दिए गए लिंक के अनुसार आपके उपरोक्त विवरण से आपको मदद मिलेगी और मैं भी इसी परिदृश्य पर काम कर रहा हूं।

  1. 1,2,3 और जैसे डिफ़ॉल्ट मान के साथ server_id जैसे एक और कॉलम जोड़ें और इसे समग्र प्राथमिक कुंजी बनाएं।

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

यहाँ छवि विवरण दर्ज करें

http://www.sqlrepl.com/sql-server/central-subscriber-model-explained/


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

मैं 'अपडेट पब्लिशर' का उपयोग नहीं कर रहा हूँ। मैं दो हिस्सों (जैसे प्रतिकृति के दो प्रकार) में डेटाबेस को विभाजित करता हूं, विस्तृत प्रकाशक में तालिका के कुछ (प्रकाशक केंद्रीकृत ग्राहक के लिए) और कुछ मास्टर प्रकाशक (सभी प्रकाशक के लिए केंद्रीकृत ग्राहक) है ...। .मेरा केंद्रीकृत ग्राहक भी हमेशा ऑनऑब एविएबिलिटी समूह का हिस्सा है, जो रिपोर्ट सर्वर के रूप में मेरे द्वितीयक प्रतिकृति कार्य के लिए है।
गुलरेज़ खान

मुझे यकीन है कि मैं अपने समाधान को समझते हैं। मान लीजिए कि प्रकाशक A संस्करण 1 पर है और प्रकाशक B संस्करण 2 पर है। 1) आपने दोनों प्रकाशकों पर स्कीमा परिवर्तन की प्रतिकृति को बंद कर दिया है (सेटअप में replicate_ddl = 0 का उपयोग करके)। 2) संस्करण 2 में एक नया कॉलम शामिल है, इसलिए आप इसे केंद्रीय ग्राहक में मैन्युअल रूप से जोड़ देंगे। 3) प्रकाशक B (उन्नत) में तब आप मैन्युअल रूप से प्रतिकृति (sp_articlecolumn का उपयोग करके) में नया कॉलम जोड़ेंगे। प्रकाशक ए में कोई बदलाव नहीं किया गया है, क्या यह दोनों प्रकाशकों को केंद्रीय उपभोक्ता की प्रतिकृति को तोड़ने के बिना जारी रखने की अनुमति देगा?
15 अक्टूबर को अपराह्न

नीचे दिए गए लिंक पर देखें .. dba.stackexchange.com/questions/142449/…
खान

इसे भी देखें .. dba.stackexchange.com/questions/146070/…
खान

1

एक संभव वास्तुकला:

रिपोर्टिंग को डेटा वेयरहाउस आधारित समाधान के रूप में देखें।

आमतौर पर एक डेटा वेयरहाउस एक स्कीमा वाला डीबी होता है जो स्रोत प्रणालियों के आवश्यक सबसेट का प्रतिनिधित्व करता है। AdventureWorks और AdventureworksDW उस मॉडलिंग को प्रदर्शित करते हैं।

अगला, ETL: डेटा वेयरहाउस के लिए स्रोतों से डेटा ले जाना।

यहां एक संभावित कार्यान्वयन परिवर्तन ट्रैकिंग का उपयोग करना है।

सबसे पहले, एक ऐसे विचारों को लागू कर सकता है जो संस्करण में विशिष्ट हैं जो वे उपभोग करते हैं, लेकिन वे जो वापस लौटते हैं, उसके संदर्भ में एक समान हैं। उदाहरण के लिए, अगर Person.Gender 2 संस्करण में मौजूद है, लेकिन संस्करण 1 में नहीं है, तो संस्करण 1 के लिए व्यक्ति का दृश्य वापस आ सकता है, कह सकता है, संस्करण 1 के लिए रिक्त है।

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

परिवर्तन ट्रैकिंग प्रत्येक ताज़ा पर डेटा को बदलने के लिए निर्धारित करने का एक (अपेक्षाकृत) हल्का वजन प्रदान करता है।

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

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

क्या यह निश्चित रूप से आपके लिए सही है, यह कहना मुश्किल होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.