हमारे पास तीन अनुप्रयोगों में एक ऑब्जेक्ट मॉडल का उपयोग किया जा रहा है। दो कार्यक्रम डेटा एकत्र करते हैं, दूसरा इसे पढ़ता है और रिपोर्ट उत्पन्न करता है। सिस्टम बहुत डिस्कनेक्ट है, इसलिए हमारे पास एक ही डेटाबेस नहीं हो सकता है जो सभी कार्यक्रमों से बात करते हैं।क्या मुझे ओआरएम चाहिए?
अभी, प्रोग्राम केवल एक ऑब्जेक्ट मॉडल को पॉप्युलेट करने और डिस्क को क्रमबद्ध/deserialize करने के लिए एक सामान्य पुस्तकालय का उपयोग करते हैं। विशेष रूप से, हम एक्सएमएल क्रमबद्धता का उपयोग कर रहे हैं।
इस मॉडल के साथ कुछ समस्याएं हैं। 1) एक्सएमएल अपशिष्ट माना जा सकता है। फाइलें बड़ी और अनावश्यक हो सकती हैं। ईमानदारी से, फ़ाइल का आकार अभी एक बड़ी चिंता नहीं है। 2) मेरी सबसे बड़ी चिंता स्मृति पैर प्रिंट है। पूरी फ़ाइल को ऑब्जेक्ट मॉडल में लोड किया जाता है, जिसे संचालित किया जाता है, फिर सहेजा जाता है।
उम्मीद है कि मैंने अपनी चिंता व्यक्त की है, किसी बिंदु पर हम रनटाइम के दौरान इस एप्लिकेशन के साथ स्मृति समस्याओं में भाग लेंगे। पर्याप्त डेटा एक "डेटाबेस" (xml फ़ाइल) में एकत्रित किया जाएगा जिसे इसे एक साथ स्मृति में लोड नहीं किया जा सकता है।
मैं क्या चाहता हूं, स्मृति के बजाए फ़ाइल संग्रहण द्वारा समर्थित मेरे ऑब्जेक्ट मॉडल तक पहुंच है। मैं ऑब्जेक्ट मॉडल में परिवर्तन न्यूनतम होना चाहता हूं। जब किसी ऑब्जेक्ट को एक्सेस किया जाता है, तो यह डिस्क से आता है और जब यह सेट होता है, तो यह सहेजा जाता है (स्वचालित रूप से, यदि संभव हो तो)।
हमने एसक्यूएलसाइट, एसक्यूएल कॉम्पैक्ट 4.0 और ईएफ 4, और LINQ से एक्सएमएल (संक्षिप्त रूप से) के साथ एनएचबेर्नेट में देखा है। मैंने डिस्क में वस्तुओं को कैशिंग करने के लिए अतीत में db4o भी उपयोग किया है, लेकिन यह एक असंबंधित प्रोजेक्ट था।
इससे पहले कि मैं इनमें से किसी एक को सीखने के लिए गोता लगाने और प्रतिबद्ध करने से पहले, मैं जानना चाहता हूं कि मेरा विचार समझ में आता है या नहीं। क्या मेरे पास एक ऑब्जेक्ट मॉडल हो सकता है जो मेरे मेमोरी पदचिह्न को अनगिनत रूप से फॉलो करने के बजाय स्टोरेज माध्यम पर "जादुई रूप से" कैश करेगा? ऐसा करने के लिए सबसे छोटा रास्ता क्या है, भले ही यह सबसे सुरुचिपूर्ण न हो?
क्या ऐसी अन्य तकनीकें हैं जो मेरी मदद कर सकती हैं? मेमोरी मैप की गई फ़ाइलें, linq-to-sql, आलसी (टी) (संभवतः फ़ाइलों की आवश्यकता होने पर ऑब्जेक्ट्स लाने के लिए)।
मुझे एहसास है कि यह एक खुला अंत प्रश्न है। मैं एक बड़ी तस्वीर प्रतिक्रिया और विवरण की तलाश में हूं, अगर वहां कोई वास्तविक दुनिया अनुभव कर रहा है। लिंक सहायक होंगे ...
धन्यवाद।
क्या आपके पास स्मृति संबंधी चिंताएं हैं क्योंकि आप मोबाइल उपकरणों के साथ काम करते हैं? मैं पूछता हूं क्योंकि मैं एक टैग के रूप में sql-server-ce देखता हूं। –
अभी मोबाइल नहीं है, SQL सर्वर कॉम्पैक्ट को देखते हुए क्योंकि यह मेरे एप्लिकेशन (जैसे SQLite) में एम्बेड किया जा सकता है। अगर हम ईएफ के साथ जाते हैं, तो एसक्यूएल कॉम्पैक्ट डीबी बैकएंड के रूप में विचार करेगा। स्मृति चिंताओं इस तथ्य के कारण हैं कि यह 32 बिट ऐप है, इसलिए प्रक्रिया पर 2 जीबी की सीमा है। – Nate
क्या आपका ऐप एक स्टैंड अकेला ऐप है? ऐसा लगता है कि आप एक केंद्रीकृत डेटाबेस नहीं चाहते हैं। ऐप mulit-user है? आप कितनी बार अद्यतन करते हैं? आवेदन के खिलाफ कितनी रिपोर्टिंग की जाती है? ये ऐसे प्रश्न हैं जो आपकी पसंद बनाने में आयातक हैं। – Andrew