इवेंट सोर्सिंग को कई चीजों के लिए बोनस के रूप में रखा जाता है, उदा। घटना इतिहास/लेखापरीक्षा निशान, पूर्ण और लगातार दृश्य पुनर्जन्म, आदि बहुत अच्छा लगता है। मैं फ़ैन हूं। लेकिन वे रीड-साइड कार्यान्वयन विवरण हैं, और आप इवेंट स्टोर को पूरी तरह से पढ़ने वाले पक्ष में दूसरे ग्राहक के रूप में ले जाकर इसे पूरा कर सकते हैं .. तो क्यों नहीं?ईवेंट स्टोर को लिखने की तरफ क्यों होना चाहिए?
यहाँ कुछ विचार है:
- विचारों/खुद को एक घटना की दुकान के बारे में परवाह नहीं है denormalizers। वे सिर्फ डोमेन से घटनाओं को संभालते हैं।
- ईवेंट स्टोर को पढ़ने के पक्ष में स्थानांतरित करना अभी भी आपको ईवेंट इतिहास/ऑडिट
- देता है फिर भी आप ईवेंट स्टोर से अपने विचारों को पुन: उत्पन्न कर सकते हैं। सिवाय इसके कि इसे एक लेखन मॉडल रिसाव की आवश्यकता नहीं है। उसे मॉडल नागरिकता पढ़ो!
यहां लिखने के पक्ष में रखने के लिए एक तकनीकी तर्क प्रतीत होता है। ग्रेग यंग से http://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/:
हालांकि कुछ ऐसे मुद्दे हैं जो वर्तमान स्थिति का स्नैपशॉट संग्रहीत करने वाले कुछ का उपयोग करने के साथ मौजूद हैं। सबसे बड़ी समस्या इस तथ्य के आसपास घूमती है कि आपने अपने डेटा में दो मॉडल पेश किए हैं। आपके पास एक ईवेंट मॉडल और वर्तमान स्थिति का प्रतिनिधित्व करने वाला एक मॉडल है।
जो चीज़ मुझे इस बारे में दिलचस्प लगता है वह शब्द "स्नैपशॉट" है, जो हाल ही में सोर्सिंग के मामले में एक विशिष्ट शब्द बन गया है। लेखन पक्ष पर एक ईवेंट स्टोर पेश करना कुल लोड करने के लिए कुछ ओवरहेड जोड़ता है। आप केवल ओवरहेड पर बहस कर सकते हैं, लेकिन यह स्पष्ट रूप से एक अनुमानित या अनुमानित समस्या है, क्योंकि अब स्नैपशॉट से समेकित लोड करने की अवधारणा और स्नैपशॉट के बाद से सभी घटनाएं हैं। तो अब हमारे पास ... दो मॉडल फिर से हैं। और न केवल वह, लेकिन मैंने देखा है कि स्नैपशॉटिंग सुझावों को एक बुनियादी ढांचे की रिसाव के रूप में लागू किया जाना है, जिसमें पृष्ठभूमि प्रक्रिया को अपने पूरे डेटा स्टोर पर चलने के लिए चीजों को निष्पादित रखने के लिए किया जाता है।
और स्नैपशॉट लेने के बाद, स्नैपशॉट से पहले की घटनाएं लिखने के परिप्रेक्ष्य से 100% बेकार हो जाती हैं, सिवाय इसके कि ... पढ़ने के पक्ष को पुनर्निर्माण करने के लिए! यह गलत लगता है।
एक और प्रदर्शन संबंधित विषय: फ़ाइल भंडारण। कभी-कभी हमें बड़ी बाइनरी फाइलों को इकाइयों को संलग्न करने की आवश्यकता होती है। संकल्पनात्मक रूप से, कभी-कभी ये संस्थाओं से जुड़े होते हैं, लेकिन कभी-कभी वे संस्थाएं हैं। इवेंट स्टोर में इन्हें रखने का मतलब है कि जब भी आप इकाई लोड करते हैं तो आपको उस डेटा को भौतिक रूप से लोड करना होगा। यह काफी बुरा है, लेकिन इनमें से कई या सैकड़ों बड़े पैमाने पर कल्पना करें। मैंने जो जवाब दिया है, वह मूल रूप से बुलेट काटने और फ़ाइल में यूरी पास करने के लिए है। यह एक पुलिस आउट है, और वितरित प्रणाली को कमजोर करता है।
फिर रखरखाव है। पुनर्निर्माण विचारों को ईवेंट स्टोर से जुड़ी एक प्रक्रिया की आवश्यकता होती है। तो अब आप जो भी व्यू रखरखाव कार्य लिखते हैं वह आपके लिखने वाले मॉडल को इवेंट स्टोर का उपयोग करने के लिए बाध्य करता है .. हमेशा के लिए।
सीक्यूआरएस का पूरा बिंदु नहीं है कि पढ़ने के मॉडल और लेखन मॉडल के आसपास उपयोग के मामले मौलिक रूप से असंगत हैं? तो हमें लिखने की तरफ पढ़ने के मॉडल को क्यों लाना चाहिए, लचीलापन और प्रदर्शन का त्याग करना चाहिए, और उन्हें दोबारा जोड़ना चाहिए। समय क्यों व्यतीत करें?
तो सब कुछ में, मैं उलझन में हूं। जहां से मैं बैठता हूं, सभी मामलों में, ईवेंट स्टोर एक पढ़ा मॉडल विवरण के रूप में अधिक समझ में आता है। आप अभी भी एक इवेंट स्टोर रखने के कई लाभ प्राप्त करते हैं, लेकिन आप लचीलापन और प्रदर्शन को कम करने, संभवतया लिखने के पक्ष में अतिसंवेदनशील नहीं हैं।और आप अपने पढ़ने/लिखने के पक्ष को रिसाव अबास्ट्रक्शन और रखरखाव कार्यों द्वारा बैक अप नहीं करते हैं।
तो क्या कोई मुझे लिखने के पक्ष में रखने के लिए एक या अधिक आकर्षक कारणों को समझा सकता है? या वैकल्पिक रूप से, इसे रखरखाव/रिपोर्टिंग चिंता के रूप में पढ़ने के पक्ष में क्यों नहीं जाना चाहिए? फिर, मैं दुकान की उपयोगिता पर सवाल नहीं उठा रहा हूं। बस इसे कहाँ जाना चाहिए :)
घटनाओं के साथ स्नैपशॉटिंग भी "नई अवधारणा" नहीं है, यह 2006 में सोर्सिंग की घटना पर मेरी पहली बात थी :) –