系统中的用户由GUID标识,并且通过新功能,我想将用户分为两组 - 测试和控制。
根据他们的GUID,有没有一种简单的方法可以将用户分成两个组中的一个,有50/50的机会?
e.g。如果第n个字符的ascii代码是奇数 - >试验组,否则为对照组。
70/30或其他比例怎么样?
我想基于GUID对用户进行分类的原因是因为稍后我可以轻松地告诉哪些用户在哪个组中并比较两组之间的性能,而不必跟踪组分配 - 我只需要计算再一次。
答案 0 :(得分:1)
正如Derek Li所说,GUID的位可能基于时间戳,所以你不应该直接使用它们。
最安全的解决方案是使用像MurmurHash这样的散列函数来散列GUID。这将生成一个随机数(但每次对于任何给定的GUID都是相同的随机数),然后您可以使用它来进行拆分。
例如,您可以像这样进行30/70分割:
function isInTestGroup(user) {
var hash = murmurHash(user.guid);
return (hash % 100) < 30;
}
答案 1 :(得分:0)
如果GUID中的某个字符的1/16更改为以下字符之一:“0123456789ABCEDF”,那么您可以测试一个确定该字符位置的方案。
假设名为c的guid的最后一个字符有1/16的机会是任何十六进制数字:
用于50/50分发 - &gt;对于组1,c <= 7,c>第2组为7
对于组1的70/30 c&lt; = A,c> A组为2组
等...