रैस्टर डेटाबेस के लिए प्रश्नों को कैसे गति दें?


16

मेरे पास इन कॉलमों के साथ पोस्टग्रेजल / पोस्टगिस में एक रास्टर डेटाबेस है:

(ID, rast, data_of_data)

'रैस्ट' वह कॉलम है जिसमें डब्ल्यूकेटी प्रारूप में रेखापुंज फाइलें होती हैं। WGS84 प्रणाली (30.424, -1.66) में एक बिंदु के डीएन मान को खोजने के लिए एक उदाहरण क्वेरी और 2002-01-09 के लिए निम्नलिखित है:

SELECT 
     st_value(rast,(st_GeomFromText('POINT(30.424 -1.66)', 4326))) as val
FROM 
     my_table
WHERE
     date_of_data='2002-01-09'

क्या इस प्रकार के प्रश्नों को गति देने के लिए कोई विधि (जैसे स्थानिक सूचकांक) है?


शायद आप कुछ और विवरण प्रदान करके हमारी मदद कर सकते हैं: my_table में कितने रिकॉर्ड हैं? रास्टर कॉलम में डेटा कितना बड़ा है? आपके पास date_of_data में कितने विशिष्ट तिथियां हैं?
dwurf

इसे जोड़ें: रास्ट कॉलम का SRID क्या है?
dwurf

जवाबों:


12

यह एक रोमांचक सवाल है! आप कितना बड़ा रैस्टर क्वेरी करना चाहते हैं? WKTRaster डेटाबेस में BLOB के रूप में संग्रहीत होता है । किसी विशिष्ट बिंदु पर मान ज्ञात करने के लिए, ज्ञात (x_0, y_0) कोने से पंक्ति / स्तंभ सूचकांकों (i, j) का उपयोग कर गणना की जाती है (dx, dy) चरणों और रोटेशन। ज्ञात (i, j) के साथ, ST_Value () फ़ंक्शन सही बाइट ऑफसेट पर वास्तविक डेटा तक पहुंच सकता है।

इसका मतलब यह है कि एक बिंदु के लिए एक क्वेरी का जवाब देते समय DB को औसतन कम से कम आधे डेटा ब्लॉब पर पढ़ना पड़ता है (कार्यान्वयन के आधार पर यह वास्तव में सभी समय के सभी डेटा पढ़ सकता है)। इसलिए मुझे लगता है कि डेटा BLOBs बहुत बड़ी हो जाने पर WKTRaster प्रदर्शन भुगतना पड़ता है। डेटासेट को टैप करके प्रश्नों को गति देना चाहिए। इस ट्यूटोरियल में देखें कि SRTM डेटा (6000x6000 पिक्सेल विखंडू में कैसे आता है) संभाला जाता है । वे वास्तव में डेटा को वास्तव में छोटे 50x50 पिक्सल में टाइल करते हैं, जो कि एक स्पष्ट संकेत है कि मेरा अनुमान सच से बहुत दूर नहीं हो सकता है।

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


1
टाइलिंग चीज़ जाने का रास्ता लगती है - इस लिंक को देखें । आपको इस तरह एक इंडेक्स भी जोड़ना होगा: CREATE INDEX srtm_tiled_rast_gist_idx ON srtm_tiled USING GIST (ST_ConvexHull(rast));( स्रोत )
dwurf

4

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

दूसरे विचार (और मुझे यकीन नहीं है कि यह यहां प्रासंगिक है) मल्टी-बैंड रस्टर्स का उपयोग करना है। उदाहरण के लिए, यदि आप डेटा के मासिक स्लाइस देख रहे हैं, तो हर महीने एक रेखापुंज परत हो सकती है। फिर आप स्तरित रेखापुंज को क्वेरी करके अलग-अलग समय के स्लाइस में एक बिंदु के कई मान प्राप्त कर सकते हैं। मैंने इस दृष्टिकोण को अलग-अलग आपदाओं को क्वेरी करने की तुलना में बहुत तेज पाया।

अंत में, जब आप अपना डेटा लोड करते हैं तो TILE_SIZE के-t लिए ध्वज होता है । आप यह पता लगा सकते हैं कि आपके द्वारा उपयोग किए जा रहे टाइल का आकार आपकी क्वेरी के लिए अच्छा है।


यदि आपको एक ही पिक्सेल के मूल्य को एक ही समय में कई महीनों के लिए क्वेरी करने की आवश्यकता है (अपने उदाहरण के साथ छड़ी करने के लिए), उदाहरण के लिए समय श्रृंखला का विश्लेषण करने में मदद करने के लिए मल्टीबांड रस्टर्स । प्रश्न में क्वेरी केवल एक विशिष्ट तिथि को पुनः प्राप्त करती है। यदि तिथि एक बैंड में समाहित थी, तो DBMS को अन्य सभी बैंडों को भी पढ़ने की आवश्यकता होगी, भले ही वे क्वेरी का उत्तर देने के लिए कोई रुचि नहीं रखते हों। यह शायद खराब प्रदर्शन होगा।
bhell

मैं सहमत हूं - शायद मैंने इस बात पर जोर नहीं दिया कि यह तभी उपयोगी है जब एक ही समय में कई मूल्यों की आवश्यकता हो; मैं यह स्पष्ट करूंगा।
djq 15

3

आपके डेटा के वितरण के आधार पर, आपको date_of_dataकॉलम को इंडेक्स करके कुछ बहुत अच्छे स्पीडअप मिल सकते हैं ।

आप यह पता लगाने के लिए EXALAIN ANALYZE सिंटैक्स का उपयोग कर सकते हैं कि आपके इंडेक्स का उपयोग किया जा रहा है या नहीं।


किस तरह का सूचकांक? क्या आप अधिक विस्तार से बताएंगे?
f.ashuri

बस एक मानक btree सूचकांक create index tbl_name_date_idx on tbl_name (date_of_data):। यदि आपके पास कई अलग-अलग तिथियां हैं, तो इससे डेटा की मात्रा में भारी कटौती हो जाएगी जिसे PostGIS को संसाधित करना होगा।
dwurf

धन्यवाद, लेकिन यह मेरी क्वेरी के लिए काम नहीं किया।
एफ। अशौरी

यह कैसे काम नहीं किया? कोई ध्यान देने योग्य प्रदर्शन लाभ, या अन्य समस्याएं? यदि आपके पास एक तालिका स्तंभ है जो नियमित रूप से एक WHEREखंड में दिखाई देता है , तो आपको हमेशा इसे अनुक्रमित करने पर विचार करना चाहिए। यदि आपके पास कई अलग-अलग तिथियां (यानी एक बड़ा मूल्य डोमेन) है, लेकिन यह भी यदि आपके पास तालिका में बड़ी संख्या में रिकॉर्ड हैं, तो यह इस मामले में मदद नहीं करेगा।
bhell

क्या सूचकांक का उपयोग कर रहा है? आप के उत्पादन में pastebin कर सकते हैं explain analyze SELECT st_value(rast,(st_GeomFromText('POINT(30.424 -1.66)', 4326))) as val from my_table where date_of_data='2002-01-09'?
dwurf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.