Детерминистически назначить идентификатор в списке взвешенных сегментов - PullRequest
0 голосов
/ 23 декабря 2010

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

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

Например, сегменту 1/21 назначается 90% времени, а оставшимся 20 тестам назначается 0,5% времени.

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

1 Ответ

3 голосов
/ 23 декабря 2010

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

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

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

...