千万级数据的去重的性能问题,欢迎一起讨论!

2015 年 8 月 2 日
 hktony
场景:需要对redis中的不同的千万级set集合之间做去重,一直使用sdiff,但是随着数据量的增大,sdiff命令变得越来越不可靠,容易导致cpu过高,导致redis长时间无响应。
目前redis已经做了一致性哈希的分片,16台redis节点集群,每个set集合平均分到16台redis节点上。除了横向扩展,是否有更为高效的去重方案取代redis的sdiff命令?
7097 次点击
所在节点    Redis
8 条回复
kslr
2015 年 8 月 2 日
允许有误差么? 可以看看布隆过滤器 ( 3亿级的数据正在用
zhicheng
2015 年 8 月 2 日
允许多大的误差?可以看看 HyperLogLog https://en.wikipedia.org/wiki/HyperLogLog
fszaer
2015 年 8 月 2 日
@zhicheng
然而 redis中的 HyperLogLog 只能求近似基数
如何应用到去重中???
Lax
2015 年 8 月 3 日
@fszaer HLL 可以根据返回值判断是否已经被计数过。
jiehuangwei
2015 年 8 月 3 日
去重用这个 Bloom Filter
hktony
2015 年 9 月 1 日
@kslr 不允许有误差, bloom filter 算法误差率最低可以控制在多少?
@jiehuangwei bloom filter 可以对两个不同集合之间做差集吗?
kslr
2015 年 9 月 1 日
@hktony 这个需求适合 redis 的集合
hktony
2015 年 9 月 5 日
@kslr 现在其实就是用 redis 的 set 集合两两做差集做的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/210295

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX