引言
面试题
如何在10e的数据中,检查用户是否存在?
朴素方法:
在数据库里直接查,虽然可以建索引,10亿级的数据索引树也大的不得了。这种方式惠产生性能问题,加剧数据库的负载。
select count(1) from user_info where user_id = GGJHAGJH123123123123;
缓存方法:
SISMEMBER user_id_key GGJHAGJH123123123123
这个快是快,但是多少都得吃个几十G内存。
不过话又说回来,就算小公司,加个几十G内存也不算事。
不过话又说回来,作为一个开发工程师,要有追求,这么点事吃个几十G,都够跑一个大业务系统了。
布隆过滤器:
布隆过滤器的原理是,当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个位数组中的 K 个点(offset),把它们置为 1。检索时,我们只要看看这些点是不是都是 1 就(大约)知道集合中有没有它了:如果这些点有任何一个 0,则被检元素一定不在;如果都是 1,则被检元素很可能在。这就是布隆过滤器的基本思想。
[1] https://juejin.cn/post/7038779056996745224
[2] https://juejin.cn/post/7293786247655129129