paint-brush
অবস্থান, অবস্থান, অবস্থান! পোস্টজিআইএস এবং হেরোকু পোস্টগ্রেসদ্বারা@josephcaudle
679 পড়া
679 পড়া

অবস্থান, অবস্থান, অবস্থান! পোস্টজিআইএস এবং হেরোকু পোস্টগ্রেস

দ্বারা Joseph Caudle9m2024/04/16
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

সম্প্রতি, আমি শিখেছি যে Heroku পোস্টজিআইএস-এর জন্য সমর্থনও অন্তর্ভুক্ত করে। আমি ব্যক্তিগতভাবে আগে কখনো পোস্টজিআইএস ব্যবহার করিনি। আমি পণ্যটির বেশ কয়েকটি মালিকানাধীন প্রতিযোগীদের সম্পর্কে জানি, তাই আমি ভেবেছিলাম ওপেন-সোর্স বিকল্পটি চেষ্টা করার জন্য এটি একটি দুর্দান্ত সময় হবে।
featured image - অবস্থান, অবস্থান, অবস্থান! পোস্টজিআইএস এবং হেরোকু পোস্টগ্রেস
Joseph Caudle HackerNoon profile picture

জিওস্পেশিয়াল ডেটা কোয়েরি সমর্থন করার জন্য পোস্টগ্রেস বাড়ানো

আমি কনফিগারেশন এবং পরিষেবাগুলির সাথে ঘুরতে ঘুরতে অনেক সময় হারিয়েছি শুধুমাত্র AWS-এ একটি কম্পিউট উদাহরণ ঘোরানোর জন্য। কখনও কখনও, অ্যাপ্লিকেশন এবং ধারণাগুলি পরীক্ষা করার জন্য আমার চারপাশে খেলার জন্য একটি উত্পাদন-প্রস্তুত পরিবেশ প্রয়োজন। Heroku এর সাথে, আমি CLI এ মাত্র কয়েকটি সাধারণ কমান্ড দিয়ে এটি পেতে পারি।


সম্প্রতি, আমি শিখেছি যে Herokuপোস্টজিআইএস-এর জন্য সমর্থনও অন্তর্ভুক্ত করে। আমি ব্যক্তিগতভাবে আগে কখনো পোস্টজিআইএস ব্যবহার করিনি। আমি পণ্যটির মালিকানাধীন প্রতিযোগীদের সম্পর্কে জানি, তাই আমি ভেবেছিলাম ওপেন-সোর্স বিকল্পটি চেষ্টা করার জন্য এটি একটি দুর্দান্ত সময় হবে।


এই নিবন্ধে, আমি আপনাকে দেখাব কিভাবে Heroku-এ চলমান পোস্টজিআইএস-সক্ষম পোস্টগ্রেস উদাহরণ পেতে হয়। তারপর, আমি ডাটাবেসে কিছু নমুনা কোয়েরি চালাব, এটি কীভাবে কাজ করে তার জন্য আপনাকে একটি অনুভূতি দিতে। এবং সেরা অংশ? আপনি অনুসরণ করতে পারেন এবং আমরা যেতে যেতে আপনার নিজের অন্বেষণ করতে পারেন!

পোস্টজিআইএস কি?

এমনকি আপনি যদি কিছু সময়ের জন্য পোস্টগ্রেস ব্যবহার করেন তবে আপনি পোস্টজিআইএস-এর সাথে পরিচিত নাও হতে পারেন। GIS হল ভৌগলিক তথ্য ব্যবস্থা । মহাকাশে অনেক সমাধান আছে। কিন্তু যে জিনিসটি পোস্টজিআইএসকে সুন্দর করে তোলে তা হল এটি ভাল-প্রিয় PostgreSQL ডাটাবেসের উপর ভিত্তি করে। পোস্টগ্রেস থেকে আপনি যে সমস্ত পারফরম্যান্স আশা করেন তার পাশাপাশি, আমরা ভূ-স্থানিক ডেটা সঞ্চয় করার জন্য একটি সম্পূর্ণ বৈশিষ্ট্যযুক্ত টুল পাই।


