কখন এবং কেন ডেটাবেস ব্যয়বহুল হয়?


354

আমি ডাটাবেসগুলিতে কিছু গবেষণা করছি এবং আমি রিলেশনাল ডিবিগুলির কিছু সীমাবদ্ধতার দিকে তাকিয়ে আছি।

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

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

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


3
আপনি কি সুবিধাগুলি সন্ধান করছেন? ;)
ডেভিড অলড্রিজ

আমি একটি উদ্দেশ্য (যদি এমন একটি জিনিস থাকে) তুলনা করছি। প্রো এর, কন এর, কি আছে।
রিক 13

ক্লাউড কম্পিউটিংয়ের প্রাক-রেন্ডার করা পদ্ধতিগুলি "ভুল সংযুক্তি" সমস্যাটি এড়িয়ে যে কোনও উপায়ে বাজি ধরতে সক্ষম হবে বলে পূর্বাভাস দেওয়া হয়েছে। গুগলের নিজস্ব সিস্টেমে কিছু শ্বেতপত্র রয়েছে। বেশ আকর্ষণীয় - বিশেষ ক্ষেত্রে প্রযোজ্যতা বাড়ানোর উপায়।
পিটার উইন

@ পিটারওয়োন - এই কয়েকটি কাগজের একটি রেফারেন্স দেওয়ার জন্য যত্ন? আপনার প্রোফাইলে প্রশ্নের উত্তর দেওয়ার জন্য PS, অ্যান্ড্রয়েড হ'ল ওপেন সোর্স - ভাল, কমপক্ষে আংশিক তাই গিক্স সেই ব্যান্ডওয়্যাগনে ঝাঁপিয়ে পড়ে। প্রযুক্তিগতভাবে দুর্দান্ত ধোয়া ছাড়াই উন্নত হিসাবে দেখা হয়েছে, তারা গুগলের আঁটসাঁট ও ঘামযুক্ত আলিঙ্গনগুলিতে লেমিংয়ের মতো অনুসরণ করেছিল! বেটাম্যাক্স কেউ? আমার নিজের হৃদয়ের কাছাকাছি (এবং প্রজন্ম), মাইএসকিউএল (কোনও FOREGIN KEYএসএফএফএসবিহীন) কীভাবে বিশ্বের সর্বাধিক জনপ্রিয় "আর" ডিবিএমএসে পরিণত হয়েছিল (যখন তার কোনও পোস্ট উইন্ডোজ সংস্করণ নেই) এবং ফায়ারবার্ড (ওপেনসোর্সিং ফিয়াস্কো) , নাকি এসকিউএলাইটও?
ভেরেস

বলা বাহুল্য, আমি একাধিক ব্যবহারকারী সিস্টেমের জন্য মাইএসকিউএল এবং এসকিউএলাইটকে একক ব্যবহারকারীর ক্ষেত্রের মধ্যে স্টারলার হিসাবে পোস্টগ্র্রেএসকিউএল এবং ফায়ারবার্ডকে অনেক বেশি উচ্চতর হিসাবে বিবেচনা করি । এসকিউএলাইট sqlite.org সাইটটি পরিচালনা করে (দিনে 400,00 হিট!)।
ভেরেস

উত্তর:


470

পারফরম্যান্স উন্নয়নের জন্য অস্বীকৃতি? এটি বিশ্বাসযোগ্য মনে হয়, কিন্তু এটি জল ধরে না।

ক্রিস ডেট, যিনি ডঃ টেড কোডের সাথে সম্পর্কযুক্ত তথ্য মডেলের মূল প্রবক্তা ছিলেন, সাধারণীকরণের বিরুদ্ধে ভুল তথ্য যুক্তি দিয়ে ধৈর্য ধারণ করে দৌড়ে গিয়েছিলেন এবং বৈজ্ঞানিক পদ্ধতি ব্যবহার করে পদ্ধতিগতভাবে তাদের ধ্বংস করেছিলেন: তিনি বড় ডেটাবেস পেয়েছিলেন এবং এই দাবিগুলি পরীক্ষা করেছিলেন।

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

