2009-04-10 7 views
27

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

लेकिन मैं बहुआयामी OLAP डेटा मॉडल के बारे में कुछ भी पता नहीं है, और मैं एक मुश्किल समय इंटरनेट पर किसी भी उपयोगी जानकारी पाने लिया है।

कैसे जानकारी डिस्क पर संग्रहीत किया जाता है? डेटा संरचनाओं में घन शामिल है? यदि एक एमओएलएपी मॉडल कॉलम और रिकॉर्ड्स के साथ तालिकाओं का उपयोग नहीं करता है, तो ... क्या? विशेष रूप से अत्यधिक आयामी डेटा में, किस प्रकार के डेटा संरचनाएं एमओएलएपी मॉडल को इतना कुशल बनाती हैं? क्या एमओएलएपी कार्यान्वयन आरडीबीएमएस इंडेक्स के समान कुछ उपयोग करते हैं?

क्यों OLAP सर्वर इतना प्रसंस्करण तदर्थ प्रश्नों में बेहतर कर रहे हैं? एकत्रित कि घंटे लग सकता है एक साधारण रिलेशनल डेटाबेस में कार्रवाई करने के लिए के एक ही प्रकार के एक OLTP घन में मिलीसेकेंड में संसाधित किया जा सकता। मॉडल के अंतर्निहित यांत्रिकी क्या हैं जो इसे संभव बनाते हैं?

उत्तर

18

मैं प्रणाली है कि mimiced क्या OLAP क्यूब्स कर के एक जोड़े को लागू किया, और यहाँ हमने किया चीजों के एक जोड़े के लिए उन्हें काम करने के लिए प्राप्त करने के लिए कर रहे हैं।

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

2) अंतर्निहित सरणी अक्सर स्पैस होती थी, इसलिए एक बार जब यह बनाया गया था तो हम स्मृति को बचाने के लिए सभी रिक्त कक्षों को निकालने के लिए उपयोग करते थे - हार्ड कोर पॉइंटर अंकगणित के बहुत सारे लेकिन यह काम करता था।

3) हम था के रूप में चाबियों का heirarchies, हम आसानी से एक पदानुक्रम नीचे/ऊपर ड्रिल काफी आसानी से दिनचर्या लिख ​​सकते हैं। उदाहरण के लिए हम महीनों की चाबियों के माध्यम से डेटा का वर्ष प्राप्त करेंगे, जो बदले में दिनों और/या सप्ताहों में मैप किए जाते हैं। प्रत्येक स्तर पर हम क्यूब-निर्मित गणनाओं को बहुत तेज़ी से बनाने के हिस्से के रूप में डेटा एकत्र करेंगे।

4) हमने किसी भी प्रकार की क्वेरी भाषा को लागू नहीं किया है, लेकिन हमने सभी धुरी (हमारे सबसे बड़े क्यूब्स में 7 तक) पर ड्रिल डाउन किया है, और यह उन यूआई को सीधे बांध दिया गया था जिन्हें उपयोगकर्ता पसंद करते थे।

5) हमने सी ++ में मुख्य सामग्री लागू की, लेकिन इन दिनों मुझे लगता है कि सी # पर्याप्त तेज़ हो सकता है, लेकिन मुझे चिंता है कि स्पैर एरे को कैसे कार्यान्वित किया जाए।

आशा है कि मदद करता है, दिलचस्प ध्वनि।

5

