- नियम # 1: नहीं।
- नियम # 2: मत करो।
एक कार्यक्रम सोर्स मॉडल को स्नैपशॉट करना एक प्रदर्शन अनुकूलन है। प्रदर्शन अनुकूलन का पहला नियम? मत करो।
विशेष रूप से, स्नैपशॉटिंग आपके ईवेंट स्टोर से आपके मॉडल के इतिहास को पुनः लोड करने का प्रयास करने वाले आपके भंडार में खोने वाले समय की मात्रा को कम कर देता है।
यदि आपका संग्रह मॉडल को स्मृति में रख सकता है, तो आप इसे अक्सर पुनः लोड नहीं करेंगे। तो स्नैपशॉटिंग से जीत छोटी होगी। इसलिए: मत करो।
यदि आप अपने मॉडल को aggregates
में विघटित कर सकते हैं, तो यह कहने के लिए कि आप अपने मॉडल के इतिहास को गैर-ओवरलैपिंग इतिहास वाले कई इकाइयों में विघटित कर सकते हैं, तो आपका एक मॉडल लंबा मॉडल इतिहास कई छोटे इतिहास बन जाता है कि प्रत्येक एक इकाई में परिवर्तन का वर्णन करता है। प्रत्येक इकाई इतिहास जिसे आपको लोड करने की आवश्यकता है वह बहुत छोटा होगा, इसलिए स्नैपशॉट से जीत कम होगी। इसलिए: मत करो।
आज जिस तरह की प्रणालियों में मैं काम कर रहा हूं, उसके लिए उच्च प्रदर्शन की आवश्यकता है लेकिन 24x7 उपलब्धता नहीं है। तो ऐसी परिस्थिति में जहां मैंने रखरखाव के लिए अपना सिस्टम बंद कर दिया है और इसे पुनरारंभ करना है, मुझे अपने सभी ईवेंट स्टोर को लोड और पुन: प्रसंस्करण करना होगा क्योंकि मेरी ताजा प्रणाली घटनाओं को संसाधित करने के लिए कौन सी कुल आईडी नहीं जानता है। मुझे अपने सिस्टम को फिर से शुरू करने के लिए एक बेहतर प्रारंभिक बिंदु की आवश्यकता है।
आप एक लिखने SLA जब भंडार स्मृति कैश ठंडे हैं लापता के बारे में चिंतित हैं, और आप की घटनाओं को फिर से लोड करने के लिए की बहुत सारी के साथ लंबे समय मॉडल इतिहास है। स्नैपशॉटिंग पर बोल्टिंग छोटे मॉडल में अपने मॉडल इतिहास को दोबारा करने की कोशिश करने से कहीं अधिक उचित हो सकती है। ठीक है ....
स्नैपशॉट स्टोर पढ़ा गया मॉडल - किसी भी समय, आप मॉडल को उड़ाने और ईवेंट स्टोर में बने इतिहास से इसे पुनर्निर्माण करने में सक्षम होना चाहिए।
भंडार के परिप्रेक्ष्य से, स्नैपशॉट स्टोर एक कैश है; यदि कोई स्नैपशॉट उपलब्ध नहीं है, या यदि स्टोर स्वयं एसएलए के भीतर प्रतिक्रिया नहीं देता है, तो आप प्रारंभिक बीज राज्य से शुरू होने वाले पूरे ईवेंट इतिहास को पुन: प्रसंस्करण के लिए वापस गिरना चाहते हैं।
सेवा प्रदाता इंटरफ़ेस की तरह
interface SnapshotClient {
SnapshotRecord getSnapshot(Identifier id)
}
SnapshotRecord भंडार करने के लिए जानकारी स्नैपशॉट का उपभोग करने की जरूरत है प्रदान करने के लिए जा रहा है कुछ देखने के लिए जा रहा है। यही कारण है कि एक न्यूनतम
- एक स्मृति चिन्ह कि भंडार snapshotted राज्य
- स्नैपशॉट प्रोजेक्टर द्वारा संसाधित जब स्नैपशॉट निर्माण पिछले घटना का विवरण दिया गया rehydrate करने के लिए अनुमति देता है पर शामिल करने के लिए जा रहा है।
मॉडल तो फिर से हाइड्रेट स्मृति चिन्ह से snapshotted राज्य, इतिहास घटना की दुकान, स्कैनिंग पीछे की ओर से लोड होगा (यानी, सबसे हाल ही में घटना से शुरू) घटना SnapshotRecord में दस्तावेज की तलाश में , फिर क्रम में आगामी घटनाओं को लागू करें।
SnapshotRepository ही (किसी भी आईडी के लिए सबसे अधिक एक रिकॉर्ड पर) मुख्य-मान की दुकान हो सकता है, लेकिन ब्लॉब समर्थन के साथ एक संबंधपरक डेटाबेस भी ठीक
select *
from snapshots s
where id = ?
order by s.total_events desc
limit 1
स्नैपशॉट प्रोजेक्टर और भंडार हैं काम करेंगे कसकर युग्मित - उन्हें इस बात पर सहमत होना चाहिए कि इकाई की स्थिति सभी संभावित इतिहासों के लिए क्या होनी चाहिए, उन्हें इस बात से सहमत होना चाहिए कि स्मृति चिन्ह को कैसे/फिर से हाइड्रेट करना है, और उन्हें यह स्वीकार करने की आवश्यकता है कि स्नैपशॉट का पता लगाने के लिए कौन सी आईडी का उपयोग किया जाएगा ।
तंग युग्मन का यह भी अर्थ है कि आपको विशेष रूप से स्मारक के बारे में चिंता करने की आवश्यकता नहीं है; एक बाइट सरणी ठीक हो जाएगी।
हालांकि, उन्हें अपने पिछले अवतारों से सहमत होने की आवश्यकता नहीं है। स्नैपशॉट प्रोजेक्टर 2.0 स्नैपशॉट प्रोजेक्टर 1.0 द्वारा छोड़े गए किसी भी स्नैपशॉट को अनदेखा/अनदेखा करता है - स्नैपशॉट स्टोर केवल एक कैश है।
मैं एक ऐसा एप्लिकेशन तैयार कर रहा हूं जो संभवतः एक दिन में लाखों घटनाएं उत्पन्न करेगा। हम अगर हम एक दृश्य के 6 महीने के पुनर्निर्माण की जरूरत बाद में
अधिक सम्मोहक जवाब यहां से एक समय स्पष्ट रूप से मॉडल करने के लिए है क्या कर सकते हैं। क्या आपके पास एक इकाई है जो छह महीने तक रहती है, या क्या आपके पास 180+ इकाइयां हैं जो प्रत्येक एक दिन के लिए जीती हैं? लेखांकन यहां संदर्भित करने के लिए एक अच्छा डोमेन है: वित्तीय वर्ष के अंत में, किताबें बंद हैं, और अगले वर्ष की किताबें कैरियोवर के साथ खोली जाती हैं।
Yves Reynhout अक्सर मॉडलिंग समय और शेड्यूलिंग के बारे में बात करता है; Evolving a Model एक अच्छा प्रारंभिक बिंदु हो सकता है।
आज जिस तरह के सिस्टम मैं काम कर रहा हूं, उसके लिए उच्च प्रदर्शन की आवश्यकता है लेकिन 24x7 उपलब्धता नहीं है। तो ऐसी परिस्थिति में जहां मैंने रखरखाव के लिए अपना सिस्टम बंद कर दिया है और इसे पुनरारंभ करना है, मुझे अपने सभी ईवेंट स्टोर को लोड और पुन: प्रसंस्करण करना होगा क्योंकि मेरी ताजा प्रणाली घटनाओं को संसाधित करने के लिए कौन सी कुल आईडी नहीं जानता है। मुझे अपने सिस्टम को फिर से शुरू करने के लिए एक बेहतर प्रारंभिक बिंदु की आवश्यकता है। – Mikhas
और यदि आप सभी इतिहास नहीं रखते हैं तो क्या होगा? असल में मैं एक ऐसा एप्लीकेशन तैयार कर रहा हूं जो संभवतः एक दिन में लाखों घटनाएं उत्पन्न करेगा। अगर हमें 6 महीने बाद एक दृश्य पुनर्निर्माण की ज़रूरत है तो हम क्या कर सकते हैं? क्या आप कुछ सलाह दे सकते हैं? –
संपादन देखें, और रेनहाउट द्वारा बात करें। – VoiceOfUnreason