2009-03-11 12 views
5

स्टेजिंग टेबल एक एंटी-पैटर्न हैं जो आरपीसी (जैसे जावा आरएमआई या किसी प्रकार की वेब सेवा कॉल) या मैसेजिंग कतार (जैसे जेएमएस) के रूप में उपयोग किया जाता है, एक बेहतर समाधान होगा, या स्टेजिंग टेबल द्वारा बेहतर ढंग से सेवा की जाने वाली समस्याएं हैं ?स्टेजिंग टेबल/स्टेजिंग डेटाबेस एक विरोधी पैटर्न हैं?

स्पष्ट करने के लिए:

तालिकाओं के मंचन से मेरा उन मामलों में जहाँ रिकॉर्ड एक प्रक्रिया है जो तब तक पढ़ा है और दूसरी प्रक्रिया या प्रक्रियाओं के द्वारा पर काम किया जाता है के द्वारा एक मेज या टेबल के साथ जोड़ दिया जाता है मतलब है। मैं उन तालिकाओं का जिक्र नहीं कर रहा हूं जो अंतराल की स्थिति (दिन का अंत, वेतन अवधि के अंत आदि) के अंत को दर्शाने के लिए हैं। ज्यादातर मामलों में, स्टेजिंग टेबल की स्कीमा ग्राहक या खाते जैसे अनुप्रयोग डेटा प्रकार की नकल की नकल करती है।

इस विरोधी पैटर्न के लिए संभावित कारण:

1) दो प्रक्रियाओं के मालिकों के बीच बिजनेस यूनिट दीवार प्रक्रिया है कि करने के लिए लिखते हैं या से मचान संशोधित की जा रही पढ़ता रोकता है।

2) प्रक्रिया है कि करने के लिए लिखते हैं या पढ़ता है मचान डेवलपर्स की ओर जाता है तालिका का उपयोग करने से डेटा की हानि को रोकने के लिए से में कम विश्वास "मामले में कुछ विफल रहता है"

3) ज्ञान या DGAS (एक देना नहीं है की कमी^% $ @) रवैया

उत्तर

11

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

डेटा को एक स्टेजिंग टेबल पर खींचकर, आप इसे उत्पादन वातावरण से बाहर ले जा रहे हैं, संभावित रूप से आगे की गणना, सारांश, पुन: अनुक्रमणिका, पुनः-कुंजीिंग और अन्य करने के लिए, इनमें से अधिकतर 'इनके' डेटाबेस'। इसे एक आरपीसी के साथ बदलकर आप डीबी से कोड और सीपीयू चक्र को किसी वास्तविक लाभ के लिए ऐप सर्वर में ले जा रहे हैं। उदाहरण के लिए एक ऐप सर्वर में क्रैश होने का बहुत अधिक मौका होता है - आप आरपीसी को आसानी से रोलबैक नहीं कर सकते हैं।

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

0

एकमात्र वास्तविक समय मैंने इसे देखा है क्योंकि रिपोर्टिंग उत्पन्न होने पर डेटा को पकड़ने के लिए denormalised तालिकाओं का उपयोग किया जाता है। मुझे नहीं लगता कि यह उस उपयोग के लिए एक समस्या है।

0

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

मैं एक ईएमएस (जैसे जेएमएस) को संदेश को प्रसारित करना चाहता हूं, यह संदेश किसी ऐसे विषय पर प्रसारित करता है जो रिसीवर और डेटाबेस इंसर्टर दोनों सुनता है, या कमांडर से रिसीवर तक एक कतार, और फिर रिसीवर एक स्टेटस श्रोता को सूचित करने के लिए सूचित करता है डेटाबेस में इसकी स्थिति।

मैं उस कोड को ठीक करने के लिए प्रतीक्षा नहीं कर सकता।

6

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

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