我在网站上运行n次分割测试。我想将均匀分布的整数用户ID分配给n个桶中的一个,并且确定性地使同一个用户总是得到相同的测试。
此时,我可以通过将用户ID修改为n来选择拆分测试列表中的索引。如果我想对某些测试进行加权怎么办?
例如,90%的时间分配#1/21桶,而0.5%的时间分配剩余的20个测试。
我觉得我可以以某种方式扩大我的列表的大小,仍然使用mod技术来实现这一点,但在内存中拥有潜在的巨大的临时列表似乎是不优雅的。
答案 0 :(得分:3)
如果大多数存储桶具有不同的大小,其中大小被定义为id的百分比,那么你必须以某种方式在内存中表示它。否则,你怎么知道这些百分比?
使用的一个解决方案是让我们说100个虚拟桶,每个桶代表1%的ID。然后将90个虚拟桶与桶#1/21相关联。然后你可以执行mod 100,如果它落在第一个90个虚拟桶中,则将id分配给桶#1。您可以通过将每个桶的百分比除以所有百分比的GCD来获得最佳虚拟桶数,在您的示例中为0.5(GCD(90,0.5))。
从您的示例中,只有一个不同的存储桶大小。最好的解决方案实际上取决于您可以采用何种类型的安排。