2008-11-06 13 views
5

मैं वर्जन किए गए ActiveRecord एसोसिएशन के साथ काम करना चाहता हूं। ईजी।, मैं उस ऑब्जेक्ट को ढूंढना चाहता हूं जो किसी अन्य ऑब्जेक्ट से संबंधित है, एक निश्चित पिछली तारीख के रूप में, या वह जो उससे पहले था। क्या पहले से ही वर्चुअल रिलेशनशिप प्रदान करने के लिए रेल के एक्टिव रिकार्ड को लाइब्रेरी उपखंडित किया गया है? या कुछ अन्य रूबी लाइब्रेरी जो लगातार संस्करण वाले संबंध प्रदान करती है?संस्करणित ActiveRecord एसोसिएशन कैसे प्राप्त करें?

उत्तर

1

लेनदेन संबंधी अनुप्रयोग में ऐतिहासिक स्थिति का समर्थन करना जटिलता, धीमी गति से डीबी प्रदर्शन का विस्तार करने और अपने लिए जीवन को कठिन बनाने का एक अच्छा तरीका है। यदि आपको केवल ऐतिहासिक स्थिति को प्रदर्शित करने या रिपोर्ट करने की आवश्यकता है और इसे Type-II slowly changing dimensions के साथ स्टार स्कीमा बनाने और इसे अपडेट करने वाली आवधिक प्रक्रिया के बारे में सोचने की आवश्यकता नहीं है।

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

यदि आपको उचित रूप से लगातार रीफ्रेश की आवश्यकता है तो आप डेटाबेस पर एक बदली गई डेटा कैप्चर सिस्टम को कार्यान्वित कर सकते हैं, जो अपेक्षाकृत सरल है यदि एप्लिकेशन को केवल वर्तमान स्थिति से संबंधित होना चाहिए। सीडीसी तंत्र के साथ लोड प्रक्रिया को केवल परिवर्तनों के आधार पर अद्यतन करना होता है और अपेक्षाकृत तेज़ी से चलाया जाएगा।

2

बशर्ते आप डेटा की भारी मात्रा के साथ काम नहीं कर रहे हैं, और अतिरिक्त अस्थायी आयाम किनारे पर अपने डाटाबेस धक्का नहीं होगा की कोशिश करो, वहाँ ऐतिहासिक संस्करणीकृत आंकड़ों के कोई बड़ी कमियां हैं। अतिरिक्त क्वेरी जटिलता थोड़ा दर्द हो सकती है, लेकिन यह कुछ भी बड़ा नहीं है।

मेरे मामले मैं उस संस्करण संभालती एक रेल प्लगइन लिखा में, यह प्रत्येक संस्करणीकृत मेज पर 5 कॉलम कहते हैं (और संभाल की क्वेरी/हेरफेर आदि में मदद करता है):

valid_from - datetime - datetime है कि इस संस्करण था datetime - - datetime कि इस संस्करण में किया जा रहा वैध

root_id बंद कर दिया - पूर्णांक - मूल की आईडी पर

valid_to बनाया पंक्ति

created_by (इस के बाद के संस्करण है कि) - पूर्णांक - पूर्णांक - - उपयोगकर्ता है कि इस संस्करण

retired_by के निर्माण का उपयोगकर्ता आईडी उपयोगकर्ता का उपयोगकर्ता आईडी कि इस संस्करण को सेवानिवृत्त

वर्तमान में सक्रिय पंक्तियों के लिए, valid_to शून्य है। प्रदर्शन को खुश रखने में valid_to एड्स पर एक इंडेक्स जोड़ना।

+0

'मामूली' से असहमत। एक बीमा अंडरराइटिंग सिस्टम पर मैं अनुमानों से कुछ हद तक परिचित हूं कि किसी विशेष संस्करण में जोड़ा गया इतिहास ट्रैकिंग विकास प्रयास के लगभग 70% के लिए जिम्मेदार है। – ConcernedOfTunbridgeWells

+0

दिलचस्प, मेरा व्यक्तिगत अनुभव कुछ हद तक आगे बढ़ता है, लेकिन मैंने सिस्टम को ग्राउंड अप से संस्करणित करने के लिए डिज़ाइन किया है। मैं इसके बाद के संस्करण में इसे जोड़ने के लिए जो दर्द उठाऊंगा, उसकी कल्पना नहीं करना चाहूंगा। सिस्टम में लगभग 20 संस्करण वाली टेबल थीं, 10 अपरिवर्तित थीं। – Michael

+1

एचएम, यह बहुत दिलचस्प लगता है! क्या आपने कहीं अपनी प्लगइन छोड़ी?क्या आप इसे जिथब में अपलोड कर सकते हैं? मुझे कुछ विचार आदि प्राप्त करने के लिए इसे देखना अच्छा लगेगा। – reto

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