2008-10-12 14 views
9

क्या एक प्रोग्रामर डेटा है कि शायद ही कभी इस्तेमाल किया जाता है, लेकिन बस हटाया नहीं जा सकता क्योंकि कम से कम रिपोर्टिंग अभी भी यह आवश्यकता है संभाल करने की संभावनाएं हैं?लंबे समय तक चलने वाले सिस्टम के पुराने, अप्रचलित डेटाबेस डेटा से कैसे निपटें?

कुछ उदाहरण मैं सोच रहा हूँ

:

  • एक विश्वविद्यालय के पुराने साल की discountinued वित्त पोषण के प्रकार
  • अप्रयुक्त मुद्राओं (जैसे इतालवी लीरा)
  • गायब देशों के नाम (जैसे ऑस्ट्रो-हंगरी, सोवियत संघ)

कुछ आंशिक समाधान गतिविधि झंडे, गतिविधि अवधि, विज़ुअलाइज़ेशन की प्राथमिकताओं हैं, लेकिन उनमें से प्रत्येक का मतलब निर्णय के मामले में एक मामला है और यह जानना मुश्किल है कि इकाइयों के प्रकारों पर इस विशेष हैंडलिंग की आवश्यकता है।

इस समस्या के लिए एक डिज़ाइन पैटर्न हो सकता है।

निष्कर्ष: (उत्तर अब तक के आधार पर)

  • पुराने डेटा प्रतिदिन के काम में एक बहुत बड़ा डेटाबेस पर कठिन बना देता है, तो विभाजन उपयोगी होगा। इस विषय पर ओरेकल का विवरण here है।

  • डिजाइनर के दृष्टिकोण से Slowly changing dimension की वर्गीकरण कुछ पृष्ठभूमि जानकारी देता है। उन रिकॉर्ड संग्रह और पुराने संदर्भ डेटा निकालें:

उत्तर

4

पुराने प्रश्नों के साथ अधिकांश प्रश्नों में उपयोग नहीं किया जाता है, सबसे अच्छा समाधान उस कुंजी द्वारा तालिकाओं को विभाजित करना है जो मौजूदा डेटा (जैसे तिथि, मुद्रा_आईडी या उस तरह की चीजों) से बाँध को अलग करता है। फिर आप अलग-अलग तालिकाओं, डेटाबेस या यहां तक ​​कि सर्वरों में बाँध डेटा डाल सकते हैं (आपके द्वारा चल रहे कॉन्फ़िगरेशन के आधार पर)।

इस के नकारात्मक पक्ष यह है कि आपके आवेदन बन जाना चाहिए विभाजन अवगत जहां डेटा खोजने के लिए पता करने के लिए है (हालांकि इसका सारांश कि मदद sharding और partioning के साथ सौदा कर रहे हैं)।

+0

ऐसा लगता है कि विभाजन मुख्य रूप से प्रदर्शन में सुधार करता है और रखरखाव को सरल बनाता है लेकिन यह डिजाइनर की समस्या को हल नहीं करता है। – rics

+0

डिजाइनर कौन है, और प्रदर्शन और रखरखाव नहीं होने पर उनकी समस्याएं क्या हैं? –

0

एक समाधान हो सकता है (अप्रचलित डेटा का संदर्भ संभालने रिकॉर्ड सबसे पुराने हैं)।

+0

संग्रहण का अर्थ है कि मैं पहले से कार्यक्रमों से पुराने डेटा का उपयोग नहीं कर सकता, इसलिए उदाहरण के लिए 1 99 0 के इतालवी बैंक खातों से पूछताछ करना संभव नहीं होगा। – rics

1

कई मामलों में, मेरे पास पुराने डेटा और पुराने प्रोग्राम को उचित पढ़ने-योग्य अनुमति सेट के साथ डुप्लिकेट किया गया है। इस प्रकार उपयोगकर्ताओं के पुराने कार्यक्रम को देखने और पुरानी कार्यक्रम का उपयोग करके रिपोर्टिंग करने की क्षमता है। फिर आप आधुनिक कार्यक्रम को अग्रिम करने के लिए स्वतंत्र हैं, आप कॉलम या तालिकाओं को हटाने, कुछ डेटा माइग्रेट करने, आदि

1

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

एक सामान्य पैटर्न रिकॉर्ड पर "से/से" डेटाटाइम फ़ील्ड होना चाहिए। उस स्थिति में ऐतिहासिक रिपोर्टों में वे प्रकार शामिल हो सकते हैं जो अवधि के लिए प्रासंगिक हैं। (ए सरल समाधान रिकॉर्ड पर एक एक बूलियन "अप्रचलित" झंडा होगा, लेकिन बाद से इस जब यह प्रासंगिक था का संकेत नहीं है, यह अभ्यस्त ऐतिहासिक रिपोर्ट के लिए के रूप में सहायक हो।)

0

एरान ने विरोधाभास के बारे में क्या कहा, इसके अलावा, आप आंशिक रूप से अंतिम मॉड्यूलिफाइड कॉलम या इसी तरह के संग्रहित पैराशन में क्या रखना है, यह तय करने की प्रक्रिया को स्वचालित रूप से स्वचालित कर सकते हैं। फिर LastModified < -1 या तो के आधार पर केवल विभाजन करके, सिस्टम को पुराने डेटा के बारे में जानना चाहिए।

+0

लेकिन अब से प्रभावी होने के लिए एक वर्ष लग जाएगा;) –

1

यह मानक धीमी गति से बदलती आयाम समस्या है। आपके पास स्थिति और/या दिनांक सीमा के साथ एससीडी है।

"उनमें से प्रत्येक मामले निर्णय द्वारा एक मामले का मतलब है और यह पता है कि संस्थाओं के प्रकार इस विशेष से निपटने की जरूरत है कठिन है"

