【发布时间】:2017-03-16 17:42:04
【问题描述】:
我们在 Algebird 中使用 Twitter 的 HyperLogLog 实现。给定一个数字 N 和我们系统中的一个检查,它使用 HyperLogLog 来估计逐渐增长的集合的当前大小并测试它是否大于或小于 N,我们如何编写一个集成或系统测试来测试这个检查并且是几乎可以保证通过,如果我们调用 HyperLogLog 的代码是正确的?被测系统是不确定的,因为一方面它是多线程的。
我的第一个想法是,编写对这个用例可靠的集成测试的正确方法是“放弃我们的标准”。那么,要发布到端点以确保 HyperLogLog 将估计项目总数大于 N(例如 >= 0.999999 的概率)的足够数量的项目 (M) 是多少?
或者有更好的方法吗?
标准错误界限是可配置的,但这并不能直接告诉我们偶尔可能会看到的最大错误界限——这是我关心的,以避免在 master 上随机失败的 CI 构建导致浪费时间和头发拉扯!
我还担心我们在测试中生成随机数据的方式可能不会在相关方面生成均匀分布的随机数据,这可能会对概率计算产生重大影响。
【问题讨论】:
-
您是否能够插入带有每个桶“高度”/“前导零数”的“假货”?
-
@GregoryNisbet 我认为没有 API 方法可以做到这一点。
标签: integration-testing approximation hyperloglog