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

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

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

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

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

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

© 2021 V2EX