2010-03-28 13 views
19

भौतिक दृश्यों को कैसे कार्यान्वित करें?MySQL के साथ मटेरियलाइज्ड व्यू को कैसे कार्यान्वित करें?

यदि नहीं, तो मैं MySQL के साथ सामग्रीबद्ध दृश्य को कैसे कार्यान्वित कर सकता हूं?

अद्यतन:

चाहेंगे निम्नलिखित काम करता है? यह एक लेनदेन में नहीं होता है, क्या यह एक समस्या है?

DROP TABLE IF EXISTS `myDatabase`.`myMaterializedView`; 
CREATE TABLE `myDatabase`.`myMaterializedView` SELECT * from `myDatabase`.`myRegularView`; 
+2

[MySQL के साथ सामग्रीबद्ध दृश्य] पर एक नज़र डालें [http://www.fromdual.com/mysql-materialized-views) –

उत्तर

2

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

स्रोत दृश्यों की प्राथमिक कुंजी के विरुद्ध मौजूदा "दृश्य तालिका" में शामिल होने के बजाय आप सम्मिलित/अद्यतन (अपरर्ट) का उपयोग करके एक तेज़ रीफ्रेश अनुमान लगाएंगे (माना जाता है कि वे मुख्य संरक्षित हो सकते हैं) या अंतिम अद्यतन का दिनांक_टाइम रखते हुए , और रीफ्रेश समय को कम करने के लिए रीफ्रेश एसक्यूएल के मानदंडों में इसका उपयोग करना।

इसके अलावा, ड्रॉप/निर्माण के बजाए टेबल नामकरण का उपयोग करने पर विचार करें, इसलिए नया दृश्य बनाया जा सकता है और अनुपलब्धता के लगभग कोई अंतर नहीं हो सकता है। पहले एक नया टेबल 'mview_new' बनाएं, फिर 'mview' का नाम 'mview_old' (या इसे छोड़ दें) का नाम दें, और 'mview_new' को 'mview' में पुनर्नामित करें। आपके उपरोक्त नमूने में, आपका SQL अनुपलब्ध होने पर आपका दृश्य अनुपलब्ध होगा।

30

मैं फ्लेक्सव्यूज़ (http://github.com/greenlion/swanhart-tools) नामक एक प्रोजेक्ट को बनाए रखता हूं जो माईएसक्यूएल (उर्फ फास्ट रीफ्रेश) में वृद्धिशील रूप से रीफ्रेशेबल भौतिक दृश्य जोड़ता है, यहां तक ​​कि जुड़ने और एकत्रीकरण का उपयोग करने वाले विचारों के लिए भी। मैं इस परियोजना पर तीन साल से काम कर रहा हूं। इसमें डेटाबेस लॉग पढ़ने के लिए एक परिवर्तन डेटा कैप्चर उपयोगिता शामिल है। कोई ट्रिगर्स का उपयोग नहीं किया जाता है।

इसमें दो ताज़ा तरीके शामिल हैं। पहला आपके विधि के समान है, सिवाय इसके कि एक नया संस्करण बनाया गया है, और फिर पुराने नाम के लिए नए को स्वैप करने के लिए RENAME टेबल का उपयोग किया जाता है। किसी भी बिंदु पर क्वेरी के लिए अनुपलब्ध दृश्य नहीं है, लेकिन 2x स्पेस का उपयोग कम समय के लिए किया जाता है।

दूसरी विधि सच है "तेज़ ताज़ा करें", यहां तक ​​कि इसे एकत्रीकरण और जुड़ने के लिए समर्थन भी है।

इसके बारे में एक ब्लॉग पोस्ट है: http://www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/

Flexviews काफी astander द्वारा संदर्भित FromDual उदाहरण से और अधिक उन्नत है।

+0

लेकिन स्वानहार्ट-टूल्स जावा का समर्थन नहीं करते हैं? –

+0

फ्लेक्ससीडीसी को PHP 5.3+ की आवश्यकता है। यह एक बाहरी उपकरण है जो बाइनरी लॉग एकत्र करता है। शेष फ्लेक्सव्यू संग्रहीत दिनचर्या (प्रोग्राम जो रहते हैं और डेटाबेस में चलते हैं) से बनाए जाते हैं। यदि आप जेडीबीसी का उपयोग कर रहे हैं, तो आप फ्लेक्सव्यूज़ भौतिक दृश्यों को बना/एक्सेस नहीं कर सकते हैं, क्योंकि जेडीबीसी MySQL से कनेक्ट होता है, और आप SQL इंटरफ़ेस के माध्यम से दृश्य बनाते/देखते/बनाए रखते हैं। –

0

mySQL docs and comments at the bottom of the page के अनुसार, ऐसा लगता है कि लोग विचारों को बना रहे हैं और फिर उन विचारों से तालिकाओं का निर्माण कर रहे हैं। यह सुनिश्चित नहीं है कि यह समाधान भौतिक दृश्य बनाने के बराबर है, लेकिन ऐसा लगता है कि इस समय उपलब्ध एकमात्र एवेन्यू है।

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

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