রাস্টার ডেটাবেসগুলির জন্য অনুসন্ধানগুলি কীভাবে দ্রুত করবেন?


16

এই কলামগুলির সাথে আমার পোস্টগ্র্যাস্কিএল / পোস্টগিসে একটি রাস্টার ডাটাবেস রয়েছে:

(আইডি, রাস্ট, ডেটা_এই_ ডেটা)

'রাস্ট' হ'ল কলামটি হ'ল ডাব্লুকেটি ফর্ম্যাটে রাস্টার ফাইল রয়েছে। WGS84 সিস্টেমে (30.424, -1.66) এবং 2002-01-09-এর জন্য পয়েন্টের DN মান সন্ধান করার জন্য একটি উদাহরণ ক্যোয়ারী নিম্নলিখিত:

SELECT 
     st_value(rast,(st_GeomFromText('POINT(30.424 -1.66)', 4326))) as val
FROM 
     my_table
WHERE
     date_of_data='2002-01-09'

এই জাতীয় প্রশ্নগুলির গতি বাড়ানোর জন্য কি কোনও পদ্ধতি আছে (উদাহরণস্বরূপ স্থানিক সূচক)?


সম্ভবত আপনি আরও কিছু বিবরণ সরবরাহ করে আমাদের সাহায্য করতে পারেন: মাই_ টেবিলটিতে কয়টি রেকর্ড রয়েছে? রাস্টার কলামে ডেটা কত বড়? তারিখের_আপনি_দেটে আপনার কতটি পৃথক তারিখ রয়েছে?
dwurf

এটি যুক্ত করুন: রাস্ট কলামের এসআরআইডি কী?
dwurf

উত্তর:


12

এটি একটি উত্তেজনাপূর্ণ প্রশ্ন! আপনি জিজ্ঞাসা করতে চান রাস্টার কত বড়? ডাব্লুকেটিআাস্টার একটি বিএলওবি হিসাবে ডাটাবেসে সংরক্ষণ করা হয় । একটি নির্দিষ্ট বিন্দুতে মানটি সন্ধান করার জন্য, পরিচিত (x_0, y_0) কোণার স্থানাঙ্ক সারি / কলাম সূচকগুলি (i, j) (dx, dy) পদক্ষেপ এবং ঘূর্ণন ব্যবহার করে গণনা করা হয়। (আই, জে) সাথে পরিচিত, এস এসওয়ালিউ () ফাংশনটি সঠিক বাইট অফসেটে আসল ডেটা অ্যাক্সেস করতে পারে।

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

স্থানিকভাবে তালিকাবদ্ধ রাস্টার ডেটা সম্ভবত কেবল বাউন্ডিং বাক্সকে সূচক করে দেবে, যা আপনার সমস্যার জন্য সত্যিকারের সাহায্য নয়।


1
টাইলিং জিনিসটি যাবার উপায় বলে মনে হচ্ছে - এই লিঙ্কটি দেখুনCREATE INDEX srtm_tiled_rast_gist_idx ON srtm_tiled USING GIST (ST_ConvexHull(rast));
আপনারও

4

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

অন্য চিন্তা (এবং আমি এটি এখানে প্রাসঙ্গিকভাবে নিশ্চিত না) হ'ল মাল্টি-ব্যান্ড রাস্টারগুলি ব্যবহার করা। উদাহরণস্বরূপ, আপনি যদি ডেটা মাসিক স্লাইসগুলি খুঁজছেন, প্রতি মাসে একটি রাস্টার স্তর হতে পারে। তারপরে স্তরযুক্ত রাস্টারকে জিজ্ঞাসাবাদ করে আপনি বিভিন্ন সময় স্লাইসে একটি পয়েন্টের একাধিক মানগুলি পেতে পারেন। আমি পৃথক রেস্টারদের জিজ্ঞাসাবাদ করার চেয়ে এই পদ্ধতিটি আরও দ্রুত হতে দেখেছি।

অবশেষে, আপনি যখন আপনার ডেটা লোড করবেন সেখানে -t TILE_SIZE পতাকা রয়েছে । আপনি যে টাইলের আকারটি ব্যবহার করছেন তা যদি আপনার ক্যোয়ারির জন্য ভাল কাজ করে তবে আপনি অন্বেষণ করতে পারেন।


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

আমি সম্মত হই - সম্ভবত আমি জোর দিয়েছি না যে এটি একই সময়ে কার্যকর যদি একই সাথে বেশ কয়েকটি মান প্রয়োজন হয়; আমি এই স্পষ্ট করব।
djq

3

আপনার ডেটা বিতরণের উপর নির্ভর করে আপনি কেবল date_of_dataকলামটি সূচী দিয়ে কিছু খুব ভাল স্পিডআপ পেতে পারেন ।

আপনার সূচকগুলি ব্যবহার হচ্ছে কিনা তা নির্ধারণের জন্য আপনি এক্সপ্ল্যানাল অ্যানালাইজ সিনট্যাক্স ব্যবহার করতে পারেন


কি ধরনের সূচক? আপনি আরো নির্দিষ্ট হতে পারে?
f.ashouri

শুধু একটি প্রমিত btree সূচক: create index tbl_name_date_idx on tbl_name (date_of_data)। আপনার যদি অনেক স্বতন্ত্র তারিখ থাকে তবে এটি পোস্টজিআইএসের যে পরিমাণ ডেটা প্রক্রিয়া করতে হবে তার পরিমাণকে হ্রাস করবে।
dwurf

আপনাকে ধন্যবাদ, তবে এটি আমার প্রশ্নের জন্য কার্যকর হয়নি।
f.ashouri

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

ক্যোরিটি কি সূচকটি ব্যবহার করছে? আপনি কি আউটপুট পেস্টবিন করতে পারেন explain analyze SELECT st_value(rast,(st_GeomFromText('POINT(30.424 -1.66)', 4326))) as val from my_table where date_of_data='2002-01-09'?
dwurf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.