তিনি এটি পেয়েছিলেন:

  • তাদের মধ্যে কিছু বিশেষ মামলার জন্য ধার্য রয়েছে
  • তাদের সমস্ত সাধারণ ব্যবহারের জন্য অর্থ ব্যয় করতে ব্যর্থ
  • এগুলির সবগুলিই অন্যান্য বিশেষ মামলার জন্য উল্লেখযোগ্যভাবে খারাপ

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

ফলাফলটি বাস্তবায়িত করার সাথে বাল্ক ডিস্কের পাঠগুলি জড়িত যা প্রস্থের আদেশ অনুসারে মহড়ার ব্যয়বহুল দিক। বিপরীতে একটি যোগদান সম্পাদন করার জন্য, যৌক্তিকভাবে কেবল কীগুলি পুনরুদ্ধার করা দরকার । অনুশীলনে, এমনকি মূল মানগুলি আনা হয় না: মূল হ্যাশ মানগুলি তুলনা করার জন্য ব্যবহৃত হয়, বহু-কলামে যোগদানের ব্যয় হ্রাস করে এবং স্ট্রিং তুলনার সাথে জড়িতদের ব্যয়কে মৌলিকভাবে হ্রাস করে। কেবলমাত্র ক্যাশে যথেষ্ট পরিমাণে ফিট হবে না, এর জন্য ডিস্ক পড়াও অনেক কম।

তদুপরি, একজন ভাল আশাবাদী সর্বাধিক সীমাবদ্ধ শর্তটি চয়ন করে এবং এটি যোগদানের আগে এটি প্রয়োগ করে, খুব কার্যকরভাবে উচ্চ কার্ডিনালিটির সাথে সূচকগুলিতে যোগদানের উচ্চ নির্বাচনকে উপকার করে।

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

এটি বুঝতে গুরুত্বপূর্ণ যে টেবিল স্ক্যানগুলি (যোগদানের উত্পাদন করার সময় একটি টেবিলের প্রতিটি সারি পরীক্ষা) অনুশীলনে বিরল। নীচের এক বা একাধিকটি ধরে রাখলে কেবল কোনও কোয়েরি অপটিমাইজার একটি টেবিল স্ক্যান বেছে নেবে।

  • সম্পর্কের মধ্যে 200 টিরও কম সারি রয়েছে (এক্ষেত্রে একটি স্ক্যান সস্তা হবে)
  • যোগদানের কলামগুলিতে কোনও উপযুক্ত সূচক নেই (যদি এই কলামগুলিতে যোগদান করা অর্থবহ হয় তবে সেগুলি কেন সূচী করা হয় না? এটি ঠিক করুন)
  • কলামগুলির সাথে তুলনা করার আগে একটি ধরণের জবরদস্তি প্রয়োজন (ডাব্লুটিএফ? এটি ঠিক করুন বা বাড়িতে যান) অ্যাডো.নেট ইস্যুটির জন্য শেষ নোটগুলি দেখুন
  • তুলনার আর্গুমেন্টগুলির মধ্যে একটি হল একটি অভিব্যক্তি (কোনও সূচক নয়)

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

যদি কেউ আমাকে এটির পরিবর্তিত বিশ্ব মনে করিয়ে দিতে চায় তবে আমি মনে করি আপনি গ্রান্টিয়ার হার্ডওয়ারে আরও বড় ডেটাসেটগুলি কেবল তারিখের অনুসন্ধানের বিস্তারকে অতিরঞ্জিত করে।

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

আপনি এটি মিথ্যা সাধারণীকরণে ন্যায়সঙ্গত নন । ডেটা গুদামজাত করার পরিস্থিতিতে দৃ den়তার সাথে ডোনোরালাইমাইজেশনের যথাযথ ব্যবহার সম্পর্কিত আরও তথ্যের জন্য নোট বিভাগের শেষে দেখুন।

আমিও সাড়া দিতে চাই

কিছু লিপগ্লাস সহ কেবল কারটিশিয়ান পণ্যগুলিতে যোগদান করেন

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

