• 求助!对比查询怎么才能最快?
  • 发布于 3天前
  • 18 热度
    8 评论
  • 亦東風
  • 0 粉丝 42 篇博客
  •   
有这样一个需求,首先是有 100 万个 md5 值(不重复,提前录入),然后每隔 10 秒会产生 300 个新的 md5 值,现在的要求是拿这 300 个去与 100 万个对比,查询出这 300 个里面哪些是包含在那 100 万个里面的,需要极致的速度,越快完成越好。

之前同事用 redis 集合处理,据说好像是 30-40 毫秒(我不确定这个时间是否准确),依旧说还没达到要求,还能不能再极限一点,对了,还有个要求,就是那 100 万个 md5 值,不能丢,需要持久化保存,系统重启之后依旧要在。求大佬们指点一下思路,主要是速度要快,快,快。先提前感谢各位大佬的思路。
用户评论
  • 深渊骑士
  • 楼下都是看见问号就开始解题的,你这根本就是无效需求:10 秒才产生 300 个数据,只花 30 毫秒的处理时间还嫌慢,剩下的时间去睡觉吗?这种需求就像原本的目标是从北京到拉萨,却问怎么提高长跑速度。
  • 2024/9/4 12:45:00 [ 0 ] [ 0 ] 回复
  • 回忆在沉淀
  • 30-40 毫秒 都不能满足要求? 那就只能自己撸数据结构了:使用 Bloom Filter + Bit Array 组合 ,用 C/C++实现。还要考虑利用 SIMD 指令加速。
  • 2024/9/4 12:42:00 [ 0 ] [ 0 ] 回复
  • 遥忘而立
  • 速度 30-40 毫秒的话, 我觉得很有可能是用 for 循环查了 300 次 redis, 或者是连 redis 的网络不行. 想个办法写成一句查询, 一次性返回 300 个结果。如果新 md5 大概率不在这 100 万个里面, 可以外面套一层 bloomfilter, 减少查询量.
  • 2024/9/4 12:35:00 [ 0 ] [ 0 ] 回复