2011-06-07 7 views
10

तैयार रिपोर्टिंग तालिका को रीफ्रेश करने में लगभग 5-10 मिनट लगते हैं। हम इस तालिका को लगातार ताज़ा करना चाहते हैं (शायद हर 15 मिनट या लगातार)।मैं समय-समय पर एक रिपोर्टिंग तालिका का पुनर्निर्माण कैसे करूं जिसे अक्सर उपयोग किया जाता है?

हम इस रिपोर्टिंग तालिका को अक्सर पूछते हैं (कई बार प्रति मिनट) और मैं इसे किसी भी समय तक नहीं रख सकता। यह ठीक है अगर डेटा 15 मिनट पुराना है।

मैं तालिका को छोड़ नहीं सकता और इसे फिर से बना सकता हूं। मैं तालिका की सामग्री को हटा नहीं सकता और इसे फिर से बना सकता हूं।

क्या ऐसी तकनीक है जिसका उपयोग मुझे करना चाहिए, जैसे कि दो तालिकाओं के बीच स्वैपिंग (एक दूसरे से बनाते समय पढ़ें) या क्या मैं इसे 5-10 मिनट की प्रक्रिया को बड़े लेनदेन में डाल सकता हूं?

+0

जब आपने अपना समाधान लागू किया, तो क्या आपने sp_getapplock का उपयोग किया था? और, यदि आपने किया, तो sp_getapplock केवल डीआरओपी को घेर रहा था और आपके SYNONYM का निर्माण करेगा? – mg1075

उत्तर

13

Use synonyms?। सृजन पर यह अंक तालिका ए को।

CREATE SYNONYM ReportingTable FOR dbo.tableA; 

15 मिनट बाद आप tableB बना सकते हैं और पर्याय

DROP SYNONYM ReportingTable; 
CREATE SYNONYM ReportingTable FOR dbo.tableB; 

को फिर से परिभाषित पर्याय केवल वास्तविक मेज पर एक सूचक है: इस तरह से वास्तविक तालिका से निपटने का नाम बदलता है आदि को सरल बनाया और दूर निकाला है और सभी कोड/ग्राहकों का प्रयोग करेंगे ReportingTable

संपादित करें, 24 नवंबर 2011

समानार्थी सभी संस्करण में उपलब्ध हैं: Partitio एन स्विचिंग केवल एंटरप्राइज़/डेवलपर है।

संपादित करें, फ़रवरी 2012

आप में मानक संस्करण (शायद एक्सप्रेस, untested)

ALTER TABLE .. SWITCH .. 

यह अगर लक्ष्य तालिका खाली है समानार्थी शब्द की तुलना में अधिक सुंदर हो जाएगा पूरे टेबल बदल सकते हैं।

संपादित करें, फ़रवरी 2012 (2)

इसके अलावा, आप स्कीमा के माध्यम से के रूप में प्रति Caching joined tables in SQL Server

+0

पर ध्यान दिए बिना अद्वितीय होने की आवश्यकता है यदि समानार्थी लगातार उपयोग में है, तो क्या त्रुटियों के बिना इसे फिर से बनाना संभव है? क्या इसे पुनः प्रयास तंत्र की आवश्यकता है? –

+0

@ क्रिस सिम्पसन: समानार्थी उपयोग में नहीं है * प्रति से *। इसे ड्रॉ करें और ब्रेक कॉल करें: यह किसी भी चीज़ को लॉक या अवरुद्ध नहीं करेगा। एक लेनदेन में ड्रॉप/क्रेट को लपेटना इसे ठीक करना चाहिए: यह अभी भी हल्का है, फिर टेबल – gbn

+0

के साथ गड़बड़ करना दिलचस्प है। इसलिए डीआरओपी की अनुमति होगी क्योंकि समानार्थी शब्द चलने वाली क्वेरी में वास्तविक तालिका में पहले ही हल हो चुका है। मैं लेनदेन में स्कीमा परिवर्तनों को लपेटने के बारे में उत्सुक था और इस के जवाब में आया: http://stackoverflow.com/questions/4166989/alternate-synonym-in-sql-server-in-one-transaction, क्या यह फायदेमंद होगा यहाँ? –

0

दो तालिकाओं को सरल समाधान की तरह लगता है।

+0

और क्या उनके बीच स्वैप करने का कोई आसान तरीका है, या यह समझने के लिए कि किस का उपयोग करना है? अगर मुझे दो टेबलों को इंगित करने के लिए मेरे सभी पठन प्रश्नों को बदलना है, तो यह बहुत चरम लगता है। – Jason

+0

मैं लेनदेन के अंदर टेबल का नाम बदलूंगा। – MRAB

+0

ऑब्जेक्ट नामों को अभी भी लेनदेन – gbn

1

हां, आपको टेबल स्वैप करना चाहिए, और यदि पहले से नहीं किया गया है, तो रिपोर्टिंग तालिका के लिए एक अलग सर्वर या अन्य भौतिक विभाजन का उपयोग करने पर विचार करें।

वास्तविक समय रिपोर्टिंग के लिए अनुशंसित दृष्टिकोण ऑपरेशन सिस्टम से ऑफ़लोड लोड करना है, और रिपोर्टिंग सिस्टम में पढ़ने की गतिविधि से अलग लेखन गतिविधि को अलग करना है।

आपने तैयार तालिका बनाकर कम से कम तार्किक रूप से पहला भाग किया है। उपयोगकर्ताओं के लिए केवल पढ़ने योग्य तालिका के बीच स्वैपिंग और अपडेट के लिए एक अलग तालिका लेनदेन के बीच लिखने-पढ़ने के संघर्ष को समाप्त करती है। लागत उपयोगकर्ताओं के लिए कैश विलंबता है, लेकिन यदि आवश्यक हो, तो तैयारी के समय को कम करने के लिए कदम उठाना संभव है और तालिकाओं को अधिक बार स्वैप करना चाहिए।

रीयल-टाइम रिपोर्टिंग में डिज़ाइन विकल्पों पर अधिक जानकारी के लिए, मैं वेन एकर्सन, Best Practices in Operational BI द्वारा एक अच्छी तरह लिखित पेपर की अनुशंसा करता हूं।

0

हमारे परियोजना में, हम दो तालिकाओं का इस्तेमाल किया घुमाने के लिए, और स्विच करने के लिए/ऑल्टर दृश्य बना सकते हैं।

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