1

我正在一个网站上运行 n 个拆分测试。我想将一个均匀分布的整数用户 ID 分配给 n 个存储桶之一,并且确定性地使同一用户始终获得相同的测试。

此时,我可以通过将用户 ID 修改为 n 来在拆分测试列表中选择一个索引。如果我想对某些测试进行加权怎么办?

例如,桶 #1/21 分配了 90% 的时间,其余 20 个测试分配了 0.5% 的时间。

我觉得我可以以某种方式扩大我的列表的大小,并且仍然使用 mod 技术来实现这一点,但是在内存中拥有潜在的巨大的临时列表似乎并不优雅。

4

1 回答 1

4

如果大多数存储桶具有不同的大小,其中大小定义为 id 的百分比,那么您必须以某种方式在内存中表示它。否则,你怎么知道这些百分比?

一种使用的解决方案是假设有 100 个虚拟存储桶,每个存储桶代表 1% 的 id。然后将 90 个虚拟存储桶关联到存储桶 #1/21。然后您可以执行 mod 100,如果它落在前 90 个虚拟存储桶中,则将 id 分配给存储桶 #1。您可以通过将每个存储桶的百分比除以所有百分比的GCD来获得最佳虚拟存储桶数量,在您的示例中为 0.5 (GCD(90, 0.5))。

从您的示例中,尽管只有一个不同的存储桶大小。最好的解决方案实际上取决于您可以拥有哪些类型的安排。

于 2010-12-22T23:41:29.833 回答