有这样一个需求,首先是有 100 万个 md5 值(不重复,提前录入)

然后每隔 10 秒会产生 300 个新的 md5 值

现在的要求是拿这 300 个去与 100 万个对比,查询出这 300 个里面哪些是包含在那 100 万个里面的,需要极致的速度,越快完成越好。

之前同事用 redis 集合处理,据说好像是 30-40 毫秒(我不确定这个时间是否准确),依旧说还没达到要求,还能不能再极限一点

对了,还有个要求,就是那 100 万个 md5 值,不能丢,需要持久化保存,系统重启之后依旧要在。

求大佬们指点一下思路,主要是速度要快,快,快。

先提前感谢各位大佬的思路。
举报· 161 次点击
登录 注册 站外分享
13 条回复  
sillydaddy 初学 2024-9-4 12:26:00
楼上都是看见问号就开始解题的,你这根本就是无效需求:10 秒才产生 300 个数据,只花 30 毫秒的处理时间还嫌慢,剩下的时间去睡觉吗?这种需求就像原本的目标是从北京到拉萨,却问怎么提高长跑速度。
GeekGao 小成 2024-9-4 11:55:44
30-40 毫秒 都不能满足要求?  那就只能自己撸数据结构了:使用 Bloom Filter + Bit Array 组合 ,用 C/C++实现。还要考虑利用 SIMD 指令加速。
wxf666 小成 2024-9-4 11:52:47
就 16MB 内存数据,你直接用语言自带的 Hash / HashMap / Dict / Object / Unordered_map / Table ,不行吗?
bugmakerxs 小成 2024-9-4 11:24:16
把数据加载到内存生成字典树。
yagamil 小成 2024-9-4 10:40:14
我觉得 mysql 都够用了,索引+ in 语句
fruitmonster 小成 2024-9-4 10:26:59
布隆不行么?
PTLin 小成 2024-9-4 10:23:10
那就加载到本机然后前缀树匹配不行吗,我试了下 6800h 单线程匹配也就 1 毫秒
aflow 小成 2024-9-4 10:15:46
查询的时候和布隆过滤器组合使用,过滤下应该可以快不少
sagaxu 初学 2024-9-4 10:15:23
redis pipeline 了解一下
Kaiv2 小成 2024-9-4 10:14:58
直接预加载到机器内存中,消耗时间 0 毫秒
12下一页
返回顶部