বহুভুজ ক্যোয়ারিতে একটি খুব বড় পয়েন্ট অনুকূলিতকরণ


9

আমার কাছে অ্যাড্রেস পয়েন্টগুলির জাতীয় ডেটাসেট (37 মিলিয়ন) এবং মাল্টিপলিগনজেড টাইপের বন্যার বাহ্যরেখার (2 মিলিয়ন) একটি বহুভুজের ডেটাসেট রয়েছে, বহুভুজগুলির মধ্যে কিছু খুব জটিল, সর্বাধিক এস 06 এনপয়েন্টগুলি প্রায় 200,000 এর কাছাকাছি। আমি পোস্টজিআইএস (২.১18) ব্যবহার করে সনাক্ত করার চেষ্টা করছি যা ঠিকানার পয়েন্টগুলি বন্যার বহুভুজের মধ্যে রয়েছে এবং এগুলি ঠিকানা আইডি এবং বন্যার ঝুঁকি সম্পর্কিত বিশদ সহ একটি নতুন টেবিলে লিখুন। আমি ঠিকানার দৃষ্টিকোণ থেকে চেষ্টা করেছি (ST_Within) তবে তারপরে এটি বন্যার ক্ষেত্রের দৃষ্টিকোণ (ST_Contains) থেকে শুরু করে দিয়েছি, যুক্তিযুক্ত কারণ এখানে এমন কোনও বৃহত অঞ্চল রয়েছে যার কোনও বন্যার ঝুঁকি নেই। উভয় ডেটাসেটের 4326 এ পুনঃপ্রক্রিয়া করা হয়েছে এবং উভয় টেবিলের একটি স্থানিক সূচক রয়েছে। নীচের আমার জিজ্ঞাসাটি এখন 3 দিন ধরে চলছে এবং শীঘ্রই কোনও সময় শেষ করার লক্ষণ দেখা যাচ্ছে না!

select a.id, f.risk_factor_1, f.risk_factor_2, f.risk_factor_3
into gb.addresses_with_flood_risk
from gb.flood_risk_areas f, gb.addresses a
where ST_Contains(f.the_geom, a.the_geom);

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


আমার আসল জিজ্ঞাসাটি 3 দিনের জন্য ঠিক আছে তবে আমি অন্য কাজের সাথে একপাশে লিখিত হয়েছি তাই সমাধানটি চেষ্টা করার জন্য সময়টি আমার কখনই উত্সর্গ করতে পেলাম না। তবে আমি এখনই এটি পুনরায় পরিদর্শন করেছি এবং সুপারিশগুলির মাধ্যমে কাজ করেছি, এখন পর্যন্ত খুব ভাল। আমি নিম্নলিখিত ব্যবহার করেছি:

  1. এখানে প্রস্তাবিত ST_FishNet সমাধান ব্যবহার করে যুক্তরাজ্যে একটি 50 কিলোমিটার গ্রিড তৈরি করেছে
  2. উত্পন্ন গ্রিডের এসআরআইডিটিকে ব্রিটিশ ন্যাশনাল গ্রিডে সেট করুন এবং এর উপরে একটি স্থানিক সূচক তৈরি করুন
  3. ST_Intersication এবং ST_Intersects ব্যবহার করে আমার বন্যার ডেটা (মাল্টিপলিগন) কেটে গেছে (কেবলমাত্র এখানেই আমাকে আকৃতির আকার 2pgsql হিসাবে একটি জেড সূচক যুক্ত করার কারণে ভূমিকায় ST_Force_2D ব্যবহার করতে হয়েছিল)
  4. একই গ্রিড ব্যবহার করে আমার পয়েন্টের ডেটা কেটে গেছে
  5. সারণি এবং করল এবং প্রতিটি টেবিলের মধ্যে স্থানিক সূচক তৈরি করে

আমি এখনই আমার স্ক্রিপ্টটি চালানোর জন্য প্রস্তুত, সারি এবং কলামগুলি পুনরাবৃত্তি করে ফলাফলকে একটি নতুন টেবিলের আকারে প্রকাশ করবে যতক্ষণ না আমি পুরো দেশটি coveredেকে রাখি। তবে সবেমাত্র আমার বন্যার তথ্য পরীক্ষা করে দেখুন এবং খুব বড় কিছু বহুভুজ কিছু অনুবাদে হারিয়ে গেছে বলে মনে হচ্ছে! এটি আমার জিজ্ঞাসা:

SELECT g.row, g.col, f.gid, f.objectid, f.prob_4band, ST_Intersection(ST_Force_2D(f.geom), g.geom) AS geom 
INTO rofrse.tmp_flood_risk_grid 
FROM rofrse.raw_flood_risk f, rofrse.gb_grid g
WHERE (ST_Intersects(ST_Force_2D(f.geom), g.geom));

আমার আসল তথ্যটি দেখতে এমন দেখাচ্ছে:

আসল বন্যার ডেটা

তবে পোস্ট ক্লিপিং এর মতো দেখাচ্ছে:

গ্রিডড বন্যার ডেটা

এটি একটি "অনুপস্থিত" বহুভুজের উদাহরণ:

