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


245

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


23
আপনি যদি একটি ডাটাবেস ইঞ্জিন চান, InnoDB ব্যবহার করুন। আপনি দুটি তুলনা করতে পারবেন না
জেরেমি স্টেইন

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

উত্তর:


159

আমি দেখতে পাচ্ছি প্রথম বড় পার্থক্য হ'ল InnoDB সারি-স্তরের লক প্রয়োগ করে যখন মাইআইএসএএম কেবল একটি টেবিল-স্তরের লক করতে পারে। আপনি InnoDB এ আরও ভাল ক্রাশ পুনরুদ্ধার পাবেন। তবে FULLTEXTমাইআইএসএএম-এর মতো এর v5.6 অবধি অনুসন্ধানের সূচী নেই es InnoDB লেনদেন, বিদেশী কী এবং সম্পর্কের সীমাবদ্ধতাগুলিও প্রয়োগ করে যখন মাইআইএসএএম এটি করে না।

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

সুতরাং সংক্ষেপে ( টিএল; ডিআর ):

  • ইনোডিবিতে সারি-স্তরের লকিং রয়েছে, মাইআইএসএএম কেবলমাত্র পুরো টেবিল-স্তর লকিং করতে পারে।
  • InnoDB এর ক্র্যাশ পুনরুদ্ধারের আরও ভাল।
  • মাইআইএসএএম এর FULLTEXTঅনুসন্ধান সূচী রয়েছে, মাইএসকিউএল 5.6 (ফেব্রুয়ারী 2013) পর্যন্ত ইনোডিবি করেনি ।
  • InnoDB লেনদেন, বিদেশী কী এবং সম্পর্কের সীমাবদ্ধতা প্রয়োগ করে, মাইআইএসএএম তা করে না।

প্রিয় স্যার, শেষ পর্যন্ত কেউ কী ব্যবহার করবে? মাইআইএসএএম না ইনোডিবি? আমি সম্পূর্ণ বিভ্রান্ত ... আমার ওয়েবসাইটটি মাইএসকিএল ব্যবহার করছে এবং আমার এটি সিদ্ধান্ত নেওয়া দরকার।
sqlchild

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

2
আমি স্পষ্টতার জন্য তার পোস্ট সম্পাদনা করেছি।
ম্যাথিয়াস লাইককেগার্ড লরেঞ্জেন

1
@ ম্যাথিয়াস লাইক্কেগার্ড লরেনজেন ধন্যবাদ, আমরা
স্ট্যাকেক্সচেঞ্জ

version 5.6.4InnoDB হিসাবে FULLTEXTঅনুসন্ধান সমর্থন করে । dev.mysql.com/doc/refman/5.6/en/fultext-restrictions.html
দিবাস্বপ্ন

85

এখনও উল্লেখ করা হয়নি এমন আরও একটি বড় পার্থক্য হ'ল প্রতিটি স্টোরেজ ইঞ্জিনের জন্য কীভাবে ক্যাশিং করা হয়।

MYISAM

ব্যবহৃত মূল প্রক্রিয়াটি হ'ল কী ক্যাশে। এটি কেবলমাত্র .MYI ফাইল থেকে সূচী পৃষ্ঠাগুলি ক্যাশে করে। আপনার কী ক্যাশে আকার দিতে, নিম্নলিখিত কোয়েরিটি চালান:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

এটি আপনার বর্তমান ডেটা সেট ( মাইআইএসএএম কী কী ) ( key_buffer_size ) এর জন্য প্রস্তাবিত সেটিংটি দেবে ( ক্যোয়ারী 4G (4096M) এ সুপারিশটি ক্যাপ করবে 32 32-বিট ওএসের জন্য, 4 জিবি সীমাটি 64৪ -বিট, 8 গিগাবাইটের জন্য।

InnoDB

ব্যবহৃত প্রধান প্রক্রিয়াটি হলেন ইনোডিবি বাফার পুল। এটি InnoDB টেবিল থেকে অ্যাক্সেস করা ডেটা এবং সূচী পৃষ্ঠাগুলি ক্যাশে করে। আপনার InnoDB বাফার পুল আকার করতে, নিম্নলিখিত কোয়েরি চালান:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

এটি আপনার বর্তমান ডেটা সেটকে দেওয়া ইনোডিবি বাফার পুল ( ইনোডাব_বফার_পুল_সাইজ ) আকারের জন্য প্রস্তাবিত সেটিংটি দেবে

InnoDB লগ ফাইলের আকার পরিবর্তন করতে ভুলবেন না (ib_logfile0 এবং ib_logfile1)। মাইএসকিউএল উত্স কোড সমস্ত InnoDB লগ ফাইলের সম্মিলিত আকারের ক্যাপ রাখে <4G (4096M)। সরলতার জন্য, মাত্র দুটি লগ ফাইল দেওয়া হল, আপনি এখানে কীভাবে আকার দিতে পারেন:

  • পদক্ষেপ 1) /etc/my.cnf এ ইনেডোড_ব্লগ_ফাইল_সাইজ = এনএনএন যুক্ত করুন (এনএনএন ইনোডাব_ফার_পুল_সাইজ বা 2047 এম এর 25% হওয়া উচিত, যেটি ছোট হোক)
  • ধাপ ২) service mysql stop
  • ধাপ 3) rm /var/log/mysql/ib_logfile[01]
  • পদক্ষেপ 4) service mysql start(ib_logfile0 এবং ib_logfile1 পুনরায় তৈরি করা হয়েছে)

