写点什么

2012.3.19 微博热报:布隆过滤与多路归并

  • 2012-03-18
  • 本文字数:1071 字

    阅读完需:约 4 分钟

布隆过滤与多路归并

JavaChen 发布一条可作为面试题的微博

给你 A,B 两个文件,各存放 50 亿条 URL,每条 URL 占用 64 字节,内存限制是 4G,让你找出 A,B 文件共同的 URL。如果是三个乃至 n 个文件呢? http://t.cn/zOMmWru

李良普

bloom filter 可以实现,但是很少使用。

HubbleDotNet

布隆的关键是随机数的选取要尽可能接近平均分布

kkkua

BF 只是说有哪些 URL 在以前已出现过了。 优点难度的是真正“找出”n 个 URL 列表中所有那些相同的 URL(聚类问题)。好办法是做一个 incremental index, 边输入边去重,正如高性能的重复网页检测

海纳百通

我的理解是:1 布隆过滤 是能“激进地”找出“很可能已存在的”URL;2 但是,在发现可能的重复后,要确定并记录下 URL,就要索引到 URL,并做全文比对;3 这个问题里还连带提到“n 个文件”。。。所以,有改进的空间吧?

bnu_chenshuo

毛估了一下,单机(4G 内存,双硬盘)4 个小时应该能搞定,没用到 bloom filter。

陆鑫 Lucian

bloom filter 是我能想到速度最快的方法了,这题的关键就是先把要处理的数据总数降低数个量级,剩下的就好办了。陈硕老师能介绍下你的思路,效率如何吗?

matrix-reload

用 MapReduce 方法吧

bnu_chenshuo 回复 @陆鑫 Lucian

你估计用 bloom filter 解决,单机花多少小时?我的思路很简单,分块(1G)排序再多路归并,在归并的同时求集合的交集。

bnu_chenshuo 回复 @如此玄妙

多路归并用不着“最后一次归并 将 2 个一样大的已排序的文件合并”。AB 两个文件,分块排成各 300 个 1G 的文件,然后同时打开这一共 600 个文件读数据,两套文件分别多路归并,并求交集,把结果写出来即可。

原题不是要求单机 4G 内存吗?“300 个 1g 文件归并的比较次数 会和比 2 个 150g 文件大很多”是的,但是你那两个 150g 的文件事先要花多长时间生成?“每次取出数据,都需要在一个 300 条记录的树或者堆上进行一次排序”是的,不过这并不影响整体速度,内存处理速度只要高于磁盘读数据的速度即可

摇摆巴赫

bloom 需要磁盘随机 IO 吧,内存里的 hash bit 相等后还得磁盘读出来看 url 是不是相同,分块排序应该是顺序磁盘 IO,我觉得哪个快要看重复率

@TreapDB

先把这些 url 算 hash%100, 分别存到 100 个文件夹里,每个文件夹有两个文件,分别来自 A 和 B. 这两个小文件可以在内存中求交集生成小文件。最后,把这些交集小文件 cat 成一个文件。并不要求有序。

今日微博推荐

梁斌penny

推荐理由:清华大学计算机科学与技术系在读博士;《走进搜索引擎》作者、《深入搜索引擎》译者, THUIRDB 的 Coder,个人博客地址: http://blog.csdn.net/pennyliang

2012-03-18 20:492641
用户头像

发布了 479 篇内容, 共 182.5 次阅读, 收获喜欢 53 次。

关注

评论

发布
暂无评论
发现更多内容

2020年6月26日 查询性能优化

瑞克与莫迪

ARTS WEEK4

紫枫

ARTS 打卡计划

二叉树深度优先遍历

封不羁

Java 算法 二叉树

为什么哈希表可以管理亿级数据?

八两

php redis hash rehash

Docker基础修炼2--Docker镜像原理及常用命令

程序员潘Sir

Docker Linux 容器 运维 镜像

WPF中的Data Binding调试指南

大白技术控

.net 微软 WPF

架构师第4周

上山砍柴

极客大学架构师训练营

近两年流行面试题:Spring循环依赖问题

Java小咖秀

spring 面试 ioc

【总结】企业级案例驱动 打造高可用、高并发、多IDC部署业务中台微服务架构

魔曦

极客大学架构师训练营

架构训练营第四周 - 作业

无心水

极客大学架构师训练营

MySQL InnoDB 存储引擎 - 锁

Axe

辟谣:程序员不配谈恋爱?你错的可以!真相来了

码农神说

程序员 漫画 相亲

架构师训练营第三周命题作业

lwy

极客大学架构师训练营

面试官:我们来聊下锁吧

root

Java 乐观锁 悲观锁

测试阶段发现缺陷多怎么办?

洪永潮

架构师训练营第四周-总结

无心水

极客大学架构师训练营

新手村:Redis基础补充知识

多选参数

数据库 redis 数据库设计 redis6.0.0

创业一定要学投资

Neco.W

创业 投资

区块链的应用为什么这么难?出路在哪?

CECBC

比特币 区块链技术 Token 联盟共识

极客大学架构师训练营 系统架构 第7课 听课总结

John(易筋)

极客时间 系统架构 高并发 极客大学 极客大学架构师训练营

抖音、腾讯、阿里、美团春招服务端开发岗位硬核面试(完结)

aoho

面试 后端 阿里

[译]都0202年了,你还觉得go-scheduler很难理解吗?

卓丁

golang scheduler GPM goroutines Go 语言

过早优化是万恶之源

非著名程序员

程序员 程序人生 提升认知

centos7 操作

InfoQ_1c4a1f813eb1

架构师训练营第三周学习总结

lwy

从0开始设计Flutter独立APP | 第一篇: 数据库与状态管理

渔子长

flutter 大前端 跨平台

ARTS week3

姜海天

基于阿里云服务网格(ASM)的GRPC服务部署实践

韩陆

Kubernetes gRPC Service Mesh

区块链系列教程之:比特币中的挖矿

程序那些事

比特币 区块链 挖矿

​外包公司干了不到3个月,我离职了...(防坑指南)

程序员生活志

程序员 外包 工作经历

Why Spring ???

猴哥一一 cium

Java spring 源码 Spring Boot 框架设计

2012.3.19微博热报:布隆过滤与多路归并_语言 & 开发_郑柯_InfoQ精选文章