কারটিশিয়ান পণ্য উত্পাদন করতে আপনি কখনই অপটিমাস্টার পাবেন তার একমাত্র উপায় হ'ল একটি প্রিকেট সরবরাহ করতে ব্যর্থ: SELECT * FROM A,B


মন্তব্য


ডেভিড অলড্রিজ কিছু গুরুত্বপূর্ণ অতিরিক্ত তথ্য সরবরাহ করে।

ইনডেক্স এবং টেবিল স্ক্যানগুলি ছাড়াও অন্যান্য কৌশলগুলি প্রকৃতপক্ষে রয়েছে এবং একটি আধুনিক অপটিমাইজার কার্যকর করার পরিকল্পনা তৈরির আগে এগুলি সমস্ত ব্যয় করে।

একটি ব্যবহারিক পরামর্শের অংশ: যদি এটি বিদেশী কী হিসাবে ব্যবহার করা যায় তবে এটি সূচক করুন, যাতে একটি সূচক কৌশলটি অপ্টিমাইজারের জন্য উপলব্ধ

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


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

যে কারণে আমি এতটা বর্বরতার সাথে প্রতিক্রিয়া জানালাম তা হ'ল বক্তব্যটি যেমনটি বলেছিল তেমনটি

যোগদান করেছে হয় কার্টিজিয়ান পণ্য ...

এটি যা বোঝানো হয়েছিল তা নাও হতে পারে তবে এটি যা লেখা হয়েছিল, এবং এটি স্পষ্টভাবে অসত্য। কার্টেসিয়ান পণ্য একটি সম্পর্ক is একটি যোগদান একটি ফাংশন। আরও নির্দিষ্টভাবে, একটি যোগদান একটি সম্পর্ক-মূল্যবান ফাংশন। একটি খালি শিকারের সাহায্যে এটি কার্টেসিয়ান পণ্য তৈরি করবে এবং এটি এমনটি করে তা যাচাই করা এটি একটি ডাটাবেস ক্যোয়ারী ইঞ্জিনের জন্য একটি নির্ভুলতা যাচাই করা হয়, তবে কেউ অনুশীলনে যোগদান করেন না কারণ তাদের শ্রেণিকক্ষের বাইরে কোনও ব্যবহারিক মূল্য নেই have

আমি এটিকে ডাকলাম কারণ আমি চাই না যে পাঠকরা মডেলটিকে মডেল করা জিনিসটির সাথে মডেলকে বিভ্রান্ত করার প্রাচীন ফাঁদে পড়বেন। একটি মডেল একটি আনুমানিক হয়, ইচ্ছাকৃতভাবে সুবিধাজনক কারসাজির জন্য সরলীকৃত।


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


কখনও কখনও অস্বীকৃতি একটি ভাল ধারণা

অস্বীকৃতি হ'ল একটি বিশেষ যোগদানের কৌশলটির প্রতিশ্রুতি। পূর্বে উল্লিখিত হিসাবে, এটি অন্যান্য যোগদানের কৌশলগুলিতে হস্তক্ষেপ করে । তবে আপনার যদি ডিস্কের জায়গার বালতি, অ্যাক্সেসের পূর্বাভাসযোগ্য নিদর্শন এবং অনেকগুলি বা এগুলি সমস্ত প্রক্রিয়া করার প্রবণতা থাকে তবে একটি জোড় প্রাক্প্রপুট করা খুব উপযুক্ত হতে পারে।

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

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

এখানে একটি গুরুত্বপূর্ণ বিষয় হ'ল পর্যায়ক্রমিক আপডেটগুলি বাদে কেবলমাত্র ডেটা গুদাম পড়তে পারে । এটি আপডেট ব্যতিক্রমগুলির প্রশ্নকে রেন্ডার করে।

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

এই দিনটিতে ডিস্কের জায়গা সস্তা, তাই নিজেকে ছিটকে যান। তবে ডেনারমালাইজিং ডেটা গুদামগুলির গল্পের কেবল একটি অংশ। অনেক বড় পারফরম্যান্স লাভগুলি প্রাক্পম্পিউটেড রোলড-আপ মান থেকে প্রাপ্ত: মাসিক মোট, এই ধরণের জিনিস। এটি সর্বদা কাজের সেট হ্রাস সম্পর্কে


