ইনোডিবি এবং মাইআইএসএএম এর মধ্যে পার্থক্য কী?


17

আমি আমার বর্তমান ওয়েব প্রকল্পের জন্য আমার ডাটাবেস হিসাবে মাইএসকিউএল ব্যবহার করছি। আমি মাইএসকিউএলে নতুন new InnoDB এবং MyISAM এর মধ্যে পার্থক্যটি আমাকে ব্যাখ্যা করুন।


পাশাপাশি :) একটি মাইএসকিউএল tagg যোগ করার জন্য বিনা দ্বিধায়
জোহান

এটি কি স্ট্যাকওভারফ্লোতে অন্তর্ভুক্ত নয়?
রিপার 234

@ ripper234। এই পোস্টের দুটি আরও ভাল সংস্করণ (আরও বেশি পটভূমি; পূর্বের গবেষণার আরও বিক্ষোভ) এসও-তে রয়েছে: stackoverflow.com/q/12614541/209139 এবং স্ট্যাকওভারফ্লো . com / q / 20148 / 209139
টিআরজি

উত্তর:


14

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

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

আপনার প্রচুর রেকর্ড থাকলে (যেমন, 20 মিলিয়ন) ইসম দুর্দান্ত। এটি সূচকগুলিতে খুব বেশি ভারী নির্ভর করে এবং আপনার যদি সঠিক সূচক না থাকে তবে খুব দীর্ঘ প্রশ্নের জন্য প্রস্তুত থাকুন। কেস ইন পয়েন্ট: আমাদের কাছে 20 এম + রেকর্ড সহ একটি বিটিরিভ ইসাম টেবিল ছিল এবং একটি সঠিক সূচকের ভিত্তিতে একটি পুনরুদ্ধার এবং ফিল্টার ডেটা করা প্রায় তাত্ক্ষণিক ছিল। ভুল সূচকটি ব্যবহার করার জন্য আক্ষরিক 15 মিনিট ছিল।

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

আপনি যদি এর চেয়ে আরও বিশদ চান তবে আপনাকে অবশ্যই ডাটাবেসে একটি কোর্স করতে হবে!


ইসম অন্য যে কোনও কিছুর মতোই সম্পর্কিত, এটি কেবল এটির জন্য অনুকূলিত নয়।
ল্যাপটপ 6006

ধন্যবাদ 4 আপনার সংক্ষিপ্ত বিবরণ এখন মূলত আমি সাফ হয়ে

5

সর্বাধিক মৌলিকটি হ'ল ইনোডিবি লেনদেন। মাই আইসাম না। মাই আইসাম সাধারণত কিছুটা দ্রুত হয় তাই আপনার যদি লেনদেনের প্রয়োজন না হয় যা সাধারণত আপনার সেরা বাজি। বিস্তারিত বর্ণনার জন্য আপনার মাইএসকিউএল ডকুমেন্টেশনটি পড়া উচিত।


2

আজকাল লগ স্টাইলের ডেটাগুলির জন্য আপনি কোনও টেবিল ব্যবহার না করে (আরও অনেক INSERT এর সেলেকের নির্বাচন করুন, কোনও লেনদেন নেই) InnoDB সাধারণত দ্রুত, আরও নির্ভরযোগ্য, আরও বৈশিষ্ট্য ইত্যাদি থাকে etc.

মাইআইএসএএমের কেবলমাত্র অন্য বৈশিষ্ট্যটি হ'ল সম্পূর্ণ পাঠ্য অনুসন্ধান যা মূল ব্যবহারের জন্য জরিমানা, তবে বেশিরভাগ লোক গুরুতর যে কোনও কিছুর জন্য লুসিনের কিছু ব্যবহার করেন।

যে কোনও উপায়ে আপনাকে মাইএসকিউএল টিউন করতে হবে ডিফল্ট হিসাবে অন্য 32 পরিষেবাগুলির সাথে ভাগ করা 32MB পেন্টিয়ামের জন্য মূলত সেট করা থাকে।


2

গেমটি থেকে কিছুটা দেরি ... তবে কয়েক মাস আগে আমি মাইআইএসএএম এবং ইনোডিবি-র মধ্যে প্রধান পার্থক্য বিশদটি নিয়ে একটি বিস্তৃত পোস্ট এখানে লিখেছি । একটি চুপা (এবং সম্ভবত একটি বিস্কুট) ধরুন, এবং উপভোগ করুন।


মাইআইএসএএম এবং ইনোডিবি-র মধ্যে প্রধান পার্থক্য হ'ল রেফারেন্সিয়াল অখণ্ডতা এবং লেনদেন। লকিং, রোলব্যাকস এবং পূর্ণ-পাঠ্য অনুসন্ধানের মতো অন্যান্য পার্থক্য রয়েছে।