পোস্টজিআইএস এই ধরণের ডেটার জন্য শুধুমাত্র একটি ভাল স্টোরেজ সমাধানই দেয় না, তবে এটি বেশ কয়েকটি অ্যাপ্লিকেশনের সাথে নির্বিঘ্নে একত্রিত হতে পারে যা এই ডেটা ব্যবহার করতে পারে (যেমন আর্কজিআইএস এবং টেবিল)।


TL; DR — আপনার যদি অবস্থানের ডেটা প্রক্রিয়া, সঞ্চয় বা অনুসন্ধান করতে হয়, পোস্টজিআইএস এটি করার জন্য একটি দুর্দান্ত বিকল্প। সৌভাগ্যবশত, এটি একটি নতুন পোস্টগ্রেস ইনস্ট্যান্স আপ এবং চালানোর জন্য একটি Heroku অ্যাপে একটি অ্যাডন যোগ করার মতোই সহজ। তো, এখন সেটা করা যাক।

আমরা কিভাবে পোস্টজিআইএস ব্যবহার করতে পারি?

শুরু করতে, আপনার যেকোনো আকারের একটি অ্যাপের প্রয়োজন হবে। তারপরে, আপনি আপনার অ্যাপে Heroku Postgres- এর একটি উদাহরণ যোগ করুন।

একটি Heroku অ্যাপ তৈরি করুন

আমার ডেমোর জন্য, আমি একটি খালি অ্যাপ তৈরি করতে যাচ্ছি।

একটি 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

একবার আমি আমার পোস্টগ্রেস ডাটাবেস তৈরি করেছি,পোস্টজিআইএস সেট আপ করার জন্য আমার কাছে আরও কয়েকটি ধাপ রয়েছে।

পোস্টজিআইএস এক্সটেনশন তৈরি করুন

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


ঠিক আছে! দেখে মনে হচ্ছে আমরা পোস্টজিআইএস 3.4 এর সাথে কাজ করছি।

প্রাথমিক ডেটাসেট লোড করুন

এখন যেহেতু আমি পোস্টজিআইএস এক্সটেনশনটি সক্ষম করেছি, আমাকে খেলার জন্য একটি ডেটাসেটে লোড করতে হবে। আমি পোস্টজিআইএস বইয়ের ভূমিকা দ্বারা প্রদত্ত ডেটাসেট ব্যবহার করছি। ডাউনলোড করা ডেটা বান্ডেলটি একটি 21.5 এমবি জিপ ফাইল। নিষ্কাশিত সংরক্ষণাগারের data সাবফোল্ডারে, nyc_data.backup নামে একটি 9.5 MB ফাইল রয়েছে।


এটি নিউ ইয়র্ক সিটির 2000 সালের আদমশুমারির সমস্ত ডেটা সহ শহরের সমস্ত রাস্তা, পাড়া এবং পাতাল রেল স্টেশনগুলির সাথে একটি ফাইল৷


