Детерминированное назначение идентификатора в списке взвешенных ведер

StackOverflow https://stackoverflow.com/questions/4514659

Вопрос

Я запускаю N -разделенные тесты на веб -сайте. Я хочу назначить равномерно распределенного целочисленного идентификатора пользователя одному из N Buckets, и определенно, чтобы один и тот же пользователь всегда получил один и тот же тест.

На этом этапе я могу просто выбрать индекс в списке разделенных тестов, модифицируя идентификатор пользователя по n. Что если я хочу взвесить определенные тесты?

Например, ведро № 1/11 назначается 90% случаев, а остальным 20 тестам присваивается 0,5% случаев.

Я чувствую, что могу каким -то образом увеличить размер моего списка и по -прежнему использовать технику MOD для достижения этого, но наличие потенциально огромных, временных списков в памяти кажется неотъемлемой частью.

Это было полезно?

Решение

Если большинство ведер имеют отдельные размеры, где размер определяется как процент идентификаторов, то вам придется каким -то образом представить это в памяти. В противном случае, как еще вы узнаете об этих процентах?

Одним из решений для использования является то, что, скажем, 100 виртуальных ведер, каждая из которых представляет 1% идентификаторов. Затем ассоциируйте 90 виртуальных ведер с ведром № 1/11. Затем вы можете выполнить мод 100, и если он попадает в виртуальные ведра кулака 90, назначьте идентификатор для ведра № 1. Вы можете получить оптимальное количество виртуальных ведер, разделяя процент каждого ведра на GCD из всех процентов, которые в вашем примере составляют 0,5 (GCD (90, 0,5)).

Из вашего примера есть только один отдельный размер ведра. Лучшее решение действительно зависит от того, какие типы договоренностей вы могли бы иметь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top