写点什么

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:492564
用户头像

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

关注

评论

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

开源之夏 2022 重磅来袭!欢迎报名 RadonDB 社区项目!

RadonDB

数据库 开源 RadonDB 开源之夏

为 GPU 而来,焱融科技推出新一代全闪分布式文件存储产品

焱融科技

人工智能 云计算 高性能 文件存储 高计算

硬仗白酒,解锁当下“社交密码”

联营汇聚

OceanBase 3.2.3 发版|HTAP引擎全面升级,TPC-H性能10倍提升!

OceanBase 数据库

oceanbase

代码历史上最昂贵的 7 个错误

禅道项目管理

测试 代码

使用APICloud AVM框架实现App导航栏菜单

YonBuilder低代码开发平台

APP开发 APICloud avm.js

攻克编译器技术(2)

刘旭东

源代码 编译器原理 5月月更

Alibaba最新出版的JDK源码剖析手册(究极奥义版)开源

Java架构追梦

jdk java面试 后端开发

Git 安装及配置

Emperor_LawD

git 基础 5月月更

一文搞定 Flutter 文件下载和管理

岛上码农

flutter 跨平台 安卓开发 ios 开发 5月月更

易周金融观点 央行设立科技创新再贷款;多家银行下调大额存单利率

易观分析

金融 银行

不仅仅是自动化,DevOps 测试工具推荐

飞算JavaAI开发助手

谁在从API经济里分得一杯羹!

Liam

Postman API API Explorer平台 API boy 开放api

博睿数据获得分布式系统稳定性实验室成员单位证书 亮相全球信息系统稳定性峰会

博睿数据

Jackson 解决没有无参构造函数的反序列化问题

TRAMP

Jackson java 序列化与反序列化

Q1手机银行运营报告:交易规模超150万亿,月活跃用户4.9亿

易观分析

手机银行

Apache Calcite SQL解析及语法扩展

不穿格子衬衫的程序员

数据库 sql 大数据 flink Apache Calcite

淘宝京东优惠券返利机器人

江苏京酷电子商务有限公司

淘宝电商 群聊机器人 返利 采集京东

认清大脑中的一对塑料姐妹花,科学解锁情绪密码

图灵教育

效率 职场 脑科学

InfoQ AI开发者召集令!快来助力中国AI产业发展,参与抽奖!

InfoQ写作社区官方

AI 热门活动 白玉兰开源

Tech Talk 宣传 | 如何高效、极简构造无服务器 Web 应用

亚马逊云科技 (Amazon Web Services)

Web

Linux多线程-概念及控制

可口也可樂

c++ Linux 后端

量子计算是人工智能的未来吗?

海拥(haiyong.site)

人工智能 量子计算 5月月更

易观分析刘怡:技术投入聚焦降本增效,用技术赋能人提升企业能效

易观分析

人口变化 技术赋能

Spring data JPA实践和原理浅析

领创集团Advance Intelligence Group

工作原理 java Spring JPA

浅谈TCP和UDP协议

工程师日月

5月月更

五、高可用之全链路压测

穿过生命散发芬芳

5月月更

LAXCUS分布式操作系统:云盘的使用

LAXCUS分布式操作系统

云盘 分布式存储 分布式软件系统

想要成为一名真正的软件工程师吗?加入非凸,一起升级!

非凸科技

招聘 社招 校招 软件开发工程师

【愚公系列】2022 年 05 月 二十三种设计模式(五)-单例模式(Singleton Pattern)

愚公搬代码

5月月更

每日一题——PAT乙级1004 成绩排名 python

武师叔

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