2008-10-03 15 views
9

लोकप्रिय तकनीकों में से कुछ आप अपने इन-स्मृति डेटा संरचनाओं (यानी) यदि प्रक्रिया दुर्घटनाओं, तो आप उस डेटा पर सभी पहले से निष्पादित कार्यों के रक्षा कर सकते हैं करने के लिए स्थायित्व को जोड़ने के लिए गोद ले सकते हैं क्या हैं संरचना?में स्मृति डेटा संरचनाओं को स्थायित्व जोड़ना

यदि मेरी डेटा संरचना में केवल टुपल्स की एक सूची शामिल है, तो मैं उन्हें केवल एक एसक्यूएल डीबी में स्टोर करूंगा और इससे मुझे मुफ्त में स्थायित्व मिलेगा। लेकिन क्या होगा यदि मेरी डेटा संरचना ग्राफ या पेड़ थी?

एक चीज जिसे मैं सोच सकता हूं डिस्क को सभी परिचालनों को स्पष्ट रूप से लॉग करना है (केवल ऐप लॉग) और क्रैश की स्थिति में, पिछले राज्य को संरक्षित करने के लिए लॉग को फिर से चलाएं। अगर लॉग बहुत बड़ा हो जाता है, तो एक कॉम्पैक्शन चरण होगा। मुझे लगता है कि डाटाबेस इंजन स्थायित्व के लिए आंतरिक रूप से क्या करता है (चेकपॉइंटिंग यह है कि इस प्रक्रिया को क्या कहा जाता है)?

बीटीडब्ल्यू नोट करें कि यह एक परिदृश्य नहीं है जहां संपूर्ण डेटासेट स्मृति में फिट नहीं है।

उत्तर

0

जो शब्द आप खोज रहे हैं वह "क्रमबद्धता" है।

+0

मैंने स्पष्ट रूप से "serialization" शब्द के बारे में सुना है। और स्पष्ट रूप से पूरी डेटा संरचना का निष्पक्ष क्रमिकरण डिस्क पर प्रत्येक एकल ऑपरेशन सिद्धांत में काम करेगा लेकिन अभ्यास में नहीं होगा। मैं इसे कुशलतापूर्वक करने के बारे में बात कर रहा था (यदि डेटा में स्मृति रखने का मुद्दा क्या नहीं है?) – Harish

+0

आह! शायद कुछ कैशिंग तंत्र आपको बेहतर लगेगा? – Rik

0

आप अपनी संरचना को क्रमबद्ध करने के लिए कुछ तरीके से आ सकते हैं, चाहे एक्सएमएल, वाईएएमएल, जेएसओएन, आदि के साथ। फिर आप इसे डीबी में स्टोर कर सकते हैं, या शायद मुख्य निष्पादन बिंदु के चारों ओर एक बड़ी कोशिश/पकड़ डाल सकते हैं कार्यक्रम। फिर यदि कुछ अनचाहे अपवाद होता है, जिससे प्रोग्राम क्रैश हो जाता है, तो आप अपने डेटा को क्रमबद्ध कर सकते हैं, किसी भी त्रुटि संदेश, स्टैक निशान इत्यादि के रूप में अच्छी तरह से जवाब दे सकते हैं

0

हां, आप डेटा को कुछ प्रारूप में क्रमबद्ध करना चाहते हैं - एक्सएमएल, बाइनरी, जो भी हो। प्रोग्रामिंग भाषा के आधार पर यह आपके लिए बनाया जा सकता है। जावा में ObjectStreams है, .NET में XmlSerializer और BinaryFormatter भी है।

0

आपके प्रश्न का कोई भी जवाब एसीआईडी ​​डेटाबेस सिस्टम की तरह कुछ करने में लगेगा। तो मैं कहूंगा कि आपकी सबसे अच्छी शर्त है कि आप अपने आवेदन स्थिति को स्टोर करने के लिए आरडीबीएमएस का उपयोग करें, जब भी आपके पास (एप्लिकेशन) लेनदेन हो, तो उसे खोना नहीं चाहिए।

4

आप object prevalence engine को आजमा सकते हैं। .NET के लिए, आप Bamboo.Prevalence को आजमा सकते हैं, जो कि जावा के लिए Prevayler नामक एक समान इंजन का बंदरगाह है।

+0

ऑब्जेक्ट प्रवेग इंजन इंजन जैसा मैंने सुझाया है, वैसे ही काम करता है - सिस्टम रिकवरी के लिए जर्नल में परिवर्तन। वैसे भी उन लिंक के लिए धन्यवाद। वे दिलचस्प लगते हैं! – Harish

+0

न्याय, क्या आपने प्रीवायलर का उपयोग किया था? क्या आप इसके बारे में मेरे प्रश्न का उत्तर दे सकते हैं? http://stackoverflow.com/questions/454294/what-are-synchronizing-strategies-for-prevayler – Sergey

+1

मेरे अनुभव में, प्रसार छोटे, लिखने-गहन डेटा सेट के लिए बहुत अच्छा काम करता है।यह उन डेवलपर्स के साथ कम अच्छी तरह से काम करता है जो प्रचलित वस्तुओं की मांग की बाधाओं को सहजता से समझते नहीं हैं - विशेष रूप से, समय के साथ निर्धारणावाद- या अंतरिक्ष-स्थानांतरित गणना। –

1

मैंने 2 कंपनियों के उत्पादों में "श्रीजब" तकनीक लागू की है, जो मूल रूप से आपके प्रश्न में सुझाई गई है: "मेमोरी रेसिडेंट जर्नल बैकड" डेटाबेस, एक मेमोरी डेटा-स्ट्रक्चर जहां हर डिस्क के रूप में परिवर्तन लॉग होता है जैसा होता है। और यह हमारे लिए बहुत अच्छा काम करता है!

http://www.edval.biz/memory-resident-programming-object-databases

मैं एक उत्पादन संदर्भ में इस का उपयोग कर के साथ हमारे वास्तविक दुनिया अनुभवों को साझा करने में खुशी होगी। मैं घटनाओं के सटीक अनुक्रम को फिर से चलाने या समय पर किसी भी बिंदु पर रोल करने में सक्षम होना पसंद करता हूं।

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