যদিও এই প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছিল, আমি ভেবেছিলাম যে আমি আমার দুটি সেন্ট দিতে পারি।
অস্বীকৃতি : আমি কিছু বছর জিওডাটাবেস দলে ইএসআরআইয়ের জন্য কাজ করেছি এবং জিওডাটাবেস কোডের বিভিন্ন অংশ (ভার্সনিং, কার্সার, সম্পাদনাশাসন, ইতিহাস, সম্পর্ক সম্পর্কিত ক্লাস, ইত্যাদি) বজায় রাখার দায়িত্বে ছিলাম।
আমি মনে করি ইএসআরআই কোডের সাথে পারফরম্যান্স সমস্যার সবচেয়ে বড় উত্স হ'ল বিভিন্ন বস্তু বিশেষত বিভিন্ন জিওডাটাবেস অ্যাবস্ট্রাকশনের "সামান্য" বিশদ ব্যবহারের অর্থ বোঝা যাচ্ছে না! তাই প্রায়শই, কথোপকথনটি ভাষাগুলি পাল্টে দেয় পারফরম্যান্সের বিষয়গুলির অপরাধী হিসাবে। কিছু ক্ষেত্রে এটি হতে পারে। কিন্তু সব সময় না। আসুন ভাষা আলোচনা দিয়ে শুরু করি এবং আমাদের ফিরে আসার পথে কাজ করি।
1.- আপনি যখন জটিল কিছু করতে চান তখন প্রোগ্রামিং ল্যাঙ্গুয়েজটি কেবল গুরুত্বপূর্ণ pick বেশিরভাগ সময়, এটি ক্ষেত্রে হয় না।
এবং - রুমে বড় হাতি যে সব ESRI কোড মূলে, আপনি ArcObjects আছে ArcObjects সি লেখা আছে ++, এর COM ব্যবহার । এই কোডটির সাথে যোগাযোগের জন্য একটি ব্যয় আছে। এটি সি #, ভিবি.এনইটি, পাইথন বা অন্য যে কোনও কিছুই আপনি ব্যবহার করছেন তার পক্ষে সত্য।
আপনি কোডটি আরম্ভের সময় একটি মূল্য দিতে হবে। আপনি যদি একবার এটি করেন তবে এটি একটি নগণ্য ব্যয় হতে পারে।
তারপরে আপনি আরকোবজেক্টসের সাথে ইন্টারঅ্যাক্ট করার পরের প্রতিটি সময়ের জন্য একটি মূল্য দিতে হবে।
ব্যক্তিগতভাবে, আমি সি # তে আমার ক্লায়েন্টদের জন্য কোড লিখতে ঝোঁক, কারণ এটি সহজ এবং যথেষ্ট দ্রুত। যাইহোক, আমি যতবারই জিওপ্রসেসিংয়ে ইতিমধ্যে প্রয়োগ করা হয়েছে এমন বিপুল পরিমাণে ডেটার জন্য ডেটা সরিয়ে নিতে বা কিছু প্রক্রিয়াজাত করতে চাই আমি কেবল স্ক্রিপ্টিং সাবসিস্টেমটি আরম্ভ করি এবং আমার পরামিতিগুলিতে পাস করি। কেন?
- এটি ইতিমধ্যে বাস্তবায়িত হয়েছে। তাহলে চাকা পুনরুদ্ধার কেন?
- এটি আসলে দ্রুত হতে পারে । "এটি সি # তে লেখার চেয়ে আরও দ্রুত?" হ্যাঁ! যদি আমি প্রয়োগ করি, বলুন, ম্যানুয়ালি ডেটা লোড হচ্ছে, এর অর্থ হল আমি টাইট লুপে .NET প্রসঙ্গের স্যুইচিংয়ের মূল্য প্রদান করি। প্রতিটি গেটভ্যালু, sertোকান, শেপকপির একটি মূল্য আছে। আমি যদি জিপি-তে একটি কল করি, তবে পুরো ডেটা লোডিং প্রক্রিয়া জিপি-র সিওএম পরিবেশের মধ্যে সি ++ এর প্রকৃত বাস্তবায়নে ঘটবে। কনটেক্সট স্যুইচিংয়ের জন্য আমি মূল্য দিচ্ছি না কারণ সেখানে কিছুই নেই - এবং তাই এটি দ্রুত।
হ্যাঁ হ্যাঁ, তাই যদি সমাধান করা হয় তবে জিওপ্রসেসিংয়ের অনেকগুলি কার্যকারিতা ব্যবহার করা যায়। আসলে, আপনি যত্নবান হতে হবে।
২. জিপি হ'ল একটি কালো বাক্স যা চারপাশে ডেটা (সম্ভাব্য অহেতুক) অনুলিপি করে
এটি একটি দ্বিগুণ তরোয়াল। এটি একটি কালো বাক্স যা অভ্যন্তরীণভাবে কিছু জাদু করে এবং ফলাফলগুলি ছড়িয়ে দেয় - তবে ফলাফলগুলি প্রায়শই নকল হয়। আপনি 9 টি বিভিন্ন ফাংশনের মাধ্যমে আপনার ডেটা চালানোর পরে 100,000 সারিগুলি সহজেই ডিস্কে 1,000,000 সারিগুলিতে রূপান্তরিত হতে পারে। শুধুমাত্র জিপি ফাংশনগুলি ব্যবহার করা লিনিয়ার জিপি মডেল তৈরি করার মতো, এবং ভাল ...
৩. বৃহত্তর ডেটাসেটের জন্য অনেক বেশি জিপি ফাংশন চেইন করা অত্যন্ত অযোগ্য। একটি জিপি মডেল (সম্ভাব্য) সত্যিই সত্যই বোবা উপায়ে একটি কোয়েরি চালানোর সমতুল্য
এখন আমার ভুল করবেন না। আমি জিপি মডেলগুলিকে পছন্দ করি - এটি আমাকে কোড লেখার সময় থেকে বাঁচায়। তবে আমি আরও সচেতন যে এটি বড় ডেটাসেটগুলি প্রক্রিয়াকরণের সবচেয়ে কার্যকর উপায় নয়।
আপনি কি কোয়েরি প্ল্যানারের কথা শুনেছেন ? কাজটি হ'ল যে এসকিউএল বিবৃতিটি আপনি কার্যকর করতে চান, পরিচালনা গ্রাফ আকারে একটি এক্সিকিউশন প্ল্যান উত্পন্ন করে যা জিপি মডেলের মতো অনেকগুলি হ্যাক দেখায় , ডিবিতে সঞ্চিত পরিসংখ্যান দেখে এবং সবচেয়ে বেশি পছন্দ করে তাদের কার্যকর করার জন্য সর্বোত্তম আদেশ । আপনি জিনিসগুলি যে ক্রমে রেখেছেন তা জিপি কেবল তাদের কার্যকর করে কারণ আরও বুদ্ধিমানের সাথে কিছু করার কোনও পরিসংখ্যান নেই - আপনি ক্যোয়ারী পরিকল্পনাকারী । এবং কি অনুমান? আপনি যে ক্রমে জিনিসগুলি চালাচ্ছেন তা আপনার ডেটাसेटের উপর নির্ভরশীল dependent আপনি যে ক্রমগুলিতে জিনিসগুলি নির্বাহ করেন তা দিন এবং সেকেন্ডের মধ্যে পার্থক্য তৈরি করতে পারে এবং এটি সিদ্ধান্ত নেওয়া আপনার পক্ষে।
"দুর্দান্ত" আপনি বলেছেন, আমি নিজে জিনিসগুলি স্ক্রিপ্ট করব না এবং কীভাবে স্টাফ লিখি সে সম্পর্কে সতর্ক থাকব না। তবে আপনি কি জিওডাটাবেস বিমূর্ততা বুঝতে পারেন?
4. জিওডাটাবেস বিমূর্ততা বোঝার দরকার নেই সহজেই আপনাকে কামড় দিতে পারে
সম্ভবত আপনাকে সমস্যা দিতে পারে এমন প্রতিটি জিনিসকে নির্দেশ করার পরিবর্তে আমাকে কয়েকটি সাধারণ ভুলগুলি নির্দেশ করতে দিন যা আমি সব সময় এবং কিছু প্রস্তাবনা দেখি।
- পুনর্ব্যবহারযোগ্য কার্সারগুলির জন্য সত্য / মিথ্যা মধ্যে পার্থক্য বোঝা । সত্য হিসাবে সেট করা এই ছোট্ট পতাকাটি প্রস্থের রানটাইম অর্ডারগুলিকে আরও দ্রুত করতে পারে।
- ডেটা বোঝার জন্য আপনার টেবিলটি LoadOnlyMode এ রাখুন । প্রতিটি সন্নিবেশে সূচকটি আপডেট করবেন কেন?
- বুঝতে পারুন যে আই ওয়ার্কস্পেসএডিট :: স্টার্ট এডিটিং সমস্ত ওয়ার্কস্পেসে একই দেখায়, তারা প্রতিটি ডাটাসোর্সগুলিতে একেবারে ভিন্ন প্রাণী। একটি এন্টারপ্রাইজ জিডিবিতে, আপনার লেনদেনের জন্য সংস্করণ বা সমর্থন থাকতে পারে। শেফফায়ালে এটি একেবারেই অন্যরকমভাবে প্রয়োগ করতে হবে। আপনি কীভাবে পূর্বাবস্থায় ফিরবেন / পুনরায় বাস্তবায়ন করবেন? এমনকি আপনার এটিকে সক্ষম করার দরকারও আছে (হ্যাঁ, এটি মেমরির ব্যবহারে একটি পার্থক্য আনতে পারে)।
- ব্যাচ অপারেশন বা একক সারির ক্রিয়াকলাপগুলির মধ্যে পার্থক্য। পয়েন্টে getRow বনাম getRows ক্ষেত্রে - এটি একটি সারি পাওয়ার জন্য কোনও ক্যোয়ারী করা বা একাধিক সারি আনার জন্য একটি কোয়েরি করার মধ্যে পার্থক্য। গেটরউতে কল সহ একটি দৃ A় লুপটি হ'ল ভয়ঙ্কর পারফরম্যান্স এবং এটি পারফরম্যান্স ইস্যুগুলির অপরাধী # 1
- আপডেটসার্চডরোস ব্যবহার করুন
- ক্রিয়েটরো এবং ক্রিয়েটরোউফারের মধ্যে পার্থক্যটি বুঝুন । রানটাইম সন্নিবেশ করানোর ক্ষেত্রে বিশাল পার্থক্য।
- বুঝুন যে IRow :: স্টোর এবং IFeature :: স্টোর সুপার ভারী আরম্ভ করে বহুরুপী অপারেশন। এটি সম্ভবত ধীর পারফরম্যান্সের অপরাধী # 2 কারণ। এটি কেবল সারিটি সংরক্ষণ করে না, এটিই এমন পদ্ধতি যা আপনার জ্যামিতিক নেটওয়ার্ক ঠিক আছে কিনা তা নিশ্চিত করে, যে আর্কম্যাপ সম্পাদকটি বিজ্ঞপ্তি পেয়েছে যে একটি সারি পরিবর্তিত হয়েছে, যা এই সারির সাথে কিছু করার আছে এমন সমস্ত সম্পর্ক শ্রেণিকে অবহিত করে যা বৈধ হওয়ার জন্য বৈধ নিশ্চিত হয়ে নিন যে কার্ডিনালিটিটি বৈধ কিনা ইত্যাদি আপনার এটির সাথে নতুন সারি সন্নিবেশ করা উচিত নয়, আপনি ইনসার্টকার্সার ব্যবহার করা উচিত !
- আপনি কি সম্পাদনা সেশনে এই সন্নিবেশগুলি করতে (প্রয়োজন) চান? আপনি না বা না করলে এটি একটি বিশাল পার্থক্য করে। কিছু ক্রিয়াকলাপের জন্য এটি প্রয়োজন (এবং জিনিসগুলি ধীরে ধীরে তৈরি করুন), তবে যখন আপনার এটির প্রয়োজন হবে না, পূর্বাবস্থায় ফেরানো / ফিরিয়ে নেওয়া বৈশিষ্ট্যগুলি এড়িয়ে যান।
- কার্সার ব্যয়বহুল সংস্থান। একবার আপনার সাথে একটি হ্যান্ডেল হয়ে গেলে, আপনি গ্যারান্টিযুক্ত যে আপনার কাছে ধারাবাহিকতা এবং বিচ্ছিন্নতা থাকবে এবং এর একটি ব্যয় হবে।
- অন্যান্য সংস্থান যেমন ডেটাবেস সংযোগগুলি (আপনার ওয়ার্কস্পেস রেফারেন্স তৈরি এবং ধ্বংস করবেন না) এবং সারণী হ্যান্ডলগুলি ক্যাশে করুন (প্রতিবার আপনি একটি খুলুন বা বন্ধ করুন - বেশ কয়েকটি মেটাডেটা টেবিলগুলি পড়তে হবে)।
- ফিচারড্যাটাসেটের ভিতরে বা বাইরে ফিচারক্লাসগুলি রাখলে পারফরম্যান্সে বিশাল পার্থক্য আসে। এটি কোনও সাংগঠনিক বৈশিষ্ট্য হিসাবে বোঝানো হচ্ছে না !
5. এবং সর্বশেষে এবং কমপক্ষে ...
আই / ও বাউন্ড এবং সিপিইউ বাউন্ড অপারেশনের মধ্যে পার্থক্যটি বুঝুন
আমি সেই আইটেমগুলির প্রতিটি একের উপরে আরও প্রসারিত করার বিষয়ে এবং সম্ভবত এই বিষয়গুলির প্রতিটির একটিতে অন্তর্ভুক্ত এমন একটি ব্লগ এন্ট্রি করার বিষয়ে সৎভাবে চিন্তা করেছি, তবে আমার ক্যালেন্ডারের ব্যাকলগের তালিকাটি আমাকে কেবল মুখে থাপ্পর মেরে আমার দিকে চিত্কার শুরু করে।
আমার দুই সেন্ট.