वैसे मैं इसे प्राप्त नहीं कर सकता, लेकिन मैं इसका जवाब देने की कोशिश करता हूं।
आपने कहा कि आपको एक उच्च प्रदर्शन समाधान की आवश्यकता होती है जो अक्सर चलता है (न्यूनतम सभी 2 मिनट) और आपको एक अच्छे दृष्टिकोण की आवश्यकता होती है जो बिना लॉक किए तेजी से होना चाहिए। लेकिन आपको ब्लैकबॉक्स सिस्टम नहीं चाहिए।
एक ब्लैकबॉक्स सिस्टम के बजाय, जिसका उपयोग अच्छे परिणामों के साथ लाखों इंस्टॉलेशन पर किया जाता है, आप पहिया को फिर से आविष्कार करने और अपना समाधान बनाने की कोशिश करते हैं? हम्म, थोड़ा अजीब लगता है।
वास्तव में ये मेरे सुझाव हैं।
- यदि आपने कहा है कि आप इसका उपयोग नहीं करेंगे तब भी प्रतिकृति । यह काफी आसान और सबसे अच्छा समाधान है जिसका आप इसके लिए उपयोग कर सकते हैं। प्रतिकृति सेटअप करने के लिए आसान है, तेजी से नकल और आप पहिया फिर से आविष्कार करने की जरूरत नहीं है। अगर तुम सिर्फ ताला के बारे में अजीब है, तो आप स्थापित करने के लिए कोशिश कर सकते हैं
ISOLATION LEVEL
करने के लिए READ_COMMITTED_SNAPSHOT
। आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं । यह आपके tempdb के एक हिस्से का उपयोग करेगा, लेकिन आपकी तालिका हमेशा पढ़ी जाती है- और लिखने योग्य और प्रतिकृति पृष्ठभूमि में काम कर सकती है।
नीचे दिए गए उदाहरण देखें:
ALTER DATABASE yourDatabase SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE yourDatabase SET READ_COMMITTED_SNAPSHOT ON
- सीडीसी (चेंज डेटा कैप्चर) भी एक समाधान हो सकता है। लेकिन इस तरह आपको अपने दम पर लगभग सब कुछ बनाने की जरूरत है। और मैंने ऐसा अनुभव किया है जो
CDC
कुछ परिस्थितियों में एक नाजुक चीज हो सकती है। CDC
एक देखे गए तालिका पर सभी डेटा कैप्चर करेंगे (आपको प्रत्येक देखे गए तालिका को मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता है)। बाद में आपको पहले और बाद में मान मिलेगा INSERT
, UPDATE
या DELETE
। CDC
समय की अवधि के लिए उन सूचनाओं को वापस रखेगा (आप इसे अपने दम पर निर्दिष्ट कर सकते हैं)। दृष्टिकोण CDC
कुछ तालिकाओं पर उपयोग करने के लिए हो सकता है जिन्हें आपको देखने और मैन्युअल रूप से उन परिवर्तनों को दूसरे डेटाबेस में दोहराने की आवश्यकता है। वैसे, CDC
हुड के तहत SQL सर्वर प्रतिकृति का भी उपयोग करता है। ;-) आप यहाँ इसके बारे में अधिक पढ़ सकते हैं ।
चेतावनी: -चार्ज के CDC
बारे में पता नहीं होगा DDL
इसका मतलब है, यदि आप एक तालिका बदलते हैं और एक नया कॉलम जोड़ते हैं, CDC
तो तालिका देखेंगे लेकिन नए कॉलम के सभी परिवर्तनों को अनदेखा कर देंगे। वास्तव में यह केवल NULL
मूल्य से पहले और बाद में मूल्य के रूप में दर्ज करता है। आपको इसे DDL
पुन: व्यवस्थित करने की आवश्यकता है-एक देखे गए तालिका में परिवर्तन।
- जिस तरह से आपने ऊपर वर्णित किया है वह कुछ ऐसा है जैसे SQL सर्वर प्रोफाइलर का उपयोग करके एक वर्कलोड को कैप्चर करना और इसे कुछ बेंचमार्क के लिए फिर से किसी अन्य डेटाबेस पर चलाना। वैसे यह काम कर सकता है। लेकिन यह तथ्य कि बहुत अधिक दुष्प्रभाव हैं, मेरे लिए थोड़ा भारी है। यदि आप अपने क्लाइंट पर एक प्रक्रिया कॉल कैप्चर करते हैं तो आप क्या करते हैं। बाद में आपके सिद्धांत डेटाबेस में समान कमांड चल रहा है क्योंकि यह सिंक से बाहर है? प्रक्रिया के माध्यम से चल सकता है, लेकिन यह पंक्तियों को हटा / अद्यतन / सम्मिलित कर सकता है जो आपके क्लाइंट में मौजूद नहीं थे। या आप एक सिद्धांत के साथ कई ग्राहकों को कैसे संभालते हैं। मुझे लगता है कि यह बहुत मुश्किल है। सबसे खराब स्थिति में, आप शायद अपनी अखंडता को नष्ट कर देते हैं।
- एक अन्य विचार आवेदन आधारित या ट्रिगर का उपयोग कर हो सकता है। आप कितने टेबल को सिंक करना चाहते हैं, इसके आधार पर। आप एक अलग स्टेजिंग टेबल में सभी परिवर्तन लिख सकते हैं और अपने मास्टर के साथ स्टेजिंग टेबल में उन पंक्तियों को सिंक करने के लिए SQL सर्वर एजेंट जॉब सभी x मिनट चला सकते हैं। लेकिन यह थोड़ा भारी हो सकता है अगर आप 150 तालिकाओं को सिंक करने की कोशिश करते हैं। आपके पास एक बड़ा ओवरहेड होगा।
वैसे ये मेरे 2 सेंट हैं। उम्मीद है कि आपके पास एक अच्छा अवलोकन है और शायद आपको एक समाधान मिल गया है जो आपके लिए काम करता है।