পোস্টজিআইএসে বড় ডেটাসেট আমদানির জন্য সেরা হ্যাক কোনটি?


21

আমাকে পোস্টজিআইএসে বড় আকারের শেফিলগুলি (> 1 মিলিয়ন রেকর্ডস) আমদানি করতে হবে এবং আমি এটি করার সর্বোত্তম উপায় সম্পর্কে ভাবছিলাম।

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

আমার প্রশ্নে আমি উদ্দেশ্যটির ভিত্তিতে "হ্যাক" শব্দটি ব্যবহার করেছিলাম কারণ আমি মনে করি এটি কোন সরঞ্জামের বিষয় নয়, তবে কোন পদক্ষেপের সেট বা কনফিগারেশন সেটিংস ব্যবহার করতে হবে। এ পর্যন্ত, আমি চেষ্টা করেছি থুতু প্লাগইন (QGIS), shp2pgsql Postgis টুল এবং GDAL ogr2ogr হাতিয়ার। আপনি এই পোস্টে আমার সম্পূর্ণ পর্যালোচনা দেখতে পারেন । এখনও অবধি, আমি একটি বড় ডেটাসেটের সাথে ডিল করার সময় তাদের সকলকে সত্যিই প্রতিক্রিয়াবিহীন বলে মনে করি। আমি ভাবছিলাম যে কেউ যদি একইরকম সমস্যা অনুভব করে থাকে এবং আপনি যদি পদ্ধতির বিষয়ে কিছু ভাগ করে নিতে পারেন।

উত্তর:


18

আমি আপনার জন্য একটি পরীক্ষা করেছি:

  • পোস্টগ্রিএসকিউএল 9.3
  • পোস্টজিআইএস 2.1
  • উইন্ডোজ 7
  • i7 3770@3.4 গিগাহার্টজ প্রসেসর
  • GDAL 2.0-dev 64-বিট
  • 1.14 মিলিয়ন বহুভুজ আকারের ফাইল, ফাইলের আকার 748 এমবি

Ogr2ogr কমান্ড:

ogr2ogr -f PostgreSQL PG: "dbname = 'ডাটাবেসনাম' হোস্ট = 'অ্যাডর' পোর্ট = '5432' ব্যবহারকারী = 'x' পাসওয়ার্ড = 'y'" টেস্ট.শ্প --config PG_USE_COPY হ্যাঁ-মাল্টিপলজিগন

মোট সময়: 1 মিনিট 30 সেকেন্ড


আপনার উত্তরের জন্য ধন্যবাদ! এটি সত্যিই দ্রুত বলে মনে হচ্ছে; আমি মনে করি এটি আমার পক্ষে কার্যকর হয়নি কারণ আমি --config PG_USE_COPY YES পতাকা ব্যবহার করি নি; আমি সবেমাত্র এটিকে তাড়াতাড়ি আমদানি করতে পেরেছি: পিএসকিএল লক্ষ্য-ডিবি-ইউ <প্রশাসক ব্যবহারকারী> -p <port> -h <ডিবি উদাহরণ নাম> -c "DEL 'উত্স-টেবিল সিএসভি' থেকে উত্স-টেবিলটি অনুলিপি করুন DELIMITER ' , '' (এবং তারপরে জ্যামিতির পুনর্গঠন), যা আমি অনুমান করি একটি অনুরূপ পন্থা।
ডাবলবাইট

কপি দ্রুততর হয় এবং ডেটা নতুন টেবিলগুলিতে লেখা হয় তখন GDAL 2.0 এ ডিফল্ট হবে। যখন সন্নিবেশগুলি ব্যবহার করা হয়, তখন লেনদেনের ডিফল্ট আকার (-gt পরামিতি দ্বারা নিয়ন্ত্রিত) GDAL সংস্করণ 1.11 এর আগে 200 টি বৈশিষ্ট্যযুক্ত যখন কেবল 200 বৈশিষ্ট্য ছিল। বড় লেনদেনের অর্থ হ'ল কম লেনদেন এবং এটি একটি বিশাল গতি অর্জন করতে পারে।
ব্যবহারকারী 30184