বিচারকার্য স্থগিত রাখার আদেশ

উভয় প্রশ্নের শেষে একটি ইনলাইন ক্যোয়ারী (SELECT 2 PowerOf1024)বি

  • (SELECT 0 PowerOf1024) বাইটস সেটিং দেয়
  • (SELECT 1 PowerOf1024) কিলোবাইটে সেটিং দেয়
  • (SELECT 2 PowerOf1024) মেগাবাইটে সেটিং দেয়
  • (SELECT 3 PowerOf1024) গিগাবাাইটে সেটিং দেয়
  • 0 বা 3 এর চেয়ে বেশি সংখ্যক গ্রহণযোগ্যতা নেই

উপসংহার

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

  • আপনার কাছে 2 জিবি র‌্যাম এবং 16 জিবি ইনোডিবি থাকলে, 512 এম ইনোডাব_বফার_পুল হিসাবে বরাদ্দ করুন।
  • আপনার যদি 2 জিবি র‌্যাম এবং মাইআইএসএএম সূচকগুলির 4 গিগাবাইট থাকে, 512 এম কী_বফার_সাইজ হিসাবে বরাদ্দ করুন।
  • আপনার যদি 2 জিবি র‌্যাম এবং মাইআইএসএএম সূচকগুলির 4 জিবি এবং 16 গিগাবাইট ইনোডিবি থাকে তবে কী_বফার_সাইজ হিসাবে 512 এম এবং ইনোডাব_বফার_পুল_সাইজ হিসাবে 512 এম বরাদ্দ করুন।

সম্ভাব্য পরিস্থিতিতে অন্তহীন !!!

মনে রাখবেন, আপনি যা বরাদ্দ করেন না কেন, ডিবি সংযোগ এবং অপারেটিং সিস্টেমের জন্য পর্যাপ্ত পরিমাণ র‌্যাম রেখে যান।


সেগুলি খারাপ ফর্মুলা!
রিক জেমস

(ওফ - ভুলে যাবেন অনুচ্ছেদে থাকতে পারে না) ... আমি একটি "উত্তর" যুক্ত করব।
রিক জেমস

ক্যাশে আকারের জন্য রোল্যান্ডোর সূত্রগুলি ব্যবহারিক নয়। - 2 পাওয়ার প্রয়োজন হয় না। - 32-বিট ওএসে 4 জিবি অসম্ভব - ইত্যাদি them সেগুলিতে কী সেট করতে হবে সে সম্পর্কে আমার রুনডাউনটি এখানে রয়েছে : mysql.rjweb.org/doc.php/memory (এটি মেমরির ব্যবহারকে প্রভাবিত করে এমন অন্যান্য বিভিন্ন সেটিংসকে সম্বোধন করে।)
রিক জেমস

2
@ রিক: 2 এর শক্তিগুলি বিভিন্ন ইউনিটে উত্তরগুলি প্রদর্শন করার জন্য বোঝানো হয়েছিল। করছেন (নির্বাচন 2 পাওয়ারআফটিও) এমবিতে উত্তরের প্রদর্শন সেট করে। করছেন (সিলেক্ট 3 পাওয়ারআফটিও) জিবিতে প্রদর্শন সেট করে। (নির্বাচন করুন 1 পাওয়ারঅফটো) কেবিতে প্রদর্শন করে। (নির্বাচন করুন 0 পাওয়ারঅফটিও) বাইটগুলিতে প্রদর্শন করে। (নির্বাচন 2 পাওয়ারআফটিও) এটিই করে। সুতরাং এটি কেবলমাত্র প্রদর্শন করা প্রয়োজন, আর্কিটেকচারে কোনও ধার্য মানগুলি চাপিয়ে দেওয়া হয় না।
রোল্যান্ডোমাইএসকিউএলডিবিএ

