टाइल कैशिंग गति (टाइलस्टैच) बढ़ाएँ


13

मैं टाइलस्टैच का उपयोग करके वेक्टर टाइल की सेवा कर रहा हूं , मेरे पास सब कुछ है जैसे मैं चाहता हूं। मेरा डेटा Postgres में संग्रहीत है और मैं जेकजेसन टाइलों की सेवा के लिए VecTiles प्रदाता का उपयोग कर रहा हूं ।

मैं अपनी सभी टाइलों को कैश करना चाहता हूं ताकि टाइल्स तेजी से काम कर सकें। मैं अपना कैश निकालने के लिए tilestache-seed.py का उपयोग कर रहा हूं। मैं कई मशीनों पर tilestache-seed चला रहा हूं । टीलस्टैच-सीड ने वास्तव में ज़ूम लेवल 13 पर अच्छी तरह से काम किया, लेकिन इसके बाद टाइल्स को कैश करने में काफी समय लग रहा है। बस ज़ूम लेवल 16 के लिए मेरे पास 5023772 टाइलें कैश करने के लिए हैं, और मुझे प्रत्येक मशीन पर प्रति दिन केवल 100k-200k टाइलें मिल रही हैं।

मैं अपनी टाइलें कैश को तेज़ी से कैसे बना सकता हूं ? वहाँ tilestache-seed.py को ठीक करने और इसे तेजी से बीज बनाने का एक तरीका है ?

अपडेट: मैंने अपने टेबल पर (ज्यामिति स्तंभ पर और जहां क्लॉज के माध्यम से डेटा को फ़िल्टर करने के लिए उपयोग किए गए कॉलम) पर स्थानिक सूचकांक बनाने की कोशिश की है और मैंने अभी भी टाइलिंग गति में उल्लेखनीय वृद्धि नहीं देखी है। इस दर पर केवल ज़ूम 17 में मुझे एक महीना लगेगा और यह समय केवल तेजी से बढ़ेगा क्योंकि मैं ज़ूम 21 की ओर बढ़ूंगा

अद्यतन 2: मैंने भौतिक विचारों को बनाने की कोशिश की और प्रदर्शन में कोई परिवर्तन नहीं हुआ है, इसलिए डेटाबेस का अनुकूलन काम नहीं कर रहा है। मुझे लगता है कि मुझे खुद tilestache-seed.py का अनुकूलन करना होगा, या टाइल्स को कैश करने के लिए एक नया तरीका तैयार करना होगा।

हार्डवेयर जानकारी मैं 8 अलग-अलग पीसी पर कैशिंग प्रक्रियाएं चला रहा हूं, जिनमें से एक i7 है जिसमें 32 जीबी रैम है और दूसरा 4 जीबी रैम के साथ एक i3 है लेकिन वे दोनों मुझे लगभग एक ही कैशिंग गति (प्रति दिन लगभग 100k टाइल) देते हैं

जवाबों:


5

मैं कहूंगा कि 15 से अधिक ज़ूम करने के लिए, यदि आप अपनी रुचि के क्षेत्र को छोटे क्षेत्रों (बाउंडिंग बॉक्स) में विभाजित करते हैं, तो आप उन्हें एक मशीन पर कई प्रक्रियाओं को चलाकर बहुत कम समय में कैश कर पाएंगे।

उदाहरण के लिए, आप एक मशीन पर ज़ूम 16 (50,000,00 टाइल वाले) चला रहे हैं और आपकी औसत टाइल-कैशिंग गति के अनुसार, यह प्रक्रिया लगभग 40-50 दिनों में पूरी हो जाएगी। कहते हैं कि आप इन टाइलों को दो में विभाजित करते हैं और उन्हें एक साथ मशीन पर चलाते हैं, फिर आप उन्हें 20-25 दिनों में कैश कर पाएंगे क्योंकि टाइलस्टैच सीडिंग प्रक्रिया एकल टाइल कैशिंग प्रक्रिया के लिए आपके प्रोसेसर का लगभग 30 प्रतिशत ही उपयोग करती है और मुझे पता है ऐसा इसलिए है क्योंकि मेरे पास एक ही मुद्दा है और कुछ अतिरिक्त तक यह मेरी समस्या को हल करता है।

यदि आप किसी मशीन या कई प्रक्रियाओं पर एकल प्रक्रिया चला रहे हैं, लेकिन CPU उपयोग बढ़ाया जाएगा, तो यह टाइल-कैशिंग गति को प्रभावित नहीं करेगा।

उम्मीद है इससे आपको मदद मिलेगी।


ऐसा लगता है कि अब तक की सबसे अच्छी बात है, मैं इसे आज़मा कर देखूंगा कि क्या होता है।
हसन मुस्तफा

यह अब तक मैंने पाया सबसे अच्छा समाधान है, हालांकि इसका आदर्श नहीं है (मैं tilestache-seed.py को ठीक करना पसंद करता था) यह काफी अच्छी तरह से काम करता है।
हसन मुस्तफा

2

डिफ़ॉल्ट रूप से shp2pgsql अनुक्रमणिका नहीं बनाता है। -Iइसे स्थानिक सूचकांक बनाने के लिए आपको पास करने की आवश्यकता है । http://postgis.net/docs/manual-1.3/ch04.html#id435762

