Существует ли алгоритм / метод, который позволяет мне увеличивать количество сегментов без перестройки данных / повторного хеширования.
Проблема на практике:
Скажем, у вас есть группа пользователей, которые идентифицируются строкой «username».
Затем вы хэшируете эти «имена пользователей» в список сегментов.
This is done by something like:
String username = "user";
int index = username.hash();
int bucketIndex = index % bucketlist.size();
Так что в этой схеме, если бы я захотел увеличить количество «сегментов», нужно было бы также переместить данные в сегменты. Чтобы он соответствовал новому индексу сегмента, полученному при выполнении по модулю с другим номером.
Это действительно просто отображение. Где найти корзину, которая принадлежит данному пользователю.
Возможные тупые решения:
Имейте и старый размер ведра и новый размер ведра. А потом попробуйте заглянуть в два ведра.
Затем медленно переместите всех пользователей так, чтобы они соответствовали, используя новый bucketlist.size (). Это не потребует полной остановки при хешировании и перемещении.
Что нужно:
Это действительно перемещение всех пользователей, что плохо. И поиск во многих ведрах, чтобы найти правильное, также не идеален.
И весь смысл в том, чтобы иметь возможность точно определить, какую корзину в списке использовать, просто используя алгоритм.
И размер списка сегментов не может быть частью имени пользователя.
Нет необходимости хешировать, как это делается здесь, если примерно так же.
Я не знаю, есть ли разумный ответ на это ...