প্রকারের অমিলের সাথে ADO.NET সমস্যা

ধরুন আপনার কাছে একটি এসকিউএল সার্ভারের টেবিল রয়েছে যা ভেরচার টাইপের একটি সূচকযুক্ত কলামযুক্ত রয়েছে এবং আপনি এই কলামটিতে কোয়েরিকে সীমাবদ্ধ করে একটি পরামিতি পাস করতে অ্যাডউইথওয়ালু ব্যবহার করেন। সি # স্ট্রিংগুলি ইউনিকোড, সুতরাং ইনফারার্ড প্যারামিটারের ধরণটি এনভিচারচার হবে, যা ভ্রচারের সাথে মেলে না।

ভর্চার থেকে এনভিচার্চার হ'ল একটি বিস্তৃত রূপান্তর তাই এটি স্পষ্টভাবে ঘটে - তবে সূচকে বিদায় জানাতে এবং কেন সৌভাগ্য কামনা করছি তা জানাতে।


"ডিস্কের হিটগুলি গণনা করুন" (রিক জেমস)

যদি সমস্ত কিছু র‍্যামে ক্যাশে করা JOINsহয় তবে এটি সস্তা। এটি হ'ল, নরমালাইজেশনে খুব বেশি পারফরম্যান্স পেনাল্টি হয় না ।

যদি "নরমালাইজড" স্কিমাটি JOINsডিস্ককে প্রচুর পরিমাণে আঘাত করে, তবে সমতুল্য "ডেনারমালাইজড" স্কিমাটি ডিস্কটিতে আঘাত করতে হবে না, তবে ডেনারমালাইজেশন একটি পারফরম্যান্স প্রতিযোগিতা জিতবে।

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


7
এই বিবৃতিগুলির সোনমে কোনও নির্দিষ্ট ডিবিএমএসের সাথে সুনির্দিষ্ট, তাই না? যেমন। "সম্পর্কের মধ্যে 200 টিরও কম সারি রয়েছে"
ডেভিড অলড্রিজ

2
সারোগেট কীগুলি ব্যবহার (বা না) কী এই সমস্তগুলিকে উল্লেখযোগ্যভাবে প্রভাবিত করে?
ডেভিড প্লাম্পটন

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

7
এছাড়াও, ভুলে যাবেন না যে অনেক নোএসকিউএল ডাটাবেসগুলি মূলত একই ডেটাবেস যা আমরা 40 বছর আগে বাতিল করে দিয়েছিলাম। তরুণরা সবসময় মনে করে যে তারা কোনও নতুন আবিষ্কার করেছে। ফ্যাবিয়ান পাস্কাল: dbdebunk.com/2014/02/thinking-logically-sql-nosql-and.html
এন পশ্চিম

3
আক্রমনাত্মক। এটি একটি ভাল অ্যাকাউন্ট ছিল, তবে আগ্রাসনের এবং মাইক্রো আগ্রাসনের বিষয়বস্তুতে বা সামগ্রীর মান যুক্ত হয় না।
মিঃমিসিজ

46

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

যে কোনও ক্ষেত্রে, একটি যোগদানের ব্যয় তার ধরণ এবং অন্যান্য কয়েকটি কারণের উপর নির্ভর করে। এটি মোটেও ব্যয়বহুল হওয়ার দরকার নেই - কয়েকটি উদাহরণ।

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

ডেটাবেসগুলি যোগদানের জন্য ডিজাইন করা হয়েছে এবং তারা এটি কীভাবে করে তা খুব নমনীয় এবং সাধারণত যোগদানের প্রক্রিয়াটি ভুল না হলে তারা খুব পারফরম্যান্ট।