पुस्तक Microsoft SQL Server 2008 Analysis Services Unleashed अच्छी जानकारी में एसएसएएस 2008 की कुछ विशेषताओं को बताती है। यह काफी नहीं है "यहां ठीक है कि कैसे एसएसएएस हुड के तहत काम करता है", लेकिन यह विशेष रूप से डेटा संरचना पक्ष पर, काफी सुसंगत है। बातें मैं इस क्षेत्र में एक शौकिया के रूप में, इस पुस्तक से इकट्ठा के कुछ (यह काफी के रूप में विस्तृत/सटीक एल्गोरिदम के बारे में विशिष्ट नहीं है।)।

  • बहुआयामी क्यूब्स, तथ्य तालिका (उर्फ समूह को मापने) डेटा अभी भी है, एक पहली सन्निकटन है, अंत में मूल रूप से 2 डी तालिकाओं में संग्रहीत है, वास्तव में एक पंक्ति के बारे में सभी बात के बावजूद: यह सब के बारे में SSAS MOLAP है । कई ओलाप ऑपरेशंस अंत में 2 डी टेबल में पंक्तियों पर पुनरावृत्त होते हैं।
  • हालांकि, संबंधित SQL तालिका के अंदर डेटा मोलाप के अंदर संभावित रूप से बहुत छोटा है। एक चाल यह है कि प्रत्येक अद्वितीय स्ट्रिंग केवल एक बार "स्ट्रिंग स्टोर" में संग्रहीत होती है। डेटा संरचनाएं स्ट्रिंग को अधिक कॉम्पैक्ट रूप में संदर्भित कर सकती हैं (मूल रूप से स्ट्रिंग आईडी द्वारा)। एसएसएएस कुछ रूपों में एमओएलएपी स्टोर के भीतर पंक्तियों को भी संपीड़ित करता है। यह घटते हुए मुझे लगता है कि अधिक डेटा डेटा रैम में एक साथ रहने देता है, जो अच्छा है।
  • इसी प्रकार, एसएसएएस अक्सर पूर्ण डेटासेट की बजाय डेटा के सबसेट पर फिर से चला सकता है। कुछ तंत्र खेल रहे हैं:
    • डिफ़ॉल्ट रूप से, एसएसएएस प्रत्येक आयाम/विशेषता मान के लिए हैश इंडेक्स बनाता है; इस प्रकार यह "तुरंत दूर" जानता है कि डिस्क पर कौन से पृष्ठ प्रासंगिक डेटा हैं, कहें, वर्ष = 1 99 7।
    • एक कैशिंग आर्किटेक्चर है जहां डेटा के प्रासंगिक सबसेट पूरे डेटासेट से अलग रैम में संग्रहीत किए जाते हैं। उदाहरण के लिए, हो सकता है कि आपने एक सबक्यूब कैश किया हो जिसमें आपके कुछ फ़ील्ड हैं, और यह केवल 1 99 7 से डेटा से संबंधित है। यदि कोई प्रश्न केवल 1997 के बारे में पूछ रहा है, तो यह केवल उस उपक्यूब पर ही सक्रिय हो जाएगा, जिससे चीजों को तेज़ी से बढ़ाया जा सकेगा । (लेकिन ध्यान दें कि एक "सबक्यूब", पहले अनुमान के लिए, केवल एक 2 डी तालिका है।)
    • यदि आप पूर्वनिर्धारित समेकित हैं, तो इन छोटे सबसेट को केवल गणना/कैश किए जाने के बजाय घन प्रोसेसिंग समय पर प्रीकंप्यूटेड किया जा सकता है मांग पर।
  • एसएसएएस तथ्य तालिका पंक्तियां निश्चित आकार हैं, जो संभावित रूप से कुछ रूपों में मदद करती है। (एसक्यूएल में, कॉन्सस्ट्रास्ट में, आपके पास चर-चौड़ाई वाली स्ट्रिंग कॉलम हो सकती हैं।)
  • कैशिंग आर्किटेक्चर का यह भी अर्थ है कि, एक बार एकत्रीकरण की गणना हो जाने के बाद, इसे डिस्क से दोबारा रीसेट करने की आवश्यकता नहीं होती है और बार-बार पुनः संयोजित किया जाता है।

एसएसएएस में वैसे भी ये कुछ कारक हैं। मैं दावा नहीं कर सकता कि अन्य महत्वपूर्ण चीजें भी नहीं हैं।

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

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