算法之海量数据处理

10 篇文章 0 订阅
7 篇文章 1 订阅

1.哈希+分治

寻找共同的URL

给定两个a和b文件,各存放50亿个URL,每个URL占64字节,内存限制4GB,请找出a和b文件中共同的URL。

一个文件的内存:5 000 000 000 * 64 = 320GB,每个文件可以分为100个小文件,每个文件大约是3.2GB。

  • 思路一:分治+哈希+hashset,先把a通过hash函数取余分成100个小文件,再把b文件也是相同的方法,然后依次将a0和b0通过hashset进行统计相同的url,直到a,b所有的对应文件统计完毕。
  • 思路二:Bloomfilter过滤器,建立一个位数组,然后把a文件映射上去,在从b文件里面查重,会有误判。

 1000万个字符串去重(假设每个字符串64字节)

10 000 000 * 64 = 0.64GB,数据不多可以考虑直接加载进内存,使用Trie树,hash表,红黑树这些都可以去重。

ps:Trie树,利用了字符串的最大前缀信息的一种树结构,非常适合短文本,重复大的字符串查询场景。

 

2.文件的排序

五亿整数的大文件进行排序;

  • 外排序,一般是在内存空间不足的情况下进行的,使用多路归并的思路,就是先把文件分成小文件使用内存排序,然后在将这些有序的小文件进行多路归并排序
  • 用最小堆,每次删除堆顶元素,并找到该元素的对应文件加入一个元素,不断的循环读取元素即可;

给n个整数排序,没有重复,值都小于等于一千万,内存使用1MB。

  • 思路一:使用位图法,申请一千万个比特数组,空间占用为1.2MB,所以可以分割为两块,比如1-五百万和其他部分,在进行合并成一个。效率比较高因为IO操作少。

 

3.倒排索引

通过词来索引到文档的id号称为倒排索引,找到对应文档的id号。

ps:一般应用于文档检索系统,搜索引擎这种。

 

 

4.一致性hash原理

背景:原本分布式集群进行请求分配时是对服务器数量进行取模的,但是这样对增加和删除机器非常不友好,所以就想着在请求和服务器之间加一个中间件来解决这个问题。

申请一个很大的数组比如1到2的32次方,然后把用户请求均匀的利用hash函数散列到数组上,再把服务器散列到数组上,每次用户请求时,会寻找离他最近的一台机器,来实现负载均衡。

解决机器分布不平衡:一个机器上创建多个副本节点,放置服务节点--虚拟节点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值