আমি মনে করি এটি "সন্দেহ হলে আপনার ডিবিএকে জিজ্ঞাসা করুন" এ নেমে আসে। আধুনিক ডাটাবেসগুলি জটিল প্রাণী এবং এগুলি বোঝার জন্য অধ্যয়ন প্রয়োজন। আমি কেবল ১৯৯ 1996 সাল থেকে ওরাকল ব্যবহার করছি এবং এটি নতুন বৈশিষ্ট্যগুলি বজায় রেখে পুরো সময়ের কাজ। এসকিউএল সার্ভার ২০০৫ সাল থেকে ব্যাপকভাবে এগিয়ে এসেছে! এটি কোনও ব্ল্যাক বক্স নয়!
ছেলে

2
হুঁ, আমার নম্র অভিজ্ঞতায় অনেকগুলি ডিবিএ আছে যারা হ্যাশ যোগদানের কথা কখনও শুনেনি, বা মনে করে যে তারা সর্বজনীন খারাপ জিনিস।
ডেভিড অলড্রিজ

28

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

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

সঠিকভাবে সম্পন্ন হওয়ার পরে, যোগ করা সাধারণত প্রচুর পরিমাণে ডেটা তুলনা, একত্রিত বা ফিল্টার করার সর্বোত্তম উপায়


1
@joel। কনভার্সটিও সত্য। বড় ডেটাসেটে যোগ দেওয়া ব্যয়বহুল হতে পারে এবং কখনও কখনও এটির প্রয়োজন হয় তবে আপনি এটি প্রায়শই করতে চান না যদি না) ক) আপনি আইও এবং র‌্যামের প্রয়োজনীয়তা পরিচালনা করতে পারেন এবং খ) আপনি এটি প্রায়শই করছেন না। বাস্তবায়িত ভিউ, রিপোর্টিং সিস্টেম, রিয়েলটাইম বনাম কোবি প্রতিবেদনগুলি বিবেচনা করুন।
গাই

11

বোতলের প্রায় কাছাকাছি হয় সবসময় ডিস্ক ইনপুট / আউটপুট, এবং এমনকি আরো নির্দিষ্টভাবে - র্যান্ডম ডিস্ক ইনপুট / আউটপুট (তুলনা দ্বারা, অনুক্রমিক সার্চ মোটামুটি দ্রুত এবং পড়তে এগিয়ে কৌশল সঙ্গে ক্যাশে করা যাবে)।

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

একটি একক অস্বীকৃত টেবিলের একই সমস্যা রয়েছে - সারিগুলি বড় এবং একক ডেটা পৃষ্ঠায় এত কম ফিট page আপনার যদি এমন সারিগুলির প্রয়োজন হয় যা অন্য থেকে অনেক দূরে অবস্থিত (এবং বৃহত্তর সারির আকার এগুলি আরও আলাদা করে দেয়) তবে আপনার কাছে আরও এলোমেলো I / O থাকবে। আবার কোনও টেবিল স্ক্যান এড়াতে বাধ্য হতে পারে। তবে, এবার বড় সারি আকারের কারণে আপনার টেবিল স্ক্যানটিতে আরও ডেটা পড়তে হবে। আপনি একক অবস্থান থেকে একাধিক স্থানে ডেটা অনুলিপি করছেন এবং আরডিবিএমএস-এ আরও অনেক কিছুই পড়ার (এবং ক্যাশে) রয়েছে তা এই সত্যটি যুক্ত করুন ।

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

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

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

সর্বোত্তম ক্ষেত্রে, এগুলি ডিস্ক আই / ও - এর কারণ হয় না এবং এটি পারফরম্যান্সের দৃষ্টিকোণ থেকে তুচ্ছ।

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

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


এলোমেলোভাবে সন্ধান হ্রাস: ভাল পয়েন্ট, যদিও একটি বড় ক্যাশে সহ একটি ভাল RAID নিয়ামক লিফট পড়তে / লিখতে পারে।
পিটার উইন

3

আপনি যে সারণিতে সারণিতে যোগদান করছেন তা অত্যন্ত গুরুত্বপূর্ণ। আপনার যদি দুটি সেট ডেটা থাকে তবে কোয়েরিটি এমনভাবে তৈরি করার চেষ্টা করুন যাতে কোয়েরিতে কাজ করা ডেটার পরিমাণ হ্রাস করতে প্রথমে ক্ষুদ্রতমটি ব্যবহৃত হবে।

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