2
@ রিক: আপনি কি জানেন? দুটি খুব বড় কারণে আমি আপনাকে আসলে একটি +1 দেব। 1) আপনার ইউআরএল নিশ্চিত করে যে আমার উত্তরটি সঠিক ছিল যে 4 জিবি হ'ল কী_বুফার_সাইজকে দেওয়া সবচেয়ে বড় সংখ্যা। 2) আপনার উত্তরটি, আপনার ইউআরএল সহ, মেশিনগুলির জন্য খুব কম স্মৃতিশক্তি তৈরি করে। যেখানে creditণ দেওয়ার দরকার সেখানে আমি creditণ দেব।
রোল্যান্ডোমাইএসকিউএলডিবিএ

60

ইনোডিবি অফারগুলি:

  • এসিডি লেনদেন
  • সারি স্তরের লকিং
  • বিদেশী কী বাধা
  • স্বয়ংক্রিয় ক্রাশ পুনরুদ্ধার
  • টেবিল সংক্ষেপণ (পড়ুন / লিখুন)
  • স্থানিক তথ্য প্রকার (কোনও স্থানিক সূচী নেই)

InnoDB এ টেক্সট এবং বিএলওবি ব্যতীত পর পরের সমস্ত ডেটা সর্বাধিক 8,000 বাইট দখল করতে পারে। মাইএসকিউএল 5.6 (ফেব্রুয়ারী 2013) পর্যন্ত InnoDB এ সম্পূর্ণ পাঠ্য ইনডেক্সিং উপলব্ধ নেই। InnoDB- এ COUNT(*)এস (যখন WHERE, GROUP BYবা JOINব্যবহার করা হয় না) মাইআইএসএএম এর চেয়ে ধীর সঞ্চালিত হয় কারণ সারি গণনা অভ্যন্তরীণভাবে সংরক্ষণ করা হয় না। InnoDB একটি ফাইলে ডেটা এবং সূচি উভয়ই সঞ্চয় করে। InnoDB ডেটা এবং সূচক উভয়কে ক্যাশে করতে একটি বাফার পুল ব্যবহার করে।

মাইআইএসএএম অফার দেয়:

  • দ্রুত COUNT(*)এস (কখন WHERE, GROUP BYবা JOINব্যবহৃত হয় না)
  • পূর্ণ পাঠ্য সূচী (আপডেট: মাইএসকিউএল 5.6 থেকে ইনোডিবিতে সমর্থিত)
  • ছোট ডিস্ক পদাঙ্ক
  • খুব উচ্চ টেবিল সংক্ষেপণ (কেবল পঠনযোগ্য)
  • স্থানিক তথ্য প্রকার এবং সূচি (আর-ট্রি) (আপডেট: মাইএসকিউএল 5.7 থেকে ইনোডিবিতে সমর্থিত)

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

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


5
আমি আপনার উত্তরটি পড়েছি এবং এটি ইতিমধ্যে অন্যদের সাথে এটি তুলনা করছি। ইতিমধ্যে বিএলওবি'র উল্লেখ করা আপনার। এগুলি সাধারণত গৃহীত হয়। ইতিমধ্যে মাইসম্প্যাকের উল্লেখ করা আপনার একমাত্র ব্যক্তি, দ্রুত-পঠনযোগ্য মাইআইএসএএম টেবিলগুলির মধ্যে থাকা অসমাপ্ত নায়কদের মধ্যে অন্যতম। তোমার আজ একটি +1 !!!
রোল্যান্ডোমাইএসকিউএলডিবিএ

2
উদাহরণটি হ'ল সংকুচিতভাবে পঠনযোগ্য টেবিল হবে যেখানে আপনি টেবিলটি সম্পূর্ণরূপে প্রতিস্থাপনের মাধ্যমে অবিচ্ছিন্ন আপডেটগুলি পেয়ে থাকেন।
ডাবিস্ট

30