हां। उसके लिए माफ़ करना। आपको अपने डेटा का विश्लेषण करना और सोचना है। इस के सोच भाग के आसपास कोई आसान तरीका नहीं है।

+0

मुझे पता है कि कोई मुफ्त भोजन नहीं है। मुद्रा या देश के मामले में यह पहली नज़र में स्पष्ट है कि वे समय में बदल सकते हैं। लेकिन कम स्पष्ट संस्थाएं हैं और यदि उपयोगकर्ता व्यावसायिक तर्क नियमों को परिभाषित करते हैं, तो समय_ को समय दें जब उनके पहले प्रोग्रामर को स्थिति से निपटना होगा। – rics

+0

दाएं। प्रत्येक व्यक्ति एक विज्ञापन है - उस समय - अद्वितीय व्यापार नियम। कोई सामान्य समाधान नहीं। यह भी बड़े डेटा गोदामों के लिए सच है। विज्ञापन-लोकतंत्र के स्तर के आधार पर तीन अलग-अलग मानक एल्गोरिदम हैं। –

2

किसी भी इकाई के लिए जो सीमित जीवनकाल प्राप्त कर सकता है, बस इसकी परिभाषा में एक समय-घटक जोड़ें। जैसे अपने इतालवी लीरा तैयार किया जा सकता है:

CREATE TABLE Currency (CurrencyID NUMBER, CurrencyStartDate DATETIME, CurrentEndDate DATETIME) 

फिर आप की अवधि समाप्त हो मुद्राओं वर्तमान गतिविधि से संबंधित किसी भी आवेदन कार्यों से बाहर कर सकते हैं, और अभी भी ऐतिहासिक डेटा के लिए संबंध बनाए।

+0

मैंने इस समाधान को मेरे प्रश्न में गतिविधि अवधि के रूप में बुलाया है। इस दृष्टिकोण के साथ समस्या यह है कि प्रत्येक क्वेरी को मुद्रा की इस नई संपत्ति के बारे में पता होना चाहिए। – rics

+0

जिसे आप 'गतिविधि अवधि' कहते हैं उसे अन्यथा 'वैध समय' के रूप में जाना जाता है और यह अस्थायी डेटाबेस में एक महत्वपूर्ण अवधारणा है, जिसे मैंने यहां लिखा था: http://stackoverflow.com/questions/310963/relational-schema-for- यदि आप विवरण और शोध में रूचि रखते हैं तो फाउलर-टेम्पोरल-एक्सप्रेशन # 312534। –

0

वाणिज्यिक डीबीएमएस (इनफॉर्मिक्स, डीबी 2, शायद ओरेकल, ...) में विभाजन या विखंडन क्षमताएं हैं जैसे कि आप अलग-अलग टुकड़ों में अलग-अलग डेटा डाल सकते हैं, और क्वेरी ऑप्टिमाइज़र उन टुकड़ों को अनदेखा कर देगा जिन्हें पता है कि इसकी आवश्यकता नहीं है। आप कभी-कभी कम उपयोग किए गए डेटा को भंडारण क्षेत्रों में रखने के लिए इनका उपयोग कर सकते हैं केवल पुरातन डेटा के लिए उपयोग किया जाता है। इसका लाभ यह है कि सिस्टम प्लेसमेंट (ठीक है, सिस्टम प्लस डीबीए) से संबंधित है, और एप्लिकेशन इसके लिए पूरी तरह से अनजान हैं।

किसी भी योजना जिसके लिए रिपोर्टिंग अनुप्रयोगों में परिवर्तन की आवश्यकता होती है, कम से कम उन अनुप्रयोगों को तोड़ने के लिए बर्बाद हो जाती है।

1

मैं परिचालन प्रणाली और रिपोर्टिंग सिस्टम को अलग करने का सुझाव दूंगा। परिचालन के लिए एक डेटाबेस है - ऑनलाइन सिस्टम और रिपोर्टिंग के लिए दूसरा। (डेटा वेयरहाउस, या एक साधारण अन्य डेटाबेस) हो सकता है कि आप रिपोर्टिंग सिस्टम की बहुमुखी प्रतिभा के आधार पर कितने बहुमुखी हो सकते हैं।

समय-समय पर परिचालन प्रणाली से डेटा को रिपोर्टिंग सिस्टम में ले जाएं। (आवृत्ति आपके सिस्टम की प्रकृति पर निर्भर करती है)। सभी ऐतिहासिक रिपोर्ट रिपोर्टिंग डेटाबेस पर आधारित होंगी। ऑनलाइन डेटाबेस में रिपोर्ट भी शामिल होंगी, लेकिन ऐतिहासिक (बहुत) नहीं।

और, हाँ। यह तय करने के लिए कि किसी आइटम में की अवधि है या नहीं, आपको टेबल पर तिथियों या झंडे बनाए रखने की आवश्यकता है।

0

मुझे एक समान प्रश्न मिला: What is the best way to implement soft deletion? गतिविधि ध्वज समाधान से निपटने।

और यहाँ mysql और PostgreSQL के लिए गतिविधि झंडे `active’ flag or not? पर एक और एक है।

इन दो प्रश्नों के आधार पर गतिविधि झंडे और/या तालिका विभाजन समस्या के सबसे आम समाधान हैं।

0

आप पुराने डेटा को भी अपडेट कर सकते हैं। उदाहरण के लिए आप इतालवी लीरा राशि यूरो रकम में परिवर्तित कर सकते हैं। लेकिन यह वास्तव में मामला-दर-मामला निर्णय है।आप अपने सिस्टम और आवश्यकताओं को सबसे अच्छी तरह जानते हैं।

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