1
সাধারণভাবে একটি শালীন ক্যোয়ারী অপ্টিমাইজারটি যোগ দেওয়া বা সারণীগুলি তালিকাভুক্ত হওয়া ক্রম দ্বারা অকার্যকর হতে চলেছে এবং যোগদানটি সম্পাদন করার সবচেয়ে কার্যকরী উপায়ের নিজস্ব দৃ determination় সংকল্প তৈরি করবে।
ডেভিড আল্ড্রিজে

5
মাইএসকিউএল, ওরাকল, এসকিউএল সার্ভার, সিবাস, পোস্টগ্রিসকিউএল, ইত্যাদি। যোগদানের ক্রম যত্ন নেই। আমি ডিবি 2 এর সাথে কাজ করেছি এবং এটিও আমার জ্ঞানের ভিত্তিতে আপনি তাদের কী আদেশ দিয়েছেন তা
বিবেচ্য নয়

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

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

1
@ ম্যাট আমি ওরাকল 9i দেখতে পেয়েছি খুব আলাদা আলাদা অপ্টিমাইজেশন এবং কোয়েরি পরিকল্পনাগুলি কেবল যোগদানের ক্রমটি সামঞ্জস্য করে। সম্ভবত এটি সংস্করণ 10i থেকে পরিবর্তিত হয়েছে?
ক্যামিলো দাজ রেপকা

0

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

কর্মক্ষমতাটিকে অস্বীকৃতি ও অনুকূলকরণের একটি সহজ উপায় হ'ল আপনার সাধারণ কাঠামোর পরিবর্তনগুলি কীভাবে আপনার অস্বীকৃত কাঠামোর উপর প্রভাব ফেলে। এটি সমস্যাযুক্ত হতে পারে কারণ এটি একটি অস্বীকৃত কাঠামোগত কাজ করার জন্য লেনদেনের যুক্তির প্রয়োজন হতে পারে।

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

একটি সাধারণ নিয়ম হিসাবে, আমি সর্বদা একটি সাধারণ কাঠামো এবং ডেনারামালাইজড ক্যাশেগুলি পুনর্নির্মাণ করা যায় stored অবশেষে, এই ক্যাশেগুলি ভবিষ্যতের স্বাভাবিকীকরণের সমস্যাগুলি সমাধান করতে আমার গাধাটিকে বাঁচায়।


-8

অন্যেরা যা বলেছেন তা বিশদভাবে বর্ণনা করা,

কিছু লিপগ্লাস সহ কেবল কারটিশিয়ান পণ্যগুলিতে যোগদান করেন। 2 1,2,3,4} X {1,2,3 us আমাদের 12 টি সমন্বয় (nXn = n ^ 2) দেবে। এই গণিত সেটটি রেফারেন্স হিসাবে কাজ করে যার উপর শর্তাবলী প্রয়োগ করা হয়। ডিবিএমএস শর্তাবলী প্রয়োগ করে (যেখানে বাম এবং ডান উভয়ই 2 বা 3) সেখানে আমাদের ম্যাচের শর্ত সরবরাহ করতে) আসলে এটি আরও অপটিমাইজড তবে সমস্যাটি একই। সেটের আকারে পরিবর্তনগুলি ফলাফলের আকারকে তাত্ক্ষণিকভাবে বাড়িয়ে তুলবে। সমস্ত মেমরির পরিমাণ এবং সিপিইউ চক্রগুলি ক্ষতিকারক পদগুলিতে প্রভাবিত হয়।

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


3
-১: আপনি কেন ডিবিএমএসকে যোগদান করতে দিলেন তার একটি দুর্দান্ত উদাহরণ - কারণ ডিবিএমএস ডিজাইনাররা এই সমস্যাগুলি সম্পর্কে সারাক্ষণ চিন্তা করে এবং কমপ্লে 101 পদ্ধতির চেয়ে এটি করার আরও কার্যকর উপায় নিয়ে আসে।
ডেভিড অলড্রিজ

2
@ ডেভিড: সম্মত ডিবিএমএস অপ্টিমাইজার প্রোগ্রামাররা
হ'ল

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