8

मैं एक बहु-किरायेदार ऐप विकसित कर रहा हूं। मैंने "साझा डेटाबेस/अलग स्कीमा" दृष्टिकोण चुना है।मल्टी टेनेंट ऐप में सभी किरायेदारों की सभी स्कीमा कैसे अपडेट करें?

मेरा विचार से डिफाल्ट स्कीमा (dbo) और जब यह स्कीमा की तैनाती, किरायेदारों स्कीमा (tenantA, tenantB, tenantC) पर एक अद्यतन करना है करने के लिए है, दूसरे शब्दों में, सिंक्रनाइज़ स्कीमा बनाने के लिए।

मैं किरायेदारों के स्कीमा को डिफ़ॉल्ट स्कीमा के साथ सिंक्रनाइज़ कैसे कर सकता हूं?

मैं एसक्यूएल सर्वर 2008

उत्तर

5

स्कीमा की संस्करण जानकारी को संग्रहीत करने के लिए आपको सबसे पहले एक टेबल या अन्य तंत्र की आवश्यकता होगी। यदि कुछ और नहीं है तो आप अपने आवेदन और स्कीमा को एक साथ जोड़ सकते हैं। गलत स्कीमा — ऐसा न करने, भ्रष्ट डेटा के खिलाफ आवेदन के एक संस्करण की तुलना में अधिक दर्दनाक कुछ भी नहीं, आदि

आवेदन को अस्वीकार या चाहिए नहीं है बंद अगर इसकी नहीं सही संस्करण — आप कुछ blowback जब इसकी सही नहीं मिल सकता है, लेकिन जब आप डेटाबेस मूल्यवान डेटा को दूषित करते हैं तो वास्तव में आपको खराब दिन से बचाता है।

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

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

बेशक आपको हमेशा डेटाबेस का बैकअप बनाना चाहिए जो एक बाहरी पहचानकर्ता संस्करण संख्या के साथ बेहतर बाहरी फ़ाइल को लिखता है ताकि आप इसे पा सकें और स्क्रिप्ट (बी) खराब होने पर इसे पुनर्स्थापित कर सकें। और आखिरकार यह ठीक करने और पुनर्स्थापित करने के तरीके को समझने की योजना बनायेगा।


मैंने देखा कि नए वीएस 2010 में कुछ प्रकार के स्कीमा अपग्रेडर टूल हैं लेकिन मैंने इसका उपयोग नहीं किया है। यह आपके लिए भी उपयोगी हो सकता है।

+0

मैं माइग्रेटर.Net या RikMigrations जैसे ढांचे का उपयोग करने में सोच रहा था। तो, मैं अपने बिल्ड सर्वर में एक ऐसा निर्माण बना सकता हूं जो अंतिम संस्करण प्राप्त करे और मेरे स्कीमा को चेक और अपडेट करने वाले कमांड को निष्पादित करे। एक समस्या जो मैं देखता हूं वह है जब एप्लिकेशन में कई किरायेदार होते हैं, तो अपडेट स्कीमा की यह प्रक्रिया धीमी और खतरनाक होगी। आपको क्या लगता है? धन्यवाद माइक –

+0

यदि आप रखरखाव विंडो के दौरान ऐप बंद कर सकते हैं तो यह सबसे अच्छा/आसान है। डेटा अपडेट इत्यादि की चिंता नहीं है। आपके पास बैक अप लेने और आपके एसक्यूएल सर्वरों के विरुद्ध माइग्रेट करने के कई उदाहरण हो सकते हैं। हमने जो किया वह एक फ्रंट दरवाजा पृष्ठ स्थापित करता था जो किसी विशेष संस्करण के उपयोगकर्ताओं को एक विशेष सीरर/पथ पर रीडायरेक्ट करता है। यदि प्रमाणीकरण का अनुरोध एडीएन में आता है तो उनके डीबी को अपग्रेड के रूप में चिह्नित किया जाता है, हम उन्हें "रखरखाव के लिए नीचे" पृष्ठ पर रीडायरेक्ट करते हैं और उन्हें ऐप पर पास नहीं करते हैं। एक बार इसके लिए बैक अप लेने के बाद, उन्हें प्रमाणीकरण से सर्वर पर नए संस्करण – MikeJ

+0

के साथ रीडायरेक्टेशन पर देखा जा सकता है। मैंने देखा कि बमर यह था कि एसपी या दृश्यों के साथ काम करने का कोई तरीका नहीं है, संभवतया क्योंकि जब कोई डीडीएल कोड निष्पादित होता है तो ये अद्यतन। हम इन सभी कलाकृतियों को छोड़ने के लिए हमारे मौजूदा स्क्रिप्ट कोड में शामिल हैं और फिर नई स्कीमा के लिए इन्हें पुनर्निर्माण करते हैं। – MikeJ

1

उपयोग कर रहा हूँ स्कीमास तक मुझे पता है सिंक्रनाइज़ करने के लिए कोई जादू आदेश नहीं है। आपको एक उपकरण का उपयोग करना होगा - या तो घर में बनाया गया या खरीदा गया (Red Gate's SQL Compare और एसक्यूएल परीक्षक देखें - आपको विभिन्न स्कीमा की तुलना करने के लिए उन्हें ट्विक करने की आवश्यकता है)।

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

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

+1

मेरा विचार इस प्रक्रिया को स्वचालित है। Red Gate's SQL जैसे प्रोग्राम का उपयोग करके, प्रक्रिया मैन्युअल हैं। धन्यवाद। –

+0

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

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