दो तरह से डेटा तुल्यकालन के लिए सबसे अच्छा अभ्यास / पैटर्न


52

अक्सर मेरे काम में डेटाबेस सिस्टम फसलों के बीच 2-तरफा डेटा सिंक्रनाइज़ेशन का विचार है। क्लासिक उदाहरण दो अलग-अलग सीआरएम सिस्टम (कहते हैं, रायसर के एज और सेल्सफोर्स) और उनके बीच संपर्क डेटा के दो-तरफा सिंक करने की आवश्यकता है।

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

उदाहरण के लिए, आपको बाहर देखना होगा:

  • क्या आप आसानी से पता लगा सकते हैं कि दोनों प्रणालियों में कौन से रिकॉर्ड बदल गए हैं (या आपको परिवर्तनों का पता लगाने के लिए सिस्टम के बीच सभी रिकॉर्ड की तुलना करनी होगी)
  • यदि आप एक बार-हर-एन-घंटे सिंक के लिए जा रहे हैं, तो संघर्षों से कैसे निपटें जहां एक ही रिकॉर्ड दोनों प्रणालियों में एक ही समय में कम-से-कम बदलता है।
  • यदि आप एक वास्तविक समय सिंक के लिए जा रहे हैं (यानी एक सिस्टम में एक अपडेट तुरंत दूसरे सिस्टम के लिए एक अपडेट ट्रिगर करता है) कीड़े या सिस्टम क्रैश के कारण समय के साथ विचलन को कैसे संभालना है

व्यक्तिगत रूप से मैं इस सब से निपटने के तरीकों के बारे में सोच सकता हूं, लेकिन अगर कोई प्रसिद्ध पैटर्न, साहित्य या सर्वोत्तम अभ्यास हैं, जिन्हें मैं संदर्भित कर सकता हूं।


क्या आप Federated डेटाबेस सिस्टम के लिए बहुत करीब लगता है का वर्णन - क्या यह सही है?
gnat

@gnat: लिंक के लिए धन्यवाद, कुछ चिंताएं समान हैं (जैसे कि विषमता से निपटना), लेकिन मैं दो स्वायत्त डेटाबेस से डेटा के सबसेट को सिंक करने के बारे में बात कर रहा हूं, जबकि यह सब कुछ पूरी तरह से एकीकृत दृश्य बनाने के बारे में अधिक लगता है कई dbs के पार।
कोडुलिक

1
7 साल बाद, 50 अपवोट्स लेकिन केवल 1 सभ्य उत्तर। वहाँ कुछ सिंकट्रॉनाइजेशन पैटर्न या सर्वोत्तम अभ्यास होना चाहिए?
कोडुलिक

जवाबों:


8

हाँ, एक कठिन समस्या, आसानी से कम करके आंका गया। और बहुत काम हो सकता है। यदि आप Microsoft तकनीकों पर हैं, तो आप यहाँ और यहाँ Microsoft सिंक फ्रेमवर्क पर एक नज़र रखना चाहते हैं


1
धन्यवाद, यह दिलचस्प है। मैंने सुश्री सिंक फ्रेमवर्क के बारे में सुना था लेकिन यह इतना सामान्यीकृत नहीं था। यह मूल रूप से सामान्य रूप से सिंक मुद्दों से निपटने के लिए एक पैटर्न है।
कोडुलिक

2
Microsoft सिंक फ्रेमवर्क को Microsoft Sync Framework द्वारा प्रतिस्थापित किया गया था।
टॉमस क्यूब्स 20

मैं डॉक्स से निराश हूं, जो कि स्पष्ट नहीं है, विशेष रूप से गैर SQL- सर्वर ADO.NET डेटा प्रदाताओं के लिए, जो मेरा मामला है। इसके अलावा, मेरा कार्यस्थल ऐसी चीज़ की तलाश कर रहा है जिसमें उत्पादन के माहौल को जोड़ने / उत्पादन वातावरण में बदलाव करने की आवश्यकता न हो। इसलिए मैं इसे त्यागने वाला हूं।
'13

0

दूरस्थ साइट DB सिंक्रनाइज़ेशन के बारे में कई सिद्धांत हैं। सबसे पहले INSERT से शुरुआत करें। इसे संभालना आसान है - जैसा कि आप हर साइट के लिए एक अद्वितीय आईडी बना सकते हैं (उदाहरण के लिए साइट का प्रारंभिक नाम + आईडी (संख्या): site_a_177 बनाम साइट_बी_53)

इसलिए डालने के लिए कोई विरोध नहीं पैदा करना चाहिए। समस्या अद्यतन है। मुझे विश्वास नहीं है कि 100% विफलता प्रूफ विधि है, लेकिन आप रिमोट DB में रिकॉर्ड को "लॉक" करके अपडेट शुरू कर सकते हैं, और आपके द्वारा हैंडल प्राप्त करने के बाद ही - अपडेट के साथ जारी रखें, और अपडेट को सिंक्रनाइज़ करके समाप्त करें और उसके बाद ही लॉक रिलीज़ करें।


1
धन्यवाद, मुझे लगता है कि आप एक ही स्कीमा के साथ वितरित dbs और वितरित लेनदेन से निपटने के बारे में बात कर रहे हैं। मैं उन परिदृश्यों के बारे में सोच रहा हूं, जहां दो DB पूरी तरह से स्वायत्त हैं (जैसे कि वे पूरी तरह से अलग-अलग तरीकों से विशिष्ट आईडी असाइन करते हैं और स्कीमा अलग-अलग होते हैं) लेकिन आप उनमें डेटा का सबसेट सिंक करना चाहते हैं।
कोडुलाइक

ऐसा लगता है कि कोई संघर्ष नहीं होना चाहिए। उस मामले में यह बहुत सरल होना चाहिए - बस "अंतिम रिकॉर्ड-आईडी" को सहेजें जो प्रत्येक तालिका के लिए सिंक किया गया था और वहां से जारी है।
अल्फासिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.