আমরা heroku pg:backups:restore কমান্ড ব্যবহার করে সরাসরি আমাদের Heroku Postgres ইনস্ট্যান্সে ডেটা ব্যাকআপ পুনরুদ্ধার করতে পারি এই অবিশ্বাস্যভাবে সুবিধাজনক. যাইহোক, নিম্নলিখিত সতর্কতাগুলি মনে রাখবেন:


  • আপনি যে ব্যাকআপ ফাইলটি থেকে পুনরুদ্ধার করতে পারেন তা আপনার স্থানীয় মেশিন থেকে আপলোড করা যাবে না। এটা অনলাইন উপলব্ধ হতে হবে. ভাগ্যক্রমে, আমি একটি GitHub রেপো পেয়েছি যা nyc_data.backup উপলব্ধ করে।


  • আপনার postgis এক্সটেনশনের ইনস্টলেশন সহ আপনার Heroku Postgres ইন্সট্যান্স সম্পূর্ণরূপে রিসেট করে ডাটাবেস পুনরুদ্ধার করা শুরু হয়। সুতরাং, যদিও আমরা উপরে দেখিয়েছি কিভাবে এক্সটেনশনটি ম্যানুয়ালি ইন্সটল করতে হয়, ডাটা লোড করার আগে এক্সটেনশনটি প্রি-ইন্সটল করার জন্য আমাদের ডাটাবেস পুনরুদ্ধার করার সময় আমাদের একটি পতাকা যোগ করতে হবে।


ডাটাবেস ব্যাকআপ পুনরুদ্ধার করতে আমরা যে কমান্ডটি ব্যবহার করব তা এখানে:

 $ heroku pg:backups:restore \ https://github.com/Giorgi/PostgresSamples/raw/main/nyc_data.backup \ -e postgis \ -a postgis-demo

আমাদের ব্যাকআপ ফাইল একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য URL এর মাধ্যমে নির্দিষ্ট করা হয়েছে৷ আপনি সর্বদা পোস্টজিআইএস টিউটোরিয়াল থেকে ডেটাসেটটি ডাউনলোড করতে পারেন, nyc_data.backup ফাইলটি বের করতে পারেন এবং আপনার নিজের পছন্দের জায়গায় এটি অনলাইনে পোস্ট করতে পারেন।


-e postgis পতাকা নির্দিষ্ট করে যে আমরা ব্যাকআপের স্কিমা এবং ডেটা লোড করার আগে postgis এক্সটেনশন ইনস্টল করতে চাই।


ঐটা এটা ছিল! কয়েকটি সাধারণ কমান্ডের জন্য খারাপ নয়। আমাদের ডাটাবেস এবং ডেটা আছে।

কেন হেরোকু?

আপনি যদি ইতিমধ্যেই জানেন যে কীভাবে একটি স্থানীয় মেশিনে পোস্টগ্রেস সেট আপ করতে হয়, তাহলে আপনি ভাবছেন কেন আমি হেরোকুতে গিয়েছিলাম। আমার জন্য, সবচেয়ে বড় কারণ সরলতা। আমি যে বিশ্লেষণ করার পরিকল্পনা করছি এবং পোস্টজিআইএস এক্সটেনশন ইনস্টল করার জন্য যথেষ্ট বড় হেরোকু পোস্টগ্রেস প্ল্যান বেছে নেওয়ার পাশাপাশি, উঠতে এবং চালানোর জন্য আমাকে আর কিছুই করতে হবে না।


এছাড়াও, আমি যে কোনো বিশ্লেষণে সহযোগিতা করা সহজ। আমি সহযোগী হিসাবে আমার ডাটাবেসে অন্য লোকেদের অ্যাক্সেস দিতে পারি, অথবা আমি পোস্টগ্রেস ক্লায়েন্টের পরিবর্তে ডাটাবেসের উপরে একটি অ্যাপ্লিকেশন তৈরি করতে এবং একটি সাধারণ ওয়েব ইন্টারফেসের মাধ্যমে অ্যাক্সেস ভাগ করতে পারি।


অবশেষে, যখন আমি একটি প্রকল্পে কাজ শেষ করি এবং আমার আর এটির প্রয়োজন হয় না, আমি কেবল Heroku-এ অ্যাপটি মুছে ফেলতে পারি এবং এটি সব শেষ হয়ে যায়। চিন্তা করার জন্য আমার কম্পিউটারে কোন ডেটা ফাইল নেই। স্থানীয়ভাবে কোনো অতিরিক্ত সফ্টওয়্যার ইনস্টল করা নেই। আমি একটি নতুন প্রযুক্তির মধ্যে একটি দ্রুত ভ্রমণ উপভোগ করতে সক্ষম এবং তারপর আমার কাজ শেষ হলে এগিয়ে যেতে পারি৷

