বি-ট্রি বনাম হ্যাশ টেবিল


105

মাইএসকিউএল ইনডেক্সের ধরণটি একটি বি-ট্রি, এবং একটি বি-ট্রি-তে একটি উপাদান অ্যাক্সেস করা লোগারিডমিক অ্যামোরিটাইজড সময়ে O(log(n))

অন্যদিকে, একটি হ্যাশ টেবিলের কোনও উপাদান অ্যাক্সেস করা O(1)

ডাটাবেসের অভ্যন্তরে ডেটা অ্যাক্সেস করার জন্য কেন বি-ট্রি এর পরিবর্তে হ্যাশ টেবিল ব্যবহার করা হয় না?


9
ব্যাপ্তি কোয়েরিগুলি সমর্থন না করার জন্য হ্যাশ টেবিলগুলি, এবং অপারেশন চলাকালীন সহজে বাড়তে বা সঙ্কুচিত করতে পারে না।
hmakholm

4
@ হেনিংমখোলম এমন কলামগুলির জন্য কেন হ্যাশ নেই যেখানে রেঞ্জের প্রশ্নের প্রয়োজন নেই?
পেসারিয়ার

উত্তর:


119

আপনি কেবলমাত্র হ্যাশটেবলে উপাদানগুলির প্রাথমিক কী দ্বারা অ্যাক্সেস করতে পারেন। এটি গাছের অ্যালগোরিদমের ( O(1)পরিবর্তেlog(n) ) তুলনায় দ্রুত , তবে আপনি ব্যাপ্তিগুলি ( এর মধ্যবর্তী xএবং সবকিছুতেy ) নির্বাচন করতে পারবেন না । ট্রি অ্যালগরিদম এটিকে সমর্থন করে Log(n)যেখানে হ্যাশ সূচকগুলি একটি পূর্ণ টেবিল স্ক্যানের ফলে আসতে পারে O(n)। এছাড়াও হ্যাশ সূচকগুলির ধ্রুবক ওভারহেড সাধারণত বড় হয় ( যা থিটা চিহ্নিতকরণের কোনও কারণ নয়, তবে এটি এখনও বিদ্যমান )। এছাড়াও গাছের অ্যালগোরিদমগুলি সাধারণত বজায় রাখা, ডেটা, স্কেল ইত্যাদির সাথে বর্ধন করা সহজ are

হ্যাশ সূচকগুলি পূর্বনির্ধারিত হ্যাশ আকারগুলির সাথে কাজ করে, তাই আপনি কিছু "বালতি" দিয়ে শেষ করেন যেখানে বস্তুগুলি সঞ্চিত থাকে this এই পার্টিশনের অভ্যন্তরে সঠিকটি খুঁজে পেতে এই বিষয়গুলি আবার লুপ করা হয়।

সুতরাং আপনার যদি ছোট আকারের আকার থাকে তবে ছোট উপাদানগুলির জন্য আপনার প্রচুর ওভারহেড থাকে, বড় আকারের আরও স্ক্যানের ফলাফল।

আজকের হ্যাশ টেবিলগুলি অ্যালগোরিদম সাধারণত স্কেল করে তবে স্কেলিং অদক্ষ হতে পারে।

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

তার নামক RUSH - আর eplication ইউ nder এস calable এইচ ashing, এবং যারা আলগোরিদিম এইভাবে RUSH আলগোরিদিম বলা হয়।

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

গাছের অ্যালগোরিদমের জন্য বাণিজ্য ছোট এবং এগুলি প্রায় প্রতিটি ব্যবহারের ক্ষেত্রে উপযুক্ত এবং সুতরাং এটি ডিফল্ট।

তবে আপনার যদি খুব সুনির্দিষ্ট ব্যবহারের কেস থাকে এবং আপনি ঠিক কী এবং কেবল কী প্রয়োজন হবে তা আপনি জানেন তবে আপনি হ্যাশিং সূচকগুলির সুবিধা নিতে পারেন।


