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


12

আমার কাছে ওস্মোসিস স্কিমা ব্যবহার করে নেদারল্যান্ডসের জন্য পোস্টজিআইএস ডাটাবেসে (পোস্টগ্রিসএসকিউএল 8.3 / পোস্টজিআইএস 1.3.3) লোড করা ওপেনস্ট্রিটম্যাপ ডেটা রয়েছে । এর অর্থ সমস্ত ট্যাগ হস্টোর ক্ষেত্রে সংরক্ষণ করা হয় । জিওএসটি সূচক যা জ্যামিতির ক্ষেত্রে অ্যাসোসিস তৈরি করে তা ছাড়াও আমি ট্যাগ ক্ষেত্রে একটি অতিরিক্ত জিআইএসটি সূচক তৈরি করেছি।

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

SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n 
  INNER JOIN users AS u ON n.user_id = u.id 
  WHERE tags->'man_made'='surveillance' 
  AND ST_Within(geom, ST_GeomFromText('POLYGON((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))',4326));

78 রেকর্ড ফিরে পেতে 22 সেকেন্ড সময় নেয়।

এই টেবিলটিতে প্রায় 53 মিলিয়ন রেকর্ড রয়েছে।

এটির গতি বাড়ানোর কোনও উপায় আছে কি? আমি শুনেছি পোস্টগ্রেএসকিউএল 9 এ হস্তান্তর উল্লেখযোগ্যভাবে আরও ভালভাবে প্রয়োগ করা হয়েছে, কী আপগ্রেডিং সাহায্য করবে?


যেহেতু এটি একটি ডাটাবেস ভিত্তিক প্রশ্ন বলে মনে হচ্ছে আমি আপনাকে dba.stackexchange.com- এ
jcolebrand

২০১৫-এর জন্য আপডেট - পোস্টজিআইএস এই প্রশ্নটি জিজ্ঞাসা করার পর থেকেই কার্যকরী উন্নতি করেছে, তাই পোস্টগ্রিসএসকিউএল আপগ্রেড হিসাবেও বিবেচনা করুন।
টবি স্পাইট

উত্তর:


5

একটি পদ্ধতি হ'ল আপনি যে ট্যাগগুলিতে আগ্রহী তা জিজ্ঞাসা করা এবং সেই রেকর্ডগুলি একটি নতুন টেবিলে স্থাপন করা। তারপরে আপনাকে সমস্ত 53 মিলিয়ন রেকর্ডের পরিবর্তে নতুন টেবিলটি অনুসন্ধান করতে হবে। আপনি যদি নিজের ডাটাবেস আপডেট রাখার চেষ্টা করছেন, আপনি যখনই ওএসএম থেকে নতুন ডেটা পাবেন তখনই এই কোয়েরিটি চালানো যেতে পারে।


2
একটি নতুন টেবিল তৈরি করার পরিবর্তে, আপনি পরিবর্তে একটি ভিউ তৈরির কথা বিবেচনা করতে পারেন, এইভাবে আপনি "ক্যোয়ারী" ডেটাটির আক্ষরিক নকল ছাড়াই আপনার মূল উত্স ডেটার সাথে লাইভ লিঙ্কযুক্ত।
RyanKDalton

7
একটি দৃশ্য অগত্যা ক্যোয়ারি পারফরম্যান্সকে উন্নত করবে না, যদি না এটি বস্তুগত দৃষ্টি বা সমতুল্য হয় ( এই বিষয়ে এসও প্রশ্ন দেখুন ) see আমি বিশ্বাস করি না পোস্টগ্র্যাস্কেল সরাসরি বস্তুগত দৃষ্টিভঙ্গি সমর্থন করে তবে এগুলি ট্রিগার ব্যবহার করে প্রয়োগ করা যেতে পারে।
আদম আর্মার

2
আমি বর্তমানে এটি ব্যবহার করছি work অসমোসিস টেবিলগুলিতে আপডেট হওয়ার পরে আমি কয়েকটি টেবিল পুনরায় তৈরি করি যা আমি চালাতে চাইছি এমন প্রশ্নের জন্য অনুকূলিত। আমি কেবল অনুভব করি যে আরও ভাল উপায় থাকতে হবে। ট্রিগারগুলির বিষয়টি আমাকে উত্সাহিত করে এবং কীভাবে আপনি এগুলি উপাদানীয় দৃষ্টিভঙ্গি প্রয়োগ করতে ব্যবহার করতে পারেন। @ অ্যাডাম আর্মার, আপনি কি এই সম্পর্কে কিছু অন্তর্দৃষ্টি ভাগ করে নিতে চান?
মার্ভেক্সেল

4
@ এমভেক্সেল এই উইকির নিবন্ধটি একবার দেখুন , যা বস্তুগত দৃষ্টিভঙ্গির মৌলিক বিষয়গুলি এবং পোস্টগ্র্রেএসকিউএল এ কীভাবে সেগুলি প্রয়োগ করতে পারে তার বিশদটি অন্তর্ভুক্ত করে।
অ্যাডাম আর্মার

5

আপনি আপনার পুস্তক কলামের জন্য একটি সূচক তৈরি করার চেষ্টা করতে পারেন,

CREATE INDEX nodes_tags_idx ON nodes USING GIST(tags)

এবং তারপরে ?ক্যোয়ারিকে কেবলমাত্র সারিগুলিতে সীমাবদ্ধ করতে অপারেটরটি ব্যবহার করুন :

SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n 
  INNER JOIN users AS u ON n.user_id = u.id 
  WHERE tags ? 'man_made'
  AND tags->'man_made'='surveillance' 
  AND ST_Within(geom, ST_GeomFromText('POLYGON((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))',4326));

ধন্যবাদ! আমি ইতিমধ্যে সেই সূচকটি তৈরি করেছি, কেবল আমি এটি ব্যবহার করছিলাম না। এটি কেবল নির্দিষ্ট ক্রিয়াকলাপকে গতি দেয়। PostgreSQL 8.3 এ (যা আমি ব্যবহার করছি) এটি কেবল @> এবং? , 9.0 এ এটি @>,?,? এবং এবং? |
mvexel

1
রেকর্ডের জন্য, ?অপারেটরটি ব্যবহার করে ক্যোয়ারীটি আমার ক্যোয়ারির জন্য 88 সেকেন্ডের তুলনায় 48 সেকেন্ড নিয়েছিল (আমি জানি না গতকাল আমি কীভাবে 72 সেকেন্ড পেলাম, সম্ভবত যখন আমি অনুসন্ধানগুলি করছিলাম তখন মেশিনটি জটিল কিছু করছিল)) সুতরাং এখনও আমি যে পারফরম্যান্সটি সন্ধান করছি তা নয়, তবে জিআইএসটি সূচকগুলি কীভাবে হস্তমূল কলামগুলিতে কাজ করে তা সম্পর্কে আমি আরও গভীর উপলব্ধি অর্জন করেছি। আমি চাই পারফরম্যান্স পেতে একটি বস্তুগত দৃষ্টিভঙ্গি তৈরির অন্যান্য সমাধানের সাথে আমার এখনও যেতে হবে।
মভেক্সেল

3

St_within এবং _st_within ফাংশনগুলি তাদের গতির জন্য পরিচিত নয়। এটি জ্যামিতির পরিবর্তে বাক্স চেক করবে বলে&& অপারেটর সাহায্য করতে পারে

আপনি নিম্নলিখিত চেষ্টা করতে পারেন:

SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n 
  INNER JOIN users AS u ON n.user_id = u.id 
  WHERE tags ? 'man_made'
  AND tags->'man_made'='surveillance' 
  AND geom && ST_SetSRID('BOX3D(4 52,5 53)'::box3d,4326);

আরও পারফরম্যান্স টিপসের জন্য চেক করুন: http://postgis.refferences.net/docs/ch06.html


2

আপনার প্রশ্নের সাথে সমস্যাটি হচ্ছে tags->'man_made'='surveillance'ধারা use এটি পোস্টগ্র্রেসকে ট্যাগগুলি hstore প্রসারিত করতে বাধ্য করে এবং এটি সূচকটি ব্যবহারের অনুমতি দেয় না। আপনি যদি এটি ব্যবহার করে @>এটি পুনরায় লিখেন (থাকে) এটি সূচক ব্যবহারের অনুমতি দেবে।

যেহেতু আপনি একটি আয়তক্ষেত্র অনুসন্ধান করছেন, আপনি &&ST_Within এর পরিবর্তে ব্যবহার করতে পারেন । এটির একটি সামান্য লাভ হবে, কারণ ST_Within মূল্যায়ন করা তেমন জটিল নয় এবং ST_Within স্পষ্টতই একটি &&চেক করে।

একটি অতিরিক্ত গতি বৃদ্ধি হ'ল জিআইএসটি সূচকের পরিবর্তে ট্যাগগুলিতে একটি জিআইএন সূচক ব্যবহার করা। জিআইএন সূচকগুলি তৈরি হতে বেশি সময় নেয় তবে দ্রুত হয়।

পুরো জিজ্ঞাসা হবে

SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n INNER JOIN users AS u ON n.user_id = u.id WHERE tags @> hstore('man_made', 'surveillance') AND geom && ST_GeomFromText('POLYGON((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))',4326);

আপনি যদি জানেন যে আপনি একটি নির্দিষ্ট ট্যাগকে প্রচুর পরিমাণে জিজ্ঞাসা করছেন যা আপনি এটি দিয়ে একটি আংশিক সূচক তৈরি করতে পারেন CREATE INDEX ON nodes ( tags->'man_made' ) WHERE (tags->'man_made' IS NOT NULL);

এটি WHERE শর্তটি tags->'man_made'='surveillance'সূচকটি ব্যবহার করার অনুমতি দেবে । দুর্ভাগ্যক্রমে, সেই সূচক @>প্রশ্নগুলিতে সহায়তা করতে পারে না এবং জিআইএন বা জিআইএসটি সূচকগুলি কোয়েরিতে সহায়তা করতে পারে না tags->'foo', তাই আপনার নিজের সূচীগুলির সাথে কোয়েরিগুলি মেলাতে হবে।


tags @>hstore()ধন্যবাদ, ব্যাপকভাবে আমার জিজ্ঞাসা উন্নত করার পরামর্শ ।
বর্ণমালা

1

পরিবর্তে এটি চেষ্টা করুন:

N.geom, n.tags, n.tstamp, u.name থেকে NNuuN NUu_N_user_id = u.id যেখানে ট্যাগগুলি @> 'man_made => নজরদারি' :: hstore এবং ST_Within (জিওম , এসT_ জিমফ্রোম টেক্সট ('পলইগন ((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))', 4326));

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.