Ви можете отримати доступ до елементів лише за їх первинним ключем у хеш-таблиці. Це швидше, ніж з алгоритмом дерева ( O(1)
замістьlog(n)
), але ви не можете вибрати діапазони ( все між x
іy
). Дерево алгоритми підтримують це, Log(n)
тоді як хеш-індекси можуть призвести до повного сканування таблиці O(n)
. Крім того, постійні накладні витрати на хеш-індекси зазвичай більші ( що не є фактором у позначенні тета, але воно все ще існує ). Крім того, алгоритми дерев, як правило, простіші в обслуговуванні, зростають разом із даними, масштабом тощо.
Індекси хеш-функцій працюють із заздалегідь визначеними розмірами хешу, тому у вас з’являються деякі «відра», де зберігаються об’єкти. Ці об’єкти знову циклічно переглядаються, щоб дійсно знайти потрібний усередині цього розділу.
Отже, якщо у вас невеликі розміри, у вас є багато накладних витрат на дрібні елементи, великі розміри призводять до подальшого сканування.
Сьогоднішні алгоритми хеш-таблиць зазвичай масштабуються, але масштабування може бути неефективним.
Дійсно існують масштабовані алгоритми хешування. Не питайте мене, як це працює - для мене це теж загадка. AFAIK вони розвинулися із масштабованої реплікації, де повторне хешування непросте.
Його називають РАШ - R eplication U NDER S calable Н озоления, і ці алгоритми, таким чином , називають алгоритми Раша.
Однак може існувати момент, коли ваш індекс перевищує допустимий розмір порівняно з вашими розмірами хешу, і весь ваш індекс потрібно переробити. Зазвичай це не проблема, але для величезних-величезних-величезних баз даних це може зайняти дні.
Компроміс для алгоритмів дерева невеликий, і вони підходять майже для кожного випадку використання, тому є типовими.
Однак, якщо у вас дуже точний варіант використання, і ви точно знаєте, що і тільки те, що буде потрібно, ви можете скористатися перевагами індексів хешування.