4
কপি ব্যবহার করা কী, এবং আপনি সম্ভবত shp2pgsql এবং -D পতাকা সহ আরও দ্রুত অনুবাদ পাবেন। shp2pgsql -D test.shp | পিএসকিএল টেস্টডিবি
পল র‌্যামসে

পল, shp2pgsql -D কপি হিসাবে একই? এটি "ডাম্প" ফর্ম্যাটটি ব্যবহার করে এমন ডক্স থেকে পরিষ্কার নয় তবে এটি আপলোড (ব্যাকআপ / পুনরুদ্ধারের বিপরীতে) অপারেশনের জন্য এমনকি কী বোঝায় তা আমি নিশ্চিত নই। আমি লক্ষ্য করেছি যে shp2pgsql-gui এর একটি বিকল্প রয়েছে "INSERT এর চেয়ে COPY ব্যবহার করে ডেটা লোড করুন", তবে কোনও "ডাম্প ফর্ম্যাট" বিকল্প নেই, সুতরাং আমি কি এগুলি একই বলে ধরে নিচ্ছি?
লি হাচাদুরিয়ান

হ্যাঁ, -ডি কপি ব্যবহার করার মতোই।
ড্যারেল ফুহরিমান

9

30304 ব্যবহারকারীর পরামর্শের পরে , পল রামসে এবং আমার নিজের পরীক্ষাগুলি। আমি এই প্রশ্নের উত্তর দেওয়ার সিদ্ধান্ত নিয়েছি।

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

এটি মনে রেখে, আমি নতুন পদ্ধতিতে ডেটা ডাম্পের প্রচারের জন্য "\ অনুলিপি" নির্দেশিকা ব্যবহার করে আমার পদ্ধতির পুনরায় ইঞ্জিনিয়ার করেছি। আমি মনে করি এই কৌশলটি একটি অত্যাবশ্যক কী, যা এই প্রশ্নের মন্তব্য / উত্তরগুলিতেও উল্লেখ করা হয়েছিল।

psql database -U user -h host.eu-west-1.rds.amazonaws.com -c "\copy newt_table from 'data.csv' with DELIMITER ','"

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

আমি বেঞ্চমার্ক থেকেও পরামর্শ করার সিদ্ধান্ত নিয়েছে user30184 , পল রামসে । আমার ডেটা ফাইলটি 3035369 রেকর্ড এবং 82 এমবি সহ পয়েন্ট শেফাইল ছিল।

Ogr2ogr পদ্ধতির (PG_USE_COPY নির্দেশিকা ব্যবহার করে) 1:03:00 মি তে সমাপ্ত হয়েছে, যা এখনও আগের চেয়ে অনেক ভাল।

Shp2pgsql পদ্ধতির (-D নির্দেশিকা ব্যবহার করে) কেবলমাত্র 00:01:04 মিটারে শেষ হয়েছে।

এটি বলার অপেক্ষা রাখে না যে ogr2ogr অপারেশনের সময় একটি স্থানিক সূচক তৈরি করেছিল, যখন shp2pgsql তা করেনি। আমি জানতে পেরেছি যে এই ধরণের অনুরোধের সাথে আমদানি ক্রিয়াকলাপটি স্ফীত করার চেয়ে আমদানি করার পরে সূচক তৈরি করা আরও বেশি দক্ষ ।

উপসংহারটি হ'ল: shp2pgsql, সঠিকভাবে প্যারামিটারাইজড হলে বড় আমদানি সম্পাদনের জন্য অত্যন্ত উপযুক্ত , যাকে অ্যামাজন ওয়েব পরিষেবাদিগুলির মধ্যে অন্তর্ভুক্ত করা যায়।

3 মিলিয়নেরও বেশি রেকর্ড সহ স্থানিক টেবিল, shp2pgsql ব্যবহার করে আমদানি করা

আপনি এই পোস্টের আপডেটে এই সিদ্ধান্তে আরও বিস্তারিত বিবরণ পড়তে পারেন ।


