- 论坛徽章:
- 0
|
很多事情其实去做做就可以了,没你想的那么难。大多数时候数据库确实可以解决问题,但是你要看到,也有很多时候,通用数据库并不是最佳解决方案。
布隆过滤器并不是什么很难的技术,只是你愿不愿意去掌 ...
请坚持"布隆过滤器"论的, 还是好好研究一下它吧, 我前面提的几个问题:
1. 在10亿个元素的规模下, 你找到什么好的hash函数组, 能保证你说的99%的命中率? 拿出一组这样的函数来证实一下再说吧.
2. 众所周知, 布隆过滤器适合一次性装载然后只读方式访问的静态数据, 不合适频繁更新, 更绝对不能删除.典型的应用案例是网站的cache, 可以快速检测内容是否命中, 如高速的音乐点播等网站. 这样的算法, 适合不断刷新,甚至不断删除的用户ID管理吗? 说什么要几天重装一次, 说什么用户检测结果只要接近准确就行, 这有点强辞夺理吧? 想想看, 在数据库上,即使10亿行, 也能在0.1ms的速度上得到结果,而且绝对准确, 不需要人去维护它,每隔几天重装.如果是你, 会选哪个方案?另外, 你自已也提到, 还要配合数据库的黑白名单一起使用, 那么说最后还是至少要查一次数据库,既然如此, 还需要这个干嘛,我直接查一次数据库就解决问题了, 前面已经测试过, 0.1ms的级别, 数据规模从几百到数十亿, 查询时间基本一样.不得不承认,在精确查找方面,数据库的索引算法,的确已经很优秀.
3. 你说的不难, 那么请你想想, 如果你承认同时并发读写必须加锁的事实的话, 那么请你讲讲, 如何解决"并发10000读同时并发10000写"的加锁问题. 可以告诉你的是, 多线程锁绝对是行不通的,几百并发的规模还凑合. 数据库最复杂的处理技术之一,就是它的I和C两项, 并发访问控制和数据隔离度控制. 恐怕你的布隆过滤器需要加上这个并发访问控制的算法时,其算法复杂度已经不是你们口头上所说的"简单的算法了".
4. 前面提到的,数据一致性保证问题, 我已经告诉我你们分布式事务是高代价的. 请你讲讲,你又有什么好的方案?算了,这点要求太高,可以忽略. 但还是需要明白一点, 如果全数据库管理,是不需要面对这个难题的.
布隆过滤器应用在cache访问查找的场合,确实是不用考虑上述任何问题, 而且是绝大部分网站的通用技术, 但自已好好想想, 适合用于用户ID查找吗? 如果仍然坚持的话, 麻烦拿出一个实际算法源码, 哪怕是一个设计方案也行, 让大伙都瞧瞧可好?
直到目前为止, 虽然只能说数据库是实现用户ID管理和识别的一个可实现方案,不一定是最值方案, 但我一点看不出布隆过滤器是一个可实现方案,更不要说是最佳方案了.只要你拿出的技术设计说明解决了前面四点, 不, 只要前三点问题,大家才会承认它是一个可实现方案.
另外, 还是希望大家保持这种技术讨论的方式, 别老说反话,怪话. 听着觉得幼稚.
[ 本帖最后由 zszyj 于 2008-6-27 08:49 编辑 ] |
|