কেন এটি প্রয়োজন?
যখন ডিস্ক-ভিত্তিক স্টোরেজ ডিভাইসে ডেটা সংরক্ষণ করা হয়, তখন এটি ডেটাগুলির ব্লক হিসাবে সংরক্ষণ করা হয়। এই ব্লকগুলি সম্পূর্ণরূপে অ্যাক্সেস করা হয়, এগুলি পরমাণু ডিস্ক অ্যাক্সেস অপারেশন করে। ডিস্ক ব্লকগুলি লিঙ্কযুক্ত তালিকার মতো একইভাবে কাঠামোগত হয়; উভয় ডেটা জন্য বিভাগ, পরবর্তী নোড (বা ব্লক) এর অবস্থানের একটি পয়েন্টার, এবং উভয় স্বচ্ছন্দভাবে সংরক্ষণ করা প্রয়োজন।
কেবলমাত্র এক ফিল্ডে বেশ কয়েকটি রেকর্ড বাছাই করা যায় এই কারণে, আমরা বলতে পারি যে যে ক্ষেত্রটি বাছাই করা হয়নি তার অনুসন্ধানের জন্য লিনিয়ার অনুসন্ধানের প্রয়োজন যা N/2
ব্লক অ্যাক্সেসের প্রয়োজন (গড়), যেখানে N
ব্লকের সংখ্যা কোথায় টেবিল বিস্তৃত। যদি সেই ক্ষেত্রটি একটি অ-কী ক্ষেত্র হয় (যেমন স্বতন্ত্র এন্ট্রি ধারণ করে না) তবে পুরো টেবিল স্পেসটি অবশ্যই N
ব্লক অ্যাক্সেসে অনুসন্ধান করা উচিত ।
বাছাই করা ক্ষেত্র সহ, বাইনারি অনুসন্ধান ব্যবহার করা যেতে পারে, এতে log2 N
ব্লক অ্যাক্সেস রয়েছে। এছাড়াও যেহেতু ডেটাটিকে একটি নন-কী ক্ষেত্র হিসাবে বাছাই করা হয়, একবারে উচ্চতর মান সন্ধানের পরে বাকী টেবিলের নকল মানগুলি অনুসন্ধান করার প্রয়োজন হয় না। এইভাবে কর্মক্ষমতা বৃদ্ধি যথেষ্ট।
ইনডেক্সিং কি?
ইনডেক্সিং একাধিক ক্ষেত্রে রেকর্ডের একটি সংখ্যা বাছাই একটি উপায়। একটি সারণীতে একটি ক্ষেত্রের সূচক তৈরি করা অন্য ডেটা কাঠামো তৈরি করে যা ক্ষেত্রের মান ধরে রাখে এবং এর সাথে সম্পর্কিত রেকর্ডের একটি পয়েন্টার। এই সূচক কাঠামোটি বাছাই করা হয়, বাইনারি অনুসন্ধানগুলি এতে সম্পাদন করার অনুমতি দেয়।
সূচকের অসুবিধেটি হ'ল এই সূচকগুলিকে ডিস্কে অতিরিক্ত স্থানের প্রয়োজন হয় যেহেতু সূচিগুলি মাইআইএসএএম ইঞ্জিন ব্যবহার করে একটি টেবিলের সাথে একত্রে সংরক্ষণ করা হয়, একই টেবিলের মধ্যে অনেকগুলি ক্ষেত্র যদি সূচী করা হয় তবে এই ফাইলটি অন্তর্নিহিত ফাইল সিস্টেমের আকারের সীমাতে দ্রুত পৌঁছতে পারে ।
এটা কিভাবে কাজ করে?
প্রথমত, আসুন একটি নমুনা ডাটাবেস টেবিল স্কিমা রূপরেখা করা যাক;
ফিল্ডের নাম ডিস্কে ডেটা টাইপ আকার
আইডি (প্রাথমিক কী) স্বাক্ষরিত INT 4 বাইট
ফার্স্টনেম চর (50) 50 বাইট
সর্বশেষ নাম চর (50) 50 বাইট
ইমেল ঠিকানা ঠিকানা (100) 100 বাইট
দ্রষ্টব্য : ডিস্কের মানটিতে একটি সঠিক আকারের অনুমতি দেওয়ার জন্য চরটি বারচারের জায়গায় ব্যবহার করা হয়েছিল। এই নমুনা ডাটাবেসে পাঁচ মিলিয়ন সারি রয়েছে এবং আন-ইনডেক্স করা হয়েছে। বেশ কয়েকটি প্রশ্নের পারফরম্যান্স এখন বিশ্লেষণ করা হবে। এগুলি আইডি (একটি বাছাই করা কী ক্ষেত্র) এবং ফার্স্টনেম (একটি নন-কী অরক্ষিত ক্ষেত্র) ব্যবহার করে একটি ক্যোয়ারী ।
উদাহরণ 1 - ক্রমবিহীন ক্ষেত্রের ক্ষেত্রগুলি বাছাই করা
আমাদের r = 5,000,000
নির্দিষ্ট আকারের রেকর্ডগুলির নমুনা ডাটাবেস দেওয়া R = 204
বাইটের রেকর্ড দৈর্ঘ্য দেয় এবং সেগুলি মাইএসএএম ইঞ্জিন ব্যবহার করে একটি সারণীতে সংরক্ষণ করা হয় যা ডিফল্ট ব্লক আকারের B = 1,024
বাইট ব্যবহার করে । টেবিলের ব্লকিং ফ্যাক্টরটি bfr = (B/R) = 1024/204 = 5
প্রতি ডিস্ক ব্লক হবে। টেবিলটি ধরে রাখতে মোট ব্লকের সংখ্যা হ'ল N = (r/bfr) = 5000000/5 = 1,000,000
ব্লক।
আইডি ক্ষেত্রের একটি লিনিয়ার সন্ধানের N/2 = 500,000
জন্য আইডি ক্ষেত্রটি একটি মূল ক্ষেত্র হিসাবে প্রদত্ত একটি মান খুঁজে পেতে গড় ব্লক অ্যাক্সেসের প্রয়োজন হবে । তবে যেহেতু আইডি ফিল্ডটিও বাছাই করা হয়েছে, বাইনারি অনুসন্ধান চালানো যেতে পারে যাতে গড় log2 1000000 = 19.93 = 20
ব্লক অ্যাক্সেসের প্রয়োজন হয়। তাত্ক্ষণিকভাবে আমরা দেখতে পাচ্ছি এটি একটি কঠোর উন্নতি।
এখন ফার্স্টনাম ফিল্ডটি বাছাই করা হয়নি এবং কোনও মূল ক্ষেত্র নয়, সুতরাং বাইনারি অনুসন্ধান অসম্ভব, তেমনি মানগুলিও অনন্য নয়, এবং এইভাবে সারণীতে সঠিক N = 1,000,000
ব্লক অ্যাক্সেসের জন্য শেষ সন্ধান করা প্রয়োজন । এই পরিস্থিতিটিই সূচককে সংশোধন করা লক্ষ্য করে।
একটি সূচক রেকর্ডে কেবল সূচকযুক্ত ক্ষেত্র এবং মূল রেকর্ডের একটি পয়েন্টার রয়েছে তা দেওয়া, এটি যুক্তি দেখায় যে এটি মাল্টি-ফিল্ড রেকর্ডের তুলনায় এটি ছোট হবে যা এটি দেখায়। সুতরাং সূচীতে নিজেই মূল টেবিলের চেয়ে কম ডিস্ক ব্লক প্রয়োজন, যার ফলে পুনরাবৃত্তি করতে কম ব্লক অ্যাক্সেস প্রয়োজন। প্রথম নাম ক্ষেত্রের একটি সূচির জন্য স্কিমাটি নীচে বর্ণিত;
ফিল্ডের নাম ডিস্কে ডেটা টাইপ আকার
ফার্স্টনেম চর (50) 50 বাইট
(রেকর্ড পয়েন্টার) বিশেষ 4 বাইট
দ্রষ্টব্য : মাইএসকিউএলে পয়েন্টারগুলি টেবিলের আকারের উপর নির্ভর করে দৈর্ঘ্যে 2, 3, 4 বা 5 বাইট হয়।
উদাহরণ 2 - সূচীকরণ
বাইটের r = 5,000,000
একটি সূচক রেকর্ড দৈর্ঘ্য R = 54
এবং ডিফল্ট ব্লক আকারের B = 1,024
বাইট ব্যবহার করে আমাদের রেকর্ডের নমুনা ডাটাবেস দেওয়া । সূচকটির ব্লকিং ফ্যাক্টর bfr = (B/R) = 1024/54 = 18
প্রতি ডিস্ক ব্লক হবে। সূচকটি ধরে রাখতে মোট ব্লকের সংখ্যা হ'ল N = (r/bfr) = 5000000/18 = 277,778
ব্লক।
এখন ফার্স্টনেম ফিল্ড ব্যবহার করে একটি অনুসন্ধান কর্মক্ষমতা বাড়াতে সূচকটি ব্যবহার করতে পারে। এটি গড় log2 277778 = 18.08 = 19
ব্লক অ্যাক্সেসের সাথে সূচকটির বাইনারি অনুসন্ধানের অনুমতি দেয় । প্রকৃত রেকর্ডের ঠিকানা সন্ধানের জন্য, যার পড়ার জন্য আরও ব্লক অ্যাক্সেসের প্রয়োজন, মোট 19 + 1 = 20
অ্যাক্সেসগুলিতে ব্লক আনার জন্য , অন- সূচকযুক্ত সারণীতে প্রথম নামের ম্যাচ সন্ধানের জন্য 1,000,000 ব্লক অ্যাক্সেস থেকে দূরে চিৎকার ।
এটি কখন ব্যবহার করা উচিত?
প্রদত্ত যে সূচি তৈরির জন্য অতিরিক্ত ডিস্কের স্থান প্রয়োজন (উপরের উদাহরণ থেকে ২ 277,778 blocks ব্লক অতিরিক্ত, একটি ~ ২৮% বৃদ্ধি), এবং অনেকগুলি সূচক ফাইল সিস্টেমের আকার সীমা থেকে উদ্ভূত সমস্যা সৃষ্টি করতে পারে, সঠিক নির্বাচনের জন্য সতর্কতা অবলম্বন করতে হবে সূচিতে ক্ষেত্রগুলি।
যেহেতু সূচকগুলি কেবল রেকর্ডগুলির মধ্যে মিলের ক্ষেত্রের অনুসন্ধানে গতি বাড়ানোর জন্য ব্যবহৃত হয়, তাই এটি যুক্তি দাঁড়ায় যে কেবলমাত্র আউটপুট জন্য ব্যবহৃত সূচী ক্ষেত্রগুলি কেবল সন্নিবেশ করানো বা অপসারণের সময় ডিস্কের স্থান এবং প্রক্রিয়াজাতকরণের সময় অপচয় হবে এবং এইভাবে এড়িয়ে চলা উচিত. বাইনারি অনুসন্ধানের প্রকৃতিও দেওয়া হয়েছে, তথ্যের কার্ডিনালিটি বা স্বতন্ত্রতা গুরুত্বপূর্ণ। 2 এর কার্ডিনালিটিযুক্ত ক্ষেত্রটিতে সূচিটি ডেটা অর্ধেককে ভাগ করে দেবে, যেখানে 1000 এর কার্ডিনালিটি প্রায় 1000 টি রেকর্ড ফিরিয়ে আনবে। যেমন একটি নিম্ন কার্ডিনালিটির সাথে কার্যকারিতাটি একটি রৈখিক সাজানোর ক্ষেত্রে হ্রাস করা হয় এবং ক্যোরিয়াল অপটিমাইজার সূচকটি ব্যবহার এড়াতে পারে যদি কার্ডিনালিটি রেকর্ড সংখ্যার 30% এর চেয়ে কম হয়, কার্যকরভাবে সূচককে স্থানের অপচয় হিসাবে তৈরি করে।