2010-02-22 11 views
8

समय-समय पर उन रिपोर्ट चलाने के लिए डेटाबेस उपयोगकर्ताओं CRUD संचालन कर रही है अवरुद्ध और पैदा कर रहा टाइम-आउट कर रहे हैं। मैं रिपोर्ट उपयोगकर्ताओं के लिए वर्तमान तालिकाओं के डुप्लिकेट स्थान बनाना चाहता हूं।अलग टेबल/रिपोर्टिंग और CRUD संचालन

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

क्या यह एक अच्छा/बुरा विचार है? मुझे किस नुकसान के लिए देखना चाहिए? क्या ऐसा करने के लिए इससे अच्छा तरीका है?

उत्तर

3

यह एक अच्छा विचार की तरह लगता है। मेरी एकमात्र चिंता यह है कि क्या आपको हर 10 मिनट में अपडेट करने की ज़रूरत है? यह अद्यतन चल रहा है, जबकि यह चीजों को भी धीमा कर सकता है। आम तौर पर इन्हें रात भर किया जाता है (दूसरों के लिए कम से कम प्रभाव पड़ता है), या यदि दिन के दौरान, केवल 3 निश्चित बिंदुओं पर (10 बजे, 1 बजे, और 4 बजे कहें)।

+1

हर 10 मिनट में 30 सेकंड बैकअप चलाना लगभग 5% डाउनटाइम दे रहा है ... – cjk

+0

बैकअप/पुनर्स्थापित के दौरान कौन प्रभावित होगा? क्या यह केवल पुनर्स्थापना के दौरान रिपोर्ट उपयोगकर्ताओं को है? – GernBlandston

+0

इसके अलावा, अगर मैं डीबी को एक स्टेजिंग डीबी में पुनर्स्थापित करता हूं, तो रिपोर्टिंग डीबी को छोड़ दें और रिपोर्टिंग डीबी में स्टेजिंग डीबी का नाम बदलें? – GernBlandston

1

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

1

लगातार बैकअप लेने से सावधान रहें - कि डाउनटाइम की एक बहुत कुछ करने के लिए ले जा सकता है!

आम समाधान

यह वास्तव में एक आम बात सिर्फ रिपोर्टिंग के लिए एक अलग इंस्टेंस तैयार करना है।

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

उन दोनों को प्रतिकृति (जो डाउनटाइम समस्या से बचाता है) के साथ संभाला जा सकता है। या आप बस रात के बैकअप और उसके खिलाफ रिपोर्ट कर सकते हैं।

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

अंतिम विचार

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

यह सवाल बहुत समान है: https://stackoverflow.com/questions/190512/sql-server-separate-database-for-reports

2

इससे पहले कि आप एक फोर्कलिफ्ट उन्नयन करते हैं, आप

...from sometable WITH (NOLOCK) 
अपनी रिपोर्टिंग प्रश्नों पर

डाल समस्या को कम करता है, तो देख सकते हैं। इष्टतम क्या है यह जानने के लिए कम से कम आपको कुछ समय मिल सकता है।

+0

लेकिन याद रखें कि आपको इस तरह गंदा पढ़ा जाएगा, यह रिपोर्टिंग में एक समस्या हो सकती है। – HLGEM

+0

@HLGEM - सच है, लेकिन डेटा वर्तमान योजना पर 10 मिनट पुराना है! एंटरप्राइज़ साइज डेटाबेस के खिलाफ बहुत बड़े प्रश्नों के चलते हमारे पास अतीत में इसी तरह के मुद्दे थे और नोलोक ने * विशाल * अंतर बनाया। पीके :-) –

+0

यह बताते हुए कि यह परिणाम अंतर कर सकता है। यदि आप गंदे पढ़ने के साथ रह सकते हैं तो यह एक बात है, लेकिन पोस्टर को यह जानने की जरूरत है कि वह क्या प्राप्त करेगा। – HLGEM

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