পোস্টজিআইএস এর সাথে কাজ করা

এখন, পোস্টজিআইএস কীভাবে কাজ করে তা দেখে নেওয়া যাক।

পোস্টগ্রেসের সাথে আপনি যেমন চান ঠিক তেমন কাজ করুন

মনে রাখা প্রথম জিনিস হল পোস্টজিআইএস হল পোস্টগ্রেসের মধ্যে একটি এক্সটেনশন । এর মানে হল যে আপনি যেকোনো স্ট্যান্ডার্ড পোস্টগ্রেস কোয়েরিও করতে পারেন।


ধরা যাক আমি জানতে চেয়েছিলাম নিউ ইয়র্কের কতগুলি রাস্তা 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-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)

মনে রাখবেন যে এই গণনাগুলি ভূ-স্থানিক ডেটা থেকে আসে, এই ধরণের সমষ্টিগত ডেটা সম্পর্কিত কলামগুলি থেকে নয়৷ শুধু তাই নয়, এই প্রশ্নগুলি অত্যন্ত দ্রুত কার্যকর হয়।


একটি চূড়ান্ত প্রশ্ন যা দ্বারা আমি সত্যিই বিস্মিত হয়েছি তাতে স্থানিক যোগদানের ব্যবহার জড়িত। অনেকটা স্ট্যান্ডার্ড ডাটাবেস যোগদানের মতো, স্থানিক যোগ একাধিক টেবিলকে একত্রিত করতে পারে, তবে স্থানিক সম্পর্কের ভিত্তিতে। উদাহরণ স্বরূপ, স্থানিক ডেটা ব্যবহার করে আমরা জিজ্ঞাসা করতে পারি কোন আশেপাশে একটি নির্দিষ্ট পাতাল রেল স্টেশন রয়েছে। এটি করার জন্য, আমরা পোস্টজিআইএস থেকে 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)

পোস্টজিআইএস জ্যামিতি সহ আরও উন্নত অবস্থান অনুসন্ধান কার্যকারিতা প্রদান করে, তবে এটি এখানে আমাদের সাধারণ ডেমোর সুযোগের বাইরে।

উপসংহার

আগে কখনো পোস্টজিআইএস ব্যবহার করিনি, এটি যা করতে পারে তাতে আমি সত্যিই মুগ্ধ। এই ডাটাবেসটির সাথে আমি আরও অনেক কিছু করতে পারি, যেহেতু আমি পোস্টজিআইএস বইয়ের অফিসিয়াল ভূমিকার মধ্য দিয়ে এটি প্রায় অর্ধেক করেছি। শুধু তাই নয়, আমি Heroku দ্বারা সমর্থিত যেকোন সংখ্যক ভাষা ব্যবহার করে পোস্টজিআইএস-এর উপরে অ্যাপ্লিকেশন তৈরি এবং স্থাপন করতে পারি।


বিশেষ করে, আমি ভাবছি পোস্টজিআইএস-এর উপরে একটি রেল অ্যাপ তৈরির জন্য আমি একটি ব্যবহারের ক্ষেত্রে খুঁজে পেতে চাই। আমি কীভাবে শুরু করতে পারি সে সম্পর্কে আমি ইতিমধ্যে কিছু ডকুমেন্টেশন পেয়েছি।


কিন্তু আপাতত, আমার আর এই দৃষ্টান্তের প্রয়োজন নেই, তাই আমি এটি পরিষ্কার করে আমার অ্যাপটি মুছে দেব। 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-এ নিতে চান! আপনি কি আপনার পরবর্তী দুর্দান্ত পোস্টজিআইএস অ্যাপ তৈরি করতে প্রস্তুত? আজকেই সেই দিন!