আপনি জিডিএলকে খুব বেশি অভিযুক্ত করার আগে ডকুমেন্টেশনটি একবার দেখুন। Ogr2ogr এর সাথে জড়িত নয়, এটি জিডিএল পোস্টজিআইএস ড্রাইভার এবং এটি স্থানিক সূচক gdal.org/drv_pg.html অক্ষম করার জন্য একটি বিকল্প রয়েছে । Ogr2ogr এর ব্যবহার হল -Lco SPATIAL_INDEX = কোন যোগ করা N জিডএল এর কাছে পিজিডাম্পের জন্য আরও একটি ড্রাইভার রয়েছে যা আপনার ব্যবহারের ক্ষেত্রে আরও ভাল gdal.org/drv_pgdump.html উপযুক্ত হতে পারে । সম্ভবত আপনি এই বিষয়গুলি আপনার ব্লগে উল্লেখ করবেন।
ব্যবহারকারী 30184

1
গতির পার্থক্য 1:03:00 এবং 00:01:04 ogr2ogr এবং shp2pgsql এর মধ্যে বিশাল। আমি নিশ্চিত যে এটি বাস্তব তবে ফলাফলটি সাধারণীকরণ করা যাবে না। আপনি যদি কোনও স্থানীয় পোস্টজিআইএস ডাটাবেস দিয়ে পরীক্ষা করেন তবে পার্থক্যটি অনেক কম হবে। আপনার ফলাফলের অর্থ হল ogr2ogr এর জন্য কিছু খুব খারাপ। আপনি কোন জিডিএল সংস্করণ ব্যবহার করেছেন? এটি যদি ভি। ১.১১ এর চেয়ে পুরনো হয় তবে আপনার কি -২০০০gt 60000 এর মতো কিছু যোগ করে লেনদেনের আকার বাড়িয়ে দেওয়ার চেষ্টা করেছিলেন?
ব্যবহারকারী 30184

1
এটি আমদানিতে সূচকটি তৈরি করার পরে এটি করার চেয়ে বাড়তি কোনও প্রসারণ নয়। জারি করা আদেশটি হুবহু একই এবং সময়টি ঠিক একই রকম হয়। এছাড়াও, যদি আপনি shp2pgsql সূচকটি যুক্ত করতে চান তবে আপনাকে কেবল '-I' বিকল্পটি যুক্ত করতে হবে।
ড্যারেল ফুহরিমান

তোমার মন্তব্যের জন্য ধন্যবাদ. আমার কেস স্টাডি এডাব্লুএসে চলমান পোস্টগ্রিসের আমদানি ছিল, সুতরাং নেটওয়ার্কের মাধ্যমে লেনদেনটি ভালভাবে সম্পাদন করা আমার পক্ষে গুরুত্বপূর্ণ ছিল। আমি ogr2ogr এ PG_USE_COPY পতাকা ব্যবহার করেছি, তবে আমি পিজিডাম্প ড্রাইভারটি চেষ্টা করিনি, যা ম্যানপেজ থেকে আশাব্যঞ্জক বলে মনে হচ্ছে। আমার জিডিএল এর সংস্করণটি 1.7। আমার শর্তগুলির সমতাতে (সূচকের সাথে বা ছাড়াই) সমস্ত কিছু বেনমার্ক করা উচিত, তবে ড্যানিয়েল আমাকে যা বলেন তা থেকে সমস্যাটি হয় না, যেহেতু আমি ডাটাবেজে
সূচিটি

1
হ্যাঁ, কেস স্টাডিগুলি যদি সেগুলি লেখা থাকে তবে তা ঠিক আছে যাতে পাঠকরা এমন অনুভূতি না পান যে ফলাফলগুলি সত্যিকারের প্রতিনিধিত্ব করে তার ফলাফলকে সাধারণীকরণ করা যায়। উদাহরণস্বরূপ এটি উল্লেখ করা ভাল হবে যে আপনি 5 বছরের পুরনো জিডিএল সংস্করণ দিয়ে পরীক্ষা করেছেন এবং এর পরে কিছু বিকাশ ঘটতে পারে বা নাও হতে পারে। আপনার সংস্করণটি অবশ্যই ভাল পারফরম্যান্সের জন্য আরও বড় মানের মূল্য প্রয়োজন তবে যাইহোক এটি কোনও 1.10 এর চেয়ে পুরানো জিডিএল সংস্করণ দিয়ে পরীক্ষা করাতে খুব একটা বোধগম্য নয়।
ব্যবহারকারী 30184
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.