2009-05-07 10 views
10

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

उदाहरण के लिए, निम्न URL के साथ एक पहुँच लॉग दी अनुरोध किया जा रहा:

/ocp/about_us.html 
/ocp/security/ed-209/patches/urgent.html 
/ocp/security/rc/ 
/ocp/food/ 
/weyland-yutani/products/ 

मैं जैसे प्रश्नों क्या करना चाहते हैं:

  • गणना 'नीचे' सब कुछ के लिए अनुरोध की संख्या/ओसीपी।
  • उपर्युक्त जैसा ही है, लेकिन केवल/ocp/security
  • के अंतर्गत बाल नोड्स के लिए अनुरोधों की गणना करें शीर्ष 5 सबसे अधिक बार अनुरोध किए गए URL लौटें।
  • के रूप में ऊपर ही, एक मनमाना गहराई से समूह के अलावा,

उदा ऊपर पिछले क्वेरी के लिए, डेटा के लिए गहराई 2 वापसी होगी:

2: /ocp/security/ 
1: /ocp/ 
1: /ocp/food/ 
1: /weyland-yutani/products/ 

मुझे लगता है कि आदर्श दृष्टिकोण शायद एक स्तंभ डीबी का उपयोग करें और यूआरएल के प्रत्येक तत्व के लिए एक स्तंभ है ऐसी है कि वहाँ यूआरएल tokenize होगा । हालांकि, यदि संभव हो तो मैं ओपन सोर्स ऐप्स के साथ ऐसा करने का एक तरीका खोजना चाहूंगा। एचबीएएस एक संभावना है, लेकिन वास्तविक प्रदर्शन प्रश्नों के लिए क्वेरी प्रदर्शन बहुत धीमा प्रतीत होता है (साथ ही, मैं वास्तव में एसक्यूएल को पुन: कार्यान्वित करने के व्यवसाय में नहीं होना चाहता)

मुझे पता है कि वाणिज्यिक हैं इस प्रकार के एनालिटिक्स करने के लिए ऐप्स, लेकिन विभिन्न कारणों से मैं इसे स्वयं लागू करना चाहता हूं।

उत्तर

13

एक संबंधपरक डेटाबेस के शीर्ष पर एक श्रेणीबद्ध डेटा संरचना को डिजाइन करने में बहुत अधिक समय निवेश करने से पहले, उत्कृष्ट प्रस्तुति में "Naive Trees" section (starting at slide 48) पढ़ने एसक्यूएल विरोधी पैटर्न हड़ताल वापस विधेयक Karwin से विचार करें। विधेयक की रूपरेखा एक पदानुक्रम के विकास के लिए निम्न विधियों:

  1. पथ गणन
  2. नेस्टेड सेट (स्लाइड 58)
  3. बंद तालिका (स्लाइड 68)
+1

अच्छी प्रस्तुति, धन्यवाद! – Rob

0

आप SQL Server 2008 या ओरेकल में इसके बराबर में HIERARCHYID डेटाटाइप चेकआउट करना चाहेंगे।

3

पेड़ आम तौर पर नहीं कर रहे हैं (55 स्लाइड) डेटाबेस में बहुत कुशल है। मेरा मतलब है: यदि आप अपने माता-पिता को इंगित करने वाले आइटमों के साथ पेड़ को वास्तव में रिकर्सिव बनाने के लिए डिज़ाइन करेंगे, तो आपको सभी उप-नोड्स खोजने के लिए बहुत सारे प्रश्न मिलेंगे।

लेकिन आप अपनी आवश्यकताओं के अनुसार पेड़ को अनुकूलित कर सकते हैं।

यूआरएल के किसी भी हिस्से को कॉलम में रखें, कोई बुरा विचार नहीं है। आपको गहराई को उप-नोड्स की एक निश्चित संख्या तक सीमित करने की आवश्यकता है। आपके पास किसी भी कॉलम पर इंडेक्स हो सकते हैं, जो इसे बहुत तेज़ बनाता है।इस तरह की संरचना पर

प्रश्नों बहुत सरल कर रहे हैं:

Select count(*) From Hits where node1 = 'ocp' AND node2 = 'security'; 

एक पहुँच आंकड़ा करें:

SELECT node1, node2, count(*) as "number of hits" 
FROM hits 
GROUP BY node1, node2 
ORDER BY count(*) DESC 

आप

node1   node2  number of hits 
'ocp'      23345 
'ocp'   'security' 1020 
'ocp'   'food'  234 
'weyland-yutani' 'products'  22 

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

मुझे लगता है कि आप इसे बड़ी मात्रा में डेटा स्टोर करने के लिए पर्याप्त डेटाबेस के साथ ऐसा कर सकते हैं। उदाहरण के लिए MySQL।

+0

किसी डेटाबेस में पेड़ों को संग्रहीत करने के लिए आप नेस्टेड सेट मॉडल में देखना चाहेंगे। –

2

स्टीफन फरौल्ट द्वारा The Art of Sql पुस्तक, एक बहुत ही उत्कृष्ट अध्याय (7 - श्रेणीबद्ध डेटा के साथ काम करना) है जो संबंधपरक डेटाबेस का उपयोग करके पेड़ों को संग्रहित और पूछताछ के लिए 3 विधियों की व्याख्या करता है और तुलना करता है।

यदि आप गंभीर, औद्योगिक-शक्ति कार्यान्वयन कर रहे हैं, तो अध्याय का अध्ययन करने में समय लगेगा।

1

मुझे लगता है कि इस प्रकार के डेटा को स्टोर करने का सबसे प्रभावी तरीका भागों के विस्फोट (या पदानुक्रम) तालिका में है।

एक भाग विस्फोट तालिका में तीन कॉलम होते हैं: एक पहचान, माता-पिता, और एक विवरण। उदाहरण डेटा के लिए, तालिका कुछ इस तरह दिखेगा:

Identity Parent Description 
0  Null ocp 
1  0  about_us.html 
2  0  security 
3  2  ed-209 
4  3  patches 
5  4  urgent.html 
6  2  rc 
7  0  food 
8  Null weyland-yutani 
9  8  products 

यूआरएल (विस्फोट) तालिका के रूप में डाला जा रहा है, एक मेज है कि प्रत्येक URL के पत्ती रिकॉर्ड पॉप्युलेट। उदाहरण डेटा से:

Leaf ID 
------- 
1 
5 
6 
7 
9 

मुझे विश्वास है कि आप इन दो तालिकाओं से शुरू होने वाले अपने सभी सवालों का जवाब दे सकते हैं।

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

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