আপনি সূচক পুনর্নির্মাণ সম্পর্কে আরও ব্যাখ্যা করতে পারেন? এর অর্থ কি এই যে x দিনের জন্য সূচকটি পুনর্নির্মাণের সময়, টেবিলটি সেই সময়ের জন্য ব্যবহারের জন্য সম্পূর্ণ অনুপলব্ধ?
পেসারিয়ার

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

"আপনি কেবলমাত্র তাদের প্রাথমিক কী দ্বারা উপাদানগুলিতে অ্যাক্সেস করতে পারবেন" - আপনি যে কলামটির সূচকটি সঠিক রেখেছেন তার মান দ্বারা বোঝানো হচ্ছে, এটি প্রাথমিক কী বা অন্য ধরণের সূচক?
মার্ক ফিশার

93

প্রকৃতপক্ষে, মনে হয় যে মাইএসকিউএল উভয় প্রকারের সূচকগুলি নিম্নলিখিত লিঙ্ক অনুসারে একটি হ্যাশ টেবিল বা একটি বি-ট্রি ব্যবহার করে ।

একটি বি-ট্রি এবং হ্যাশ টেবিল ব্যবহারের মধ্যে পার্থক্য হ'ল প্রাক্তন আপনাকে ব্যবহার করতে দেয় কলামের তুলনা যা =,>,> =, <, <=, বা বিটউইউইন অপারেটরগুলি ব্যবহার করে, তবে পরবর্তীটি কেবলমাত্র এর জন্য ব্যবহৃত হয় সমতা তুলনা যা = বা <=> অপারেটর ব্যবহার করে।


12
এটি অনুচিত. সেরা উত্তরের সর্বনিম্ন স্কোর রয়েছে।
Беньковский

7
আমি ঠিক এটিই খুঁজছিলাম। প্রযুক্তিগত বিশ্লেষণের চেয়ে এটি কীভাবে আমার প্রশ্নগুলিকে প্রভাবিত করে সে সম্পর্কে আমি যত্নশীল।
বেন দেহগান

হ্যাঁ! এই উত্তরটি আমাকে সবচেয়ে বেশি সাহায্য করেছে।
রন রস

অনেক অনেক ধন্যবাদ, দীর্ঘ সময় হয়েছে তবে এই উত্তরটি আমাকেও অনেক সাহায্য করে।
রেহাম ফাহমি

14

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


4
ডিবি অনলাইনে থাকাকালীন পুনরায় ভাগ করা যায়? বা কি আমাদের সমস্ত জিনিস পুনঃস্থাপনের জন্য টেবিলটি লক করতে হবে?
পেসারিয়ার

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

4
মাইএসকিউএল হ্যাশ সূচী সমর্থন করে? : dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
পেসারিয়ার

আপনি সঠিক বলে মনে হচ্ছে। এটাই আমার কাছে খবর! আমার অবশ্যই বিকাশের সাথে চালিয়ে যাওয়ার চেষ্টা করতে হবে :-) তারপরে আপনি আমার প্রশ্নের চেয়ে আপনার প্রশ্নের উত্তর দেওয়ার চেয়ে অনেক ভাল, তবে আমি যেমন বলেছিলাম: এটি তাত্ত্বিকভাবে সম্ভব।
এমিল বিক্রষ্টম

বিটিডব্লিউ, আপনি কেন বলছেন যে "একটি বিট্রি সহজেই ডিস্কে পেজ আউট করা যায় তবে হ্যাশ টেবিল পারে না"? কোনও সরল কী অনুসন্ধান যথেষ্ট হওয়ায় কোনও হ্যাশটেবল ডিস্কে সংরক্ষণ করা যায় না?
পেসারিয়ার 16

6

আমি মনে করি হাশম্যাপগুলি সেইসাথে স্কেল করে না, এবং পুরো মানচিত্রটি পুনঃব্যবস্থা করা দরকার হলে ব্যয়বহুল হতে পারে।


0

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

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