2010-11-21 9 views
9

जब एग्रीगेट्स के स्नैपशॉट इवेंट लॉग के साथ सिंक हो गए तो मैं बस अपनी घटनाओं को प्रारंभिक स्नैपशॉट्स (जो सिंक में होना चाहिए) से फिर से चला सकता है। वही मैं कर सकता हूं जब मैं नए फ़ील्ड जोड़ता/निकालता हूं या जब मैं मौजूदा हैंडलर के तर्क को संशोधित करता हूं।परिस्थितियों को कैसे संभालें, जब पढ़ा गया मॉडल इवेंट लॉग के साथ सिंक हो गया?

यदि मुझे नया पठन मॉडल जोड़ने की आवश्यकता है (यानी नई रिपोर्ट देखें) मैं वही कर सकता हूं - मैं अपनी घटनाओं को दोबारा खेलूंगा।

लेकिन मुझे स्थिति लॉग के साथ सिंक से बाहर निकलने पर स्थिति को कैसे संभालना चाहिए? घटनाओं और प्रकाशनों का भंडारण एक लेनदेन में है, लेकिन पढ़ने के मॉडल को अपडेट करना दूसरे लेनदेन में हुआ, जो असफल हो सकता है। बहुत शुरुआत से घटनाओं को दोहराने में मदद मिल सकती है, लेकिन यह अनंत काल ले सकती है। क्या मुझे पूरे पढ़ने वाले मॉडल के लिए स्नैपशॉट की अवधारणा की आवश्यकता है?

आप इस समस्या को कैसे हल करते हैं? धन्यवाद।

उत्तर

7

इवेंट हैंडलर में विफलता का कारण क्या होगा? "अनंत काल" कितनी देर तक है?

मॉडल अपडेट शायद ही कभी विफल हो जाते हैं (कमांड हैंडलर के विपरीत), क्योंकि तर्क अंदर बेहद सरल है। विफलताएं क्षणिक समस्याओं (आईओ/नेटवर्क आउटेज) के कारण होने की संभावना है और संदेश बस द्वारा स्वचालित रूप से संभाला जाएगा।

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

मैं मॉडल पढ़ने के लिए स्नैपशॉट्स शुरू करने के खिलाफ अनुशंसा करता हूं। मुझे लगता है कि यह किसी भी महत्वपूर्ण लाभ के बिना वास्तुकला को जटिल बनाता है।

+1

धन्यवाद धन्यवाद! शुरुआत से घटनाओं को दोहराने के मामले में आप ईवेंट हैंडलर के एक थ्रेड का उपयोग करते हैं? क्योंकि यदि मैं कई कार्यकर्ता धागे का उपयोग करूंगा तो मुझे सही नतीजे नहीं मिल सकते हैं (जबकि यह डोमेन प्रकृति के कारण उत्पादन में काम करेगा - वास्तविक उपयोगकर्ताओं से प्रकाशन करते समय कई घटनाओं की दौड़ स्थिति संभव नहीं है, लेकिन एक-एक करके प्रकाशित करते समय संभव है कई कार्यकर्ता धागे के लिए)। क्या यह वैश्विक स्तर पर स्वीकार करता है कि हमें शुरुआत से ही घटनाओं को संसाधित करने के लिए केवल एक कार्यकर्ता थ्रेड का उपयोग करना चाहिए? आपके मूल्यवान उत्तरों के लिए धन्यवाद। –

+0

अच्छी कॉल। मैं प्रति इकाई उदाहरण (या तो आदेश या घटनाओं) से 1 धागा से अधिक नहीं चलाकर इस तरह के समवर्ती मुद्दों से बचना पसंद करता हूं। तो हम इवेंट हैंडलर के लिए एकाधिक थ्रेड प्राप्त कर सकते हैं, हालांकि प्रत्येक एकल दृश्य * इंस्टेंस * (कुछ पहचान द्वारा पहचाना गया) हमेशा एक ही थ्रेड द्वारा ही संभाला जाएगा। बेशक, एक धागा एक से अधिक दृश्य उदाहरण संभाल सकता है या एक समय में टाइप कर सकता है। क्या यह मदद करता है? –

+0

धन्यवाद! आपके उत्तर का विश्लेषण करने के कुछ दिनों बाद मुझे लगता है कि मैं कई कार्यकर्ता धागे के साथ ईवेंट हैंडलिंग के यांत्रिकी को समझता हूं। मैं आपके उत्तरों की सराहना करता हूं। –

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