digital-garden/_inbox/Consistent hashing.md

33 lines
1.9 KiB
Markdown
Raw Normal View History

2024-06-30 11:32:53 +03:00
---
aliases:
tags:
- зрелость/🌱
date:
- - 2024-06-30
zero-link:
- "[[00 Алгоритмы]]"
parents:
- "[[Шардирование в БД]]"
linked:
---
2024-07-14 19:54:48 +03:00
Представим, что весь диапазон нашей хэш функции можно отобразить на окружности (0 до 32 или от -32 до 32). Хэшфункция указывает место на круге. Хэш-функция используется для определения места узлов на круге. Этаже хэш функция используется для определения значения ключей на круге. Выбирается ближайший по часовой стрелке узел.
2024-06-30 11:37:52 +03:00
2024-07-15 14:00:03 +03:00
![](Pasted%20image%2020240715135645.png)
2024-07-14 19:54:48 +03:00
**Плюсы:**
- При добавлении/удалении шардов затрагивается только часть данных.
2024-06-30 11:37:52 +03:00
2024-07-14 19:54:48 +03:00
**Минусы:**
- Данные могут быть распределены не равномерно, если между шардами будет различное расстояние на круге.
2024-06-30 11:37:52 +03:00
2024-07-14 19:49:48 +03:00
## Virtual Nodes (Bucket)
2024-07-14 19:54:48 +03:00
Можно попытаться решить проблему неравноморного распределения. Для этого мы добавим виртуальные шарды: для одной ноды определяется несколько точек на круге.
2024-06-30 21:04:14 +03:00
2024-07-15 14:00:03 +03:00
Такой подход используется в [Cassandra](Cassandra.md).
Плюсы:
- Более равномерное распределение.
2024-07-15 14:05:03 +03:00
- Можно использовать сервера разной конфигурации, размещая виртуальные бакеты так, чтобы обеспечить оптимальную нагрузку сервера.
2024-07-14 20:59:31 +03:00
## Дополнительные материалы
- Есть какая-то библиотека Guava/Sumbur