मैंने AWS में एक कंप्यूट इंस्टेंस को स्पिन अप करने के लिए कॉन्फ़िगरेशन और सेवाओं के साथ बहुत समय बर्बाद किया है। कभी-कभी, मुझे अनुप्रयोगों और विचारों का परीक्षण करने के लिए बस एक उत्पादन-तैयार वातावरण की आवश्यकता होती है। Heroku के साथ, मैं CLI पर बस कुछ सरल कमांड के साथ इसे प्राप्त कर सकता हूं।
हाल ही में, मुझे पता चला कि Heroku मेंPostGIS के लिए भी समर्थन शामिल है। मैंने व्यक्तिगत रूप से पहले कभी PostGIS का उपयोग नहीं किया है। मैं उत्पाद के कई मालिकाना प्रतिस्पर्धियों के बारे में जानता हूं, इसलिए मैंने सोचा कि यह ओपन-सोर्स विकल्प को आज़माने का एक बढ़िया समय होगा।
इस लेख में, मैं आपको दिखाऊंगा कि Heroku पर PostGIS-सक्षम Postgres इंस्टेंस कैसे चलाया जाता है। फिर, मैं डेटाबेस पर कुछ सैंपल क्वेरीज़ चलाऊंगा, ताकि आपको यह महसूस हो सके कि यह कैसे काम करता है। और सबसे अच्छी बात? आप हमारे साथ चल सकते हैं और जैसे-जैसे हम आगे बढ़ेंगे, अपनी खुद की खोज कर सकते हैं!
भले ही आपने कुछ समय के लिए Postgres का उपयोग किया हो, लेकिन आप PostGIS से परिचित नहीं हो सकते हैं। GIS का मतलब भौगोलिक सूचना प्रणाली है। इस क्षेत्र में कई समाधान हैं। लेकिन PostGIS को जो चीज़ अच्छी बनाती है वह यह है कि यह लोकप्रिय PostgreSQL डेटाबेस पर आधारित है। Postgres से अपेक्षित सभी प्रदर्शन के अलावा, हमें भू-स्थानिक डेटा संग्रहीत करने के लिए एक पूर्ण-विशेषताओं वाला टूल मिलता है।
पोस्टजीआईएस न केवल इस प्रकार के डेटा के लिए एक अच्छा भंडारण समाधान प्रदान करता है, बल्कि इसे कई अनुप्रयोगों के साथ सहजता से एकीकृत किया जा सकता है जो इस डेटा का उपयोग कर सकते हैं (जैसे आर्कजीआईएस और टेबल्यू)।
TL; DR—यदि आपको स्थान डेटा को प्रोसेस, स्टोर या क्वेरी करने की आवश्यकता है, तो PostGIS ऐसा करने के लिए एक बढ़िया विकल्प है। सौभाग्य से, यह Heroku ऐप में ऐडऑन जोड़ने जितना ही सरल है, ताकि एक नया Postgres इंस्टेंस चालू और चालू हो सके। तो, चलिए अब ऐसा करते हैं।
आरंभ करने के लिए, आपको किसी भी आकार के ऐप की आवश्यकता होगी। फिर, आप अपने ऐप में Heroku Postgres का एक इंस्टेंस जोड़ें।
अपने डेमो के लिए, मैं एक खाली ऐप बनाने जा रहा हूँ।
ऐप बन जाने के बाद, मैं Heroku Postgres ऐड-ऑन बना सकता हूँ। चूँकि मेरा सैंपल डेटा सेट मिनी प्लान इंस्टेंस के लिए बहुत बड़ा है, इसलिए मुझे इसके बजाय बेसिक प्लान का उपयोग करना होगा। मैं कमांड लाइन से ऐसा कर सकता हूँ:
$ heroku login $ heroku addons:create heroku-postgresql:basic -a postgis-demo Creating heroku-postgresql:basic on ⬢ postgis-demo... ~$0.013/hour (max $9/month) Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pg:copy Created postgresql-fitted-78461 as DATABASE_URL
एक बार जब मैंने अपना Postgres डेटाबेस बना लिया, तो मुझेPostGIS को सेट अप करने के लिए केवल कुछ और चरण ही करने हैं।
Heroku Postgres में कई संभावित एक्सटेंशन हैं जिन्हें हम इंस्टॉल कर सकते हैं। उन्हें सूचीबद्ध करने के लिए, हम अपने इंस्टेंस से पूछ सकते हैं:
$ heroku pg:psql -a postgis-demo --> Connecting to postgresql-fitted-78461 … postgis-demo::DATABASE=> \x on; Expanded display is on. postgis-demo::DATABASE=> show extwlist.extensions; … address_standardizer,address_standardizer_data_us,amcheck,autoinc,bloom,btree_gin,btree_gist,citext,cube,dict_int,earthdistance,fuzzystrmatch,hstore,insert_username,intarray,isn,lo,ltree,moddatetime,pg_partman,pg_stat_statements,pg_trgm,pgcrypto,pgrowlocks,postgis,postgis_raster,postgis_topology,refint,seg,sslinfo,tablefunc,tcn,tsm_system_rows,tsm_system_time,unaccent,uuid-ossp
हम उपलब्ध एक्सटेंशन की सूची में postgis
देखते हैं। वहां से, हम एक्सटेंशन बना सकते हैं।
postgis-demo::DATABASE=> CREATE EXTENSION postgis; CREATE EXTENSION
हम पुष्टि कर सकते हैं कि एक्सटेंशन इंस्टॉल है और संस्करण की जांच कर सकते हैं:
postgis-demo::DATABASE=> SELECT postgis_version(); -[ RECORD 1 ]---+-------------------------------------- postgis_version | 3.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
ठीक है! ऐसा लगता है कि हम PostGIS 3.4 के साथ काम कर रहे हैं।
अब जब मैंने PostGIS एक्सटेंशन सक्षम कर लिया है, तो मुझे खेलने के लिए एक डेटासेट लोड करने की आवश्यकता है। मैं PostGIS पुस्तक के परिचय द्वारा प्रदान किए गए डेटासेट का उपयोग कर रहा हूँ। डाउनलोड किया गया डेटा बंडल 21.5 एमबी की ज़िप फ़ाइल है। निकाले गए संग्रह के data
सबफ़ोल्डर में, nyc_data.backup
नामक 9.5 एमबी की फ़ाइल है।
यह फाइल न्यूयॉर्क शहर की 2000 की जनगणना के सभी जनगणना आंकड़ों के साथ-साथ शहर की सभी सड़कों, मोहल्लों और मेट्रो स्टेशनों की जानकारी से युक्त है।
हम heroku pg:backups:restore
कमांड का उपयोग करके सीधे अपने Heroku Postgres इंस्टेंस में डेटा बैकअप को पुनर्स्थापित कर सकते हैं। यह अविश्वसनीय रूप से सुविधाजनक है। हालाँकि, निम्नलिखित सावधानियों को ध्यान में रखें:
nyc_data.backup
उपलब्ध कराता है।
postgis
एक्सटेंशन की आपकी इंस्टॉलेशन भी शामिल है। इसलिए, भले ही हमने ऊपर दिखाया है कि एक्सटेंशन को मैन्युअल रूप से कैसे इंस्टॉल किया जाए, लेकिन जब हम अपने डेटाबेस को रिस्टोर करेंगे तो हमें डेटा लोड करने से पहले एक्सटेंशन को प्री-इंस्टॉल करने के लिए एक फ्लैग जोड़ना होगा।
डेटाबेस बैकअप को पुनर्स्थापित करने के लिए हम इस कमांड का उपयोग करेंगे:
$ heroku pg:backups:restore \ https://github.com/Giorgi/PostgresSamples/raw/main/nyc_data.backup \ -e postgis \ -a postgis-demo
हमारी बैकअप फ़ाइल सार्वजनिक रूप से सुलभ URL के माध्यम से निर्दिष्ट की गई है। आप हमेशा PostGIS ट्यूटोरियल से डेटासेट डाउनलोड कर सकते हैं, nyc_data.backup
फ़ाइल निकाल सकते हैं, और इसे अपने द्वारा चुने गए स्थान पर ऑनलाइन पोस्ट कर सकते हैं।
-e postgis
ध्वज निर्दिष्ट करता है कि हम बैकअप की स्कीमा और डेटा लोड करने से पहले postgis
एक्सटेंशन स्थापित करना चाहते हैं।
बस इतना ही! कुछ सरल कमांड के लिए यह बुरा नहीं है। हमारे पास हमारा डेटाबेस और डेटा है।
यदि आप पहले से ही जानते हैं कि स्थानीय मशीन पर Postgres कैसे सेट किया जाता है, तो आप सोच रहे होंगे कि मैंने Heroku का उपयोग क्यों किया। मेरे लिए, सबसे बड़ा कारण सरलता है। विश्लेषण के लिए एक बड़ी Heroku Postgres योजना चुनने और PostGIS एक्सटेंशन स्थापित करने के अलावा, मुझे इसे शुरू करने के लिए और कुछ करने की आवश्यकता नहीं है।
इसके अलावा, मेरे द्वारा किए जाने वाले किसी भी विश्लेषण पर सहयोग करना आसान है। मैं अन्य लोगों को सहयोगी के रूप में अपने डेटाबेस तक पहुँच प्रदान कर सकता हूँ, या मैं डेटाबेस के शीर्ष पर जल्दी से एक एप्लिकेशन बना सकता हूँ और Postgres क्लाइंट के बजाय एक सामान्य वेब इंटरफ़ेस के माध्यम से पहुँच साझा कर सकता हूँ।
अंत में, जब मैं किसी प्रोजेक्ट पर काम करना समाप्त कर लेता हूँ और मुझे अब इसकी आवश्यकता नहीं होती, तो मैं Heroku पर ऐप को हटा सकता हूँ और यह सब चला जाता है। मेरे कंप्यूटर पर चिंता करने के लिए कोई डेटा फ़ाइल नहीं है। स्थानीय रूप से कोई अतिरिक्त सॉफ़्टवेयर इंस्टॉल नहीं है। मैं किसी नई तकनीक में त्वरित भ्रमण का आनंद लेने में सक्षम हूँ और फिर जब मेरा काम पूरा हो जाता है तो आगे बढ़ जाता हूँ।
अब, आइए देखें कि PostGIS कैसे काम करता है।
याद रखने वाली पहली बात यह है कि PostGIS, Postgres के भीतर एक एक्सटेंशन है। इसका मतलब है कि आप कोई भी मानक Postgres क्वेरी भी कर सकते हैं।
मान लीजिए मैं यह जानना चाहता हूं कि न्यूयॉर्क में कितनी सड़कें B से शुरू होती हैं। एक सरल SQL क्वेरी मुझे बता देगी:
postgis-demo::DATABASE=> SELECT count(*) postgis-demo::DATABASE-> FROM nyc_streets postgis-demo::DATABASE-> WHERE name LIKE 'B%'; count 1282 (1 row)
प्रत्येक नगर में पड़ोस की संख्या के बारे में क्या कहना है? फिर से, एक सरल SQL क्वेरी:
postgis-demo::DATABASE=> SELECT boroname, count(*) postgis-demo::DATABASE-> FROM nyc_neighborhoods postgis-demo::DATABASE-> GROUP BY boroname; boroname | count ---------------+------- Queens | 30 Brooklyn | 23 Staten Island | 24 The Bronx | 24 Manhattan | 28 (5 rows)
अभी तक हमने सिर्फ़ स्टैण्डर्ड PostgreSQL का इस्तेमाल किया है। अब, आइए PostGIS सुविधाओं का इस्तेमाल कैसे करें, इस पर नज़र डालें।
क्योंकि हमारे डेटासेट में न्यूयॉर्क की सभी सड़कें शामिल हैं, हम इस क्वेरी के माध्यम से पूछ सकते हैं कि शहर में कितने किलोमीटर सड़कें हैं:
postgis-demo::DATABASE=> SELECT Sum(ST_Length(geom)) / 1000 as street_length FROM nyc_streets; street_length -------------------- 10418.904717199996 (1 row)
हम क्षेत्रों की गणना भी कर सकते हैं, जैसे कि मैनहट्टन के सम्पूर्ण क्षेत्रफल का क्षेत्रफल:
postgis-demo::DATABASE=> SELECT Sum(ST_Area(geom)) / 4047 as acreage FROM nyc_neighborhoods WHERE boroname = 'Manhattan'; acreage ------------------- 13965.32012239119 (1 row)
ध्यान दें कि ये गणनाएँ भू-स्थानिक डेटा से आती हैं, न कि इस तरह के एकत्रित डेटा से संबंधित कॉलम से। इतना ही नहीं, बल्कि ये क्वेरीज़ बहुत तेज़ी से निष्पादित होती हैं।
एक अंतिम क्वेरी जिससे मैं वास्तव में चकित हूं, वह स्थानिक जोड़ों के उपयोग से संबंधित है। मानक डेटाबेस जोड़ों की तरह, स्थानिक जोड़ कई तालिकाओं को एकजुट कर सकते हैं, लेकिन स्थानिक संबंधों के आधार पर। उदाहरण के लिए, हम स्थानिक डेटा का उपयोग करके यह पूछ सकते हैं कि कोई विशिष्ट सबवे स्टेशन किस पड़ोस में है। ऐसा करने के लिए, हम PostGIS से ST_Contains
का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि पड़ोस की ज्यामिति पूरी तरह से सबवे स्टेशन की ज्यामिति को समाहित करती है या नहीं।
सबवे के नाम ( nyc_subway_stations
में) के आधार पर, हम उस पड़ोस ( nyc_neighborhoods
में) के लिए क्वेरी करते हैं जिसके लिए ST_Contains
सत्य है। हमारी क्वेरी इस तरह दिखती है:
postgis-demo::DATABASE=> SELECT subways.name AS subway_name, neighborhoods.name AS neighborhood_name, neighborhoods.boroname AS borough FROM nyc_neighborhoods AS neighborhoods JOIN nyc_subway_stations AS subways ON ST_Contains(neighborhoods.geom, subways.geom) WHERE subways.name = 'Broad St'; subway_name | neighborhood_name | borough -------------+--------------------+----------- Broad St | Financial District | Manhattan (1 row)
पोस्टजीआईएस ज्यामिति के साथ और भी अधिक उन्नत स्थान क्वेरी कार्यक्षमता प्रदान करता है, लेकिन यह हमारे यहां दिए गए सरल डेमो के दायरे से बाहर है।
मैंने पहले कभी PostGIS का इस्तेमाल नहीं किया है, इसलिए मैं इससे बहुत प्रभावित हूँ। मैं इस डेटाबेस के साथ और भी बहुत कुछ कर सकता हूँ, क्योंकि मैंने अभी आधिकारिक PostGIS परिचय पुस्तक का केवल आधा भाग ही पढ़ा है। इतना ही नहीं, मैं Heroku द्वारा समर्थित किसी भी भाषा का उपयोग करके PostGIS के शीर्ष पर एप्लिकेशन बना और तैनात कर सकता हूँ।
खास तौर पर, मैं सोच रहा हूँ कि मैं PostGIS के ऊपर Rails ऐप बनाने के लिए कोई उपयोग मामला ढूँढ़ना चाहूँगा। मुझे पहले से ही कुछ दस्तावेज़ मिल गए हैं कि मैं कैसे शुरुआत कर सकता हूँ।
लेकिन अभी के लिए, मुझे इस इंस्टेंस की अब और ज़रूरत नहीं है, इसलिए मैं इसे साफ़ करने जा रहा हूँ और अपना ऐप डिलीट कर रहा हूँ। CLI से, मुझे यह करना है:
$ heroku apps:destroy postgis-demo ▸ WARNING: This will delete ⬢ postgis-demo including all add-ons. ▸ To proceed, type postgis-demo or re-run this command with --confirm postgis-demo > postgis-demo Destroying ⬢ postgis-demo (including all add-ons)... done
रुको, बस इतना ही? हाँ, बस इतना ही। एक ही आदेश और पुष्टि के साथ, सब कुछ नष्ट हो जाता है, और मुझे अब इसके बारे में चिंता करने की ज़रूरत नहीं है।
$ heroku apps You have no apps. $ heroku addons No add-ons.
अब जबकि मैंने अपना ऐप हटा दिया है, आपके पास एक अविश्वसनीय अवसर है: अद्वितीय ऐप नाम postgis-demo
उस पहले पाठक के लिए उपलब्ध है जो इसे Heroku पर प्राप्त करना चाहता है! क्या आप अपना अगला बेहतरीन PostGIS ऐप बनाने के लिए तैयार हैं? आज ही वह दिन है!