इस स्थिति से निपटने के कुछ तरीके हैं:
- आप डेटाबेस ट्रिगर का उपयोग कर सकते हैं। यह एक डेटाबेस अज्ञेयवादी विकल्प नहीं है और जहाँ तक मुझे पता है इसका RoR समर्थन न के बराबर है। यदि आपकी स्थिति के लिए बिल्कुल कोई डेटा-असंगतता की आवश्यकता नहीं है, तो शायद यह आपके लक्ष्य को प्राप्त करने का सबसे प्रभावी तरीका होगा, लेकिन मैं नहीं हूं एक डीबी विशेषज्ञ।
- आप दो तालिकाओं को समय-समय पर सिंक करने के लिए बैच ऑपरेशन का उपयोग कर सकते हैं। यह विधि आपकी दो तालिकाओं को अलग-अलग बहने देती है और फिर डेटा को हर बार फिर से सिंक्रनाइज़ करती है। यदि आपकी स्थिति इस बहाव को होने देती है, तो यह एक अच्छा विकल्प हो सकता है क्योंकि यह डीबी को ऑफ घंटों के दौरान अपडेट करने की अनुमति देता है। यदि आपको हर 5 मिनट में सिंक करने की आवश्यकता है तो आप शायद अन्य विकल्पों पर गौर करना चाहेंगे। इसे आपके रूबी कोड द्वारा नियंत्रित किया जा सकता है, लेकिन इसके लिए किसी प्रकार के बैकग्राउंड जॉब रनर की आवश्यकता होगी (क्रॉन, डिलेड_जॉब, रेडिस, आदि)
- आप अपने रेल मॉडल के अंदर से कॉलबैक का उपयोग कर सकते हैं। आप
"after_update :sync_denormalized_data"
. का उपयोग कर सकते हैं . यह कॉलबैक डेटाबेस स्तर के लेनदेन में लपेटा जाएगा (यह मानते हुए कि आपका डेटाबेस लेनदेन का समर्थन करता है)। आपके पास हर बार दो लिखने की कीमत पर रेल स्तर का कोड, सुसंगत डेटा, और पृष्ठभूमि प्रक्रिया की कोई आवश्यकता नहीं होगी। - कुछ तंत्र जिसके बारे में मैंने सोचा नहीं....
इस प्रकार के मुद्दे बहुत हैं आवेदन विशिष्ट। यहां तक कि एक ही एप्लिकेशन के भीतर भी आप शामिल लचीलेपन और प्रदर्शन आवश्यकताओं के आधार पर एक से अधिक विधियों का उपयोग कर सकते हैं।