जाँच करें कि क्या आपकी तालिका \d tablenamepsql में चलकर एक सूचकांक है । इंडेक्स की सूची में "जिस्ट" (जब तक आपने एक अलग इंडेक्स नहीं उठाया है) और आपके ज्यामिति कॉलम नाम के साथ एक पंक्ति होनी चाहिए।

आप इस तथ्य के बाद भी एक को जोड़ सकते हैं, http://postgis.net/docs/manual-1.3/ch03.html#id434676 देखें (हानि के बारे में नोट न दें)

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] );

चूंकि आप शायद अपने प्रश्नों में गैर-स्थानिक कॉलम का उपयोग करते हैं, इसलिए आप आमतौर पर प्रत्येक स्तंभ के लिए अनुक्रमणिका बनाना चाहते हैं जो कि लुकअप के लिए उपयोग किया जाता है। यदि उदाहरण के लिए आपके पास एक क्वेरी है, SELECT * FROM roads WHERE priority = 3;तो priorityइसका उपयोग किया जाता है और इसके लिए एक सूचकांक जोड़ने से चीजों की गति काफी बढ़ जाएगी:

CREATE INDEX idx_roads_priority ON roads(priority);


मैंने Postgres में प्लग-इन "PostGIS शेपफाइल और DBF लोडर" का इस्तेमाल किया, इसने एक सूचकांक बनाया: USATE स्केल_geom_idx का स्केलिंग जिस्म (जियोम)। , स्वचालित रूप से जब मैंने अपने शेपफाइल्स को आयात किया। क्या मुझे अतिरिक्त सूचकांक बनाने के लिए देखना चाहिए?
हसन मुस्तफा

क्या आपके पास बहुत सी पंक्तियाँ हैं? क्या आपकी वेक्टर टाइल पीढ़ी अन्य विशेषताओं (जैसे डेटा के सबसेलेक्शन) पर निर्भर है?
Bugmenot123

दोनों के लिए हाँ, मेरे पास कुछ तालिकाओं में पंक्तियाँ हैं, मेरी POI तालिका में लगभग 975k पंक्तियाँ हैं और पोस्टग्रेज़ में आयात करने से पहले मेरी सड़कों की आकृति 8.5gb थी। मैं ज़ूम स्तरों के आधार पर डेटा को फ़िल्टर करने के लिए क्वेरीज़ का उपयोग कर रहा हूं: "10": "WECT_geometry AS का चयन करें। ज्यामिति , प्राथमिकता, नाम, मार्गों से मार्ग_नम से आगे प्राथमिकताएं (5,4,3)" यह एक ऐसी क्वेरी है जिसका उपयोग मैं सड़कों पर लौटने के लिए कर रहा हूं। ज़ूम स्तर पर 10.
हसन मुस्तफा

फिर प्रत्येक स्तंभ पर एक सूचकांक बनाएं जिसका उपयोग आप WHERE क्लॉज में करते हैं। जरूरत पड़ने पर आप मल्टी-कॉलम इंडेक्स भी बना सकते हैं।
Bugmenot123

मैं ऐसा करने के बारे में कैसे जाऊंगा, मुझे किस आधार पर सूचकांक बनाना चाहिए?
हसन मुस्तफा

1

यदि आप किसी मानक क्वेरी का उपयोग कर रहे हैं, तो क्वेरी से एक भौतिकीकृत दृश्य बना रहा है, और इससे अपनी टाइलें बनाने का प्रयास करें: http://www.postgresql.org/docs/9.3/static/sql-creatematerializedview.html

ऐसा करने से आप एक तालिका बना लेंगे जो क्वेरी को संग्रहीत करती है (ताकि आप इसे भविष्य में संभावित रूप से अपडेट कर सकें)। सुनिश्चित करें कि आपके पास बच्चे के एमवी पर स्थानिक सूचकांक हैं और फिर आप जितनी जल्दी हो सके उतने तेज़ होंगे।

क्या हो सकता है कि आपके पास एक स्थानिक सूचकांक है, लेकिन तब आप केवल कुछ डेटा का चयन कर रहे हैं, जिसका अर्थ है कि आप स्थानिक सूचकांक का उपयोग नहीं कर रहे हैं ...


मेरे पास 11 अलग-अलग टेबल हैं जिन्हें मैं अपनी टाइल बनाने के लिए क्वेरी कर रहा हूं, इसका मतलब है कि मुझे 11 भौतिक विचार बनाने होंगे? और ज़ूम स्तर के आधार पर मेरी क्वेरी बदल जाती है।
हसन मुस्तफा

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

तो अगर मैं अपने सभी प्रश्नों के आधार पर एक ही एमवी बनाऊं तो वह काम करेगा?
हसन मुस्तफा

आप ऐसा नहीं कर सकते। अपनी सबसे धीमी क्वेरी के लिए एक बनाएं, हो सकता है कि वह एक ज़ूम स्तर के लिए हो, और देखें कि क्या यह मुझे तेज बनाता है।
एलेक्स लेथ

1
ठीक है, अगर ऐसा है तो डेटाबेस के अनुकूलन में मदद नहीं करेगा। गहरा देखो।
एलेक्स लीथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.