বহুবিধ "অনুপস্থিত"


আমি কেবল বুঝতে পেরেছি যে আমরা সিওলে এফএসএস 4 জি-তে দেখা করেছি এবং ইএসআরআই লোকেটার হাবের বিস্ময়গুলি নিয়ে কথা বললাম :-)
জন পাওয়েল

আপনি কি কখনও বিভাজন এবং বিজয় পদ্ধতির কাজ শেষ করেছেন? আপনি এই পদ্ধতির সাথে মানদণ্ড বার আপডেট করতে পারেন?
অ্যান্ড্রু

উত্তর:


6

আপনার শেষ প্রশ্নের উত্তর দেওয়ার জন্য, এই পোস্টটি দেখুনপ্রশ্নের অগ্রগতি নিরীক্ষণ করতে সক্ষম হওয়ার আকাঙ্ক্ষা সম্পর্কে। সমস্যাটি কঠিন এবং একটি স্থানিক জিজ্ঞাসায় আরও জটিল হয়ে উঠবে, কারণ যে বুদ্ধিমান বহুভুজের ৯৯% ঠিকানা ইতিমধ্যে স্ক্যান করা হয়েছিল, যা আপনি অন্তর্নিহিত টেবিল স্ক্যান প্রয়োগে লুপের কাউন্টার থেকে পেতে পারেন তা অগত্যা নয় যদি চূড়ান্ত 1% ঠিকানাগুলি সর্বাধিক পয়েন্টের সাথে একটি বন্যা বহুভুজকে ছেদ করতে ঘটে তবে পূর্ববর্তী 99% কিছু ক্ষুদ্র অঞ্চল ছেদ করে help এটি স্পষ্টরূপে কখনও কখনও অস্বাস্থ্যকর হওয়ার কারণগুলির মধ্যে একটি কারণ, এটি স্ক্যান করা হবে এমন সারিগুলির একটি ইঙ্গিত দেয়, তবে সুস্পষ্ট কারণে বহুভুজগুলির জটিলতা বিবেচনা করে না (এবং এ কারণেই একটি বৃহত অনুপাত যে কোনও ছেদকগুলি / ছেদকৃত ধরণের প্রশ্নের জন্য (রান সময়)

দ্বিতীয় সমস্যাটি হ'ল আপনি যদি এরকম কিছু দেখেন

EXPLAIN 
SELECT COUNT(a.id) 
FROM sometable a, someothertable b
WHERE ST_Intersects (a.geom, b.geom)

প্রচুর বিবরণ হারিয়ে যাওয়ার পরে আপনি এমন কিছু দেখতে পাবেন:

_st_intersects(a.geom, b.geom)
   ->  Bitmap Index Scan on ix_spatial_index_name  (cost...rows...width...))
   Index Cond: (a.geom && geom)

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

"আমার ক্যোয়ারীটি 3 দিন ধরে চলছে এবং আমি জানি না যে আমরা 1% বা 99% এ" সমস্যাটির জন্য এক ধরণের বিভাজন ব্যবহার এবং ডামিদের জন্য বিজয়ী হওয়া আমি একমাত্র সমাধানটি সামনে আসতে সক্ষম হয়েছি এপ্রোচ, যার অর্থ আমি বলতে চাইছি, আপনার অঞ্চলটিকে ছোট অংশগুলিতে বিভক্ত করুন এবং সেগুলি আলাদাভাবে চালান, হয় পিএলপসকিএলএল লুপে বা স্পষ্টত কনসোলে in এর মধ্যে জটিল বহুভুজগুলি অংশগুলিতে কাটার সুবিধা রয়েছে যার অর্থ বহুভুজ চেকগুলির পরবর্তী পয়েন্টগুলি বহুভুজগুলিতে কাজ করছে এবং বহুভুজগুলির সীমানা বাক্সগুলি আরও ছোট।

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

সম্পাদনা: একটি চিত্র হাজার হাজার শব্দের মূল্যের ভিত্তিতে, এখানে কিছু ইউকে বন্যার উপাত্তের একটি চিত্র an এখানে একটি খুব বৃহত্ বহু গুণ আছে, যার সীমানা বাক্সটি পুরো অঞ্চলটি জুড়েছে, সুতরাং এটি সহজেই বোঝা যায়, উদাহরণস্বরূপ, প্রথমদিকে রেড গ্রিডের সাহায্যে বন্যার বহুভুজকে ছেদ করে দক্ষিণ-পশ্চিম কোণে চৌকোটি হঠাৎই কেবল পরীক্ষা করা হবে বহুভুজ একটি ক্ষুদ্র উপসেট বিরুদ্ধে।

এখানে চিত্র বর্ণনা লিখুন


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

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

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

আমি একটি ফটো যুক্ত করেছি, যদিও আমি বুঝতে পেরেছি যে আপনি ছবিটি পেয়েছেন: ডি, এটি আমার সম্পর্কে যা আছে তা অন্যদের কল্পনা করতে সহায়তা করে। হ্যাঁ, আমি প্রায় অবশ্যই ফস 4 জি ইউকে যাচ্ছি, এবং বন সম্পর্কে চিন্তা করব।
জন পাওয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.