আরও একটি জিনিস: আপনি কেবল ফাইল সিস্টেমের স্ন্যাপশট নিয়ে InnoDB টেবিলগুলি ব্যাকআপ করতে পারেন। মাইআইএসএএম ব্যাক আপ করার জন্য মাইএসকিএলডাম ব্যবহার করা দরকার এবং এটি সামঞ্জস্যপূর্ণ হওয়ার নিশ্চয়তা নেই (উদাহরণস্বরূপ আপনি যদি কোনও পিতা-মাতা এবং চাইল্ড টেবিলের মধ্যে সন্নিবেশ করান তবে আপনার ব্যাকআপে কেবলমাত্র শিশু টেবিলের সারিটি খুঁজে পেতে পারেন)।

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

(আমার ব্যক্তিগত অভিজ্ঞতা: মাইআইএসএমে একটি 2 টেরাবাইট ডিবি)।


29

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


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

উল্লেখ সততা

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

উপসংহার

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


1
ধন্যবাদ, সত্যই তথ্যপূর্ণ এবং পরিষ্কার সংক্ষিপ্তসার।
informatik01

18

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

অন্যান্য গুরুত্বপূর্ণ পার্থক্যগুলির মধ্যে রয়েছে:

  1. InnoDB সমর্থন লেনদেন এবং বিদেশী কীগুলি। মাইআইএসএএম করে না।
  2. মাইআইএসএএম সম্পূর্ণ পাঠ্য সূচী ব্যবহার করে।
  3. মাইআইএসএএম ডেটা অখণ্ডতা প্রয়োগের একটি খারাপ কাজ করে।

সেকেলে - InnoDB এর এখন রয়েছে FULLTEXTএবং SPATIAL। InnoDB পড়ার- এবং লেখার-ভারী বোঝা উভয়ের জন্যই ভাল ।
রিক জেমস

8

আমি মাইআইএসএএমএলকে মাইএসকিউএল-এর জন্য 'ডিফল্ট' টেবিল পছন্দ হিসাবে দেখার প্রবণতা রাখি, তাই আমি ইনোডিবি-র বেশিরভাগ ব্যবহারকারীর জন্য পার্থক্য চিহ্নিত করব I'll

  • সারি স্তর-লকিং
  • বিদেশী কী প্রয়োগকারী
  • লেনদেন সমর্থন
  • উচ্চ-ব্যবহারের সিস্টেমে পারফরম্যান্স হিট

5
সর্বশেষতম মাইএসকিউএল প্রকাশ ছাড়া আর মাইএসএএমএল ডিফল্ট ইঞ্জিন হিসাবে ব্যবহার করে না। 5.5 এ তারা ডিফল্টটিকে ইনোডিবি :) তে পরিবর্তন করেছে। এবং আমি সাধারণীকরণের সাথে একমত নই যে সাধারণভাবে ইনোডিবি কেবল একটি 'পারফরম্যান্স হিট' পায়। সঠিক ইনডেক্সিং এবং সঠিকভাবে কনফিগার করা মেমরি সেটিংস সহ InnoDB টেবিলগুলি ইনোডিবি
টেবিলটি

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

2
মাইএসকিউএল 5.6 বিকাশ চক্রের মধ্য দিয়ে InnoDB- এর জন্য সম্পূর্ণ অনুসন্ধান সন্ধান করা হয়েছে। উদ্ধৃত ইউআরএল এখন ইনোডিবিতেও অন্তর্ভুক্ত।
সর্বাধিক ওয়েবস্টার

5

MYISAM

MYISAM টেবিল স্তর লকিং, সম্পূর্ণ অনুসন্ধান অনুসন্ধান সরবরাহ করে। মাইআইএসএএম এর সমস্ত স্টোরেজ ইঞ্জিন বন্ধ করে দেওয়ার জন্য সবচেয়ে নমনীয় স্বাচ্ছন্দ্যযুক্ত কলাম রয়েছে। মাইআইএসএএম লেনদেন সমর্থন করে না।

InnoDB

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


5

মাইএসকিউএল 5.6 পরিবর্তন অন্তর্ভুক্ত

ইনোডব স্টোরেজ ইঞ্জিন:

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

সুতরাং, MyISAMযদি আপনি ইতিমধ্যে 5.6 এ আপগ্রেড হয়ে থাকেন তবে ইঞ্জিন ব্যবহার করার কোনও মানে নেই , যদি না হয় তবে মাইএসকিউএল 5.6-এ উন্নীত হওয়ার জন্য অপেক্ষা করবেন না।

মাইএসকিউএল 5.6 ব্যবহার করে ইনোডিবি ভিএস মাইআইএসএএম সম্পাদনা


2

MyISAM

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

InnoDB

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

কাটাচামচ

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

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