33 lines
1.9 KiB
Markdown
33 lines
1.9 KiB
Markdown
---
|
|
aliases:
|
|
tags:
|
|
- зрелость/🌱
|
|
date:
|
|
- - 2024-06-30
|
|
zero-link:
|
|
- "[[00 Алгоритмы]]"
|
|
parents:
|
|
- "[[Шардирование в БД]]"
|
|
linked:
|
|
---
|
|
Представим, что весь диапазон нашей хэш функции можно отобразить на окружности (0 до 32 или от -32 до 32). Хэшфункция указывает место на круге. Хэш-функция используется для определения места узлов на круге. Этаже хэш функция используется для определения значения ключей на круге. Выбирается ближайший по часовой стрелке узел.
|
|
|
|
![](Pasted%20image%2020240715135645.png)
|
|
|
|
**Плюсы:**
|
|
- При добавлении/удалении шардов затрагивается только часть данных.
|
|
|
|
**Минусы:**
|
|
- Данные могут быть распределены не равномерно, если между шардами будет различное расстояние на круге.
|
|
|
|
## Virtual Nodes (Bucket)
|
|
Можно попытаться решить проблему неравноморного распределения. Для этого мы добавим виртуальные шарды: для одной ноды определяется несколько точек на круге.
|
|
|
|
Такой подход используется в [Cassandra](Cassandra.md).
|
|
|
|
Плюсы:
|
|
- Более равномерное распределение.
|
|
- Можно использовать сервера разной конфигурации, размещая виртуальные бакеты так, чтобы обеспечить оптимальную нагрузку сервера.
|
|
|
|
## Дополнительные материалы
|
|
- Есть какая-то библиотека Guava/Sumbur |