মাইএসকিউএলে ইনোডিবি এবং মাইআইএসএএম কী?


121

কি InnoDBএবং MyISAMমধ্যে MySQLকি?



এটা তোলে ডাটাবেসের ইঞ্জিন ... এর kavoir.com/2009/09/...
Matthieu

আমরা কি আমাদের ডাটাবেসের জন্য একই সময়ে উভয় স্টোরেজ ইঞ্জিন ব্যবহার করতে পারি?
ব্যবহারকারী130561

1
আপনি এগুলি একই সাথে বিভিন্ন টেবিলগুলিতে করতে পারেন, তবে একটি প্রদত্ত টেবিলের জন্য আপনি কোনটি ব্যবহার করতে চান তা চয়ন করতে হবে ...
ম্যাথিউউ

উত্তর:


110

InnoDBএবং MYISAM, স্টোরেজ ইঞ্জিনগুলি MySQL

এই দুটি তাদের লকিং প্রয়োগের ক্ষেত্রে পৃথক: InnoDBটেবিলের নির্দিষ্ট সারিটি MyISAMলক করে পুরো MySQLটেবিলটি লক করে ।

আপনি ডিবিতে একটি সারণী তৈরি করার সময় MYISAMOR দেওয়ার মাধ্যমে প্রকারটি নির্দিষ্ট করতে পারেন InnoDB


পরিষ্কার এবং সহজ উত্তর।
বদিরাজ জাহাগীরদার

38

একটু দেখো

InnoDB এবং MyISAM

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

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


1
আমরা কি আমাদের ডাটাবেসের জন্য একই সময়ে উভয় স্টোরেজ ইঞ্জিন ব্যবহার করতে পারি?
ব্যবহারকারী130561

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

18

এগুলি স্টোরেজ ইঞ্জিন eng

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

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

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


সুতরাং আমরা মাইএসকিউএল ইনস্টল করার সময় আমাদের বিশেষত কোন স্টোরেজ ইঞ্জিনটি আমাদের মাইএসকিউএল ডাটাবেস হিসাবে ব্যবহার করতে হবে তা নির্দিষ্ট করে বলা দরকার?
ব্যবহারকারী130561

3
আমার পোস্টে উল্লিখিত হিসাবে, ডিফল্টটি মাইআইএসএএম। আপনি যদি আলাদা স্টোরেজ ইঞ্জিনের বৈশিষ্ট্য যেমন INNODB ব্যবহার করতে চান তবে হ্যাঁ আপনাকে নির্দিষ্ট করা দরকার। এটি ইনস্টল করার সময় করা হয় না, বরং এটি প্রাথমিক টেবিল তৈরির সময় করা হয়।
mluebke

3
তবে এটি অনুসারে: - dev.mysql.com/doc/refman/5.7/en/stores-engines.html ; ডিফল্ট ইঞ্জিনটি ইনোডিবি।
হর্ষ

2
Dev.mysql.com/doc/refman/5.5/en/stores-engine-setting.html এর মতে : "ডিফল্ট ইঞ্জিনটি মাইএসকিউএল 5.5.5 (মাইস্যাম 5.5.5 এর আগে) হিসাবে ইনোডিবি" "সুতরাং ডিফল্ট ইঞ্জিনটি এখন InnoDB। এই উত্তরটি ডিফল্ট ইঞ্জিন হিসাবে InnoDB এর সাথে প্রথম সাধারণ-প্রাপ্যতা প্রকাশের 16 দিন পরে পোস্ট করা হয়েছিল;)
এসওএফই

6

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

এটি বলেছিল, ইনোডিবি সবসময় উন্নত হচ্ছে:

InnoDB 1.1 পারফরম্যান্স এবং স্কেলিবিলিটি এনহান্সমেন্টস


4

মাইআইএসএএম এএনআইডিবির বিপরীতে এসিডি অনুসরণ করে না যা ডেটার অখণ্ডতা বজায় রাখতে লেনদেন অনুসরণ করে।

মাইআইএসএএম সাম্প্রতিক প্রবেশকারীদের সমর্থন করে: যদি কোনও টেবিলের ডেটা ফাইলের মাঝখানে কোনও বিনামূল্যে ব্লক না থাকে, আপনি অন্য থ্রেডটি টেবিলটি থেকে পড়ছেন একই সময়ে আপনি এটিতে নতুন সারি লিখতে পারেন। MySqlDoc

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

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


3

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

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

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

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;

মনে করুন, প্রক্রিয়াটি 4 ধাপে ক্র্যাশ হয়ে গেছে যদি এখানে একটি InnoDB টেবিল ব্যবহার করা হয়, তবে একটি রোলব্যাক পরিবর্তনগুলি পূর্বাবস্থায় ফেলা হবে এবং আপনি অর্থ হারাতে যাওয়ার ঝুঁকি থেকে রক্ষা পেয়েছেন। আক্ষরিক অর্থে, টেবিলটি কোনও ক্র্যাশ সম্পর্কে অবগত নয় কারণ 5 ধাপ সাফল্যের সাথে সম্পাদন করা না হলে টেবিলে পরিবর্তনগুলি করা হবে না।

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

সৌজন্যতার উদাহরণ: "হাই পারফরম্যান্স মাইএসকিউএল: অপ্টিমাইজেশন, ব্যাকআপস, এবং রেপ্লিকেশন" - আরজেন লেন্টজ, ডেরেক জে বলিং, জেরেমি জাওডনি, পিটার জায়েটসেভ এবং ভাদিম টাকাচেনকো রচিত বই


1

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


0

InnoDB হ'ল ডিফল্ট নয় myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB হ'ল ডিফল্ট মাইএসকিউএল স্টোরেজ ইঞ্জিন you একটি ইঞ্জিন ছাড়া টেবিল বিবরণ তৈরি করুন = ধারা একটি InnoDB টেবিল তৈরি করে "

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