सबसे पहले आप लोग इस दोस्त के सवाल का जवाब क्यों नहीं देते? कभी-कभी हमें सुरक्षा प्रतिबंधों/अनुपालन/विरासत प्रणालियों के कारण ऐसा करना पड़ता है।
यहाँ कुछ विकल्प हैं जो मैं यहाँ छद्म कोड के साथ लिखूँगा। सुनिश्चित नहीं है कि आपका डेटाबेस कितना रीयल-टाइम है, इसलिए यह सभी मामलों में काम नहीं करेगा।
आवश्यकताएं
इसके लिए डेटाबेस को काम करने के लिए एक ही सर्वर इंस्टेंस में होना होगा। यदि नहीं, तो आपको दूरस्थ डेटा तक पहुँचने के लिए एक फ़ेडरेट स्टोरेज इंजन सेटअप करने की आवश्यकता होगी। जैसा कि एक अन्य व्यक्ति ने कहा, MySQL प्रतिकृति अभी भी कम से कम उसी सर्वर पर डेटा प्राप्त करने में उपयोगी हो सकती है, जिससे फ़ेडरेटेड स्टोरेज को सेटअप करने की आवश्यकता के बिना सिंक्रोनाइज़ेशन तेज़ हो जाता है। संदर्भ:https://dev.mysql.com/doc/refman/5.7/en/federated-storage-engine.htmlए>
समन्वयन समय
MySQL आपको अपना काम करने के लिए एक विशिष्ट शेड्यूल पर ईवेंट बनाने की अनुमति देगा (यह मानते हुए कि आपके पास कोई बाहरी जॉब शेड्यूलिंग टूल नहीं है)।
उम्मीद है कि आपके पास किसी प्रकार की संशोधित तिथि है, आप दिन में एक बार क्वेरी कर सकते हैं या उन सभी क्षेत्रों पर सख्त अंतराल कर सकते हैं जहां modified_at
>=DATE_SUB(अब( ),अंतराल? घंटा)
यदि आप एक कॉलम जोड़ने में सक्षम हैं, तो आप synced_at
. नामक एक कॉलम बना सकते हैं जो सर्वर घड़ी के अंतर के लिए थोड़ा अधिक प्रतिरोधी होगा। फिर आप केवल यह पूछ सकते हैं कि synced_at
. कहां है IS NULL या synced_at
<=modified_at
MySQL INSERT / UPDATE / DELETE आदि के ट्रिगर से पहले और बाद में समर्थन करता है ... आप अपने तर्क को ट्रिगर करने के लिए इनका उपयोग कर सकते हैं। ध्यान रखें कि आप प्रत्येक लेन-देन के लिए थोड़ा सा प्रदर्शन दंड लेंगे और यह बहुत सक्रिय उत्पादन सर्वरों को आसानी से प्रभावित कर सकता है।
BEFORE और AFTER के बीच वास्तव में कोई बड़ा अंतर नहीं है, सिवाय इसके कि यदि आप BEFORE स्टाइल ट्रिगर्स का उपयोग करते हैं तो आप स्रोत तालिका में सम्मिलित होने से रोकने के लिए एक sqlstate फेंक सकते हैं यदि यह दोनों तालिकाओं के लिए अत्यधिक सिंक्रनाइज़ होने के लिए महत्वपूर्ण है।
सिंक लॉजिक
यह छद्म कोड है लेकिन...
# new and updated records
INSERT ... ON DUPLICATE KEY UPDATE ...
SELECT FROM source_table
JOIN target_table.id
WHERE target_table.id IS NULL or modified_at > DATE_SUB(NOW(), INTERVAL ..)
# deleted records
ऊपर के समान ही आप एक समय में केवल एक रिकॉर्ड में हेरफेर कर रहे हैं और आप ट्रिगर स्टेटमेंट को मिरर कर रहे हैं। उदाहरण के लिए:स्रोत तालिका पर एक INSERT TRIGGER को लक्ष्य तालिका पर INSERT को केवल क्वेरी करना चाहिए।
रिपोर्टिंग डेटाबेस के अलावा किसी अन्य चीज़ के लिए सरल लेकिन अनुशंसित नहीं है। पूरी तालिका को छोड़ दें और इसे अन्य रिकॉर्ड से दोबारा बनाएं।