উল্লেখ সততা

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

ইনোডিবি হ'ল রিলেশনাল ডিবিএমএস (আরডিবিএমএস) এবং এর ফলে রেফারেন্সিয়াল অখণ্ডতা রয়েছে, যদিও মাইআইএসএএম তা করে না।

লেনদেন এবং পারমাণবিকতা

একটি সারণীতে থাকা ডেটা ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (ডিএমএল) বিবৃতি যেমন SELECT, INSERT, UPDATE এবং DELETE ব্যবহার করে পরিচালনা করা হয়। কোনও লেনদেন গোষ্ঠী দুই বা ততোধিক ডিএমএল একসাথে কাজের একক ইউনিটে বিবৃতি দেয়, তাই হয় পুরো ইউনিটটি প্রয়োগ করা হয়, বা এর কোনওটিই হয় না।

মাইআইএসএএম লেনদেন সমর্থন করে না যেখানে ইনোডিবি করে।

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

ইনোডিবি টেবিল ব্যবহার করার সময় যদি কোনও অপারেশন বাধাগ্রস্ত হয়, কারণ এটি লেনদেন ব্যবহার করে, যার মধ্যে পারমাণবিকতা রয়েছে, কোনও লেনদেন যা সম্পন্ন হয় নি কার্যকর হবে না, যেহেতু কোন প্রতিশ্রুতিবদ্ধতা করা হয়নি।

সারণী-লকিং বনাম সারি-লকিং

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

যখন কোনও কোয়েরি কোনও ইনোডিবি টেবিলের বিরুদ্ধে চলে, তখন জড়িত কেবলমাত্র সারিগুলি লক হয়ে যায়, বাকী টেবিলটি CRUD ক্রিয়াকলাপের জন্য উপলব্ধ থাকে। এর অর্থ হল কোয়েরিগুলি একই টেবিলে একই সাথে চলতে পারে তবে তারা একই সারিটি ব্যবহার না করে।

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

লেনদেন এবং রোলব্যাকস

আপনি যখন মাইআইএসএএম-তে কোনও অপারেশন চালান, পরিবর্তনগুলি সেট করা হয়; InnoDB এ, সেই পরিবর্তনগুলি আবার ঘুরিয়ে দেওয়া যেতে পারে। লেনদেন নিয়ন্ত্রণ করতে সর্বাধিক সাধারণ কমান্ডগুলি হ'ল কমিট, রোলব্যাক এবং সেভপয়েন্ট। ১. কমিট - আপনি একাধিক ডিএমএল অপারেশন লিখতে পারবেন, তবে পরিবর্তনগুলি কেবল তখনই সাশ্রয় হবে যখন কোন কমিট তৈরি হবে ২. রোলব্যাক - আপনি যে কোনও অপারেশন এখনও প্রতিশ্রুতিবদ্ধ হয়নি তা বাতিল করতে পারেন 3.. সংরক্ষণ করুন - তালিকার একটি পয়েন্ট সেট করে একটি রোলব্যাক অপারেশন যেখানে রোলব্যাক করতে পারে operations

বিশ্বাসযোগ্যতা

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

অন্যদিকে, ইনোডিবি দুর্নীতি রোধে একটি লেনদেনের লগ, একটি ডাবল লিখনের বাফার এবং স্বয়ংক্রিয় চেকসামিং এবং বৈধতা ব্যবহার করে। ইনোডিবি কোনও পরিবর্তন করার আগে, এটি আইবডাতা 1 নামে একটি সিস্টেম টেবিলস্পেস ফাইলটিতে লেনদেনের আগে ডেটা রেকর্ড করে। যদি কোনও ক্র্যাশ হয় তবে InnoDB those লগগুলির পুনরায় খেলতে হবে ore

ফুলটেক্স ইনডেক্সিং

InnoDB মাইএসকিউএল সংস্করণ 5.6.4 অবধি ফুলটেক্সট ইনডেক্সিং সমর্থন করে না। এই পোস্টটি লেখা হিসাবে, অনেক শেয়ার্ড হোস্টিং সরবরাহকারীদের মাইএসকিউএল সংস্করণটি এখনও 5.6.4 এর নীচে, যার অর্থ ফুলটেক্সট ইনডেক্সিং ইনোডিবি সারণীর জন্য সমর্থিত নয়।

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

উপসংহার

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


1

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


3
এখন আর সত্য নয়, বেশিরভাগ ক্ষেত্রে InnoDB আসলে দ্রুত।
ল্যাপটপ 6006

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