海量数据处理

常见的处理方式

参考链接:
https://www.bilibili.com/video/BV1z44y1q7px?p=2&spm_id_from=pageDriver

● Hash法:哈希表。用于快速存取、统计某些数据,将大量数据进行分类。例如提取某日访问网站次数最多的IP地址等。
● Bit-map:使用位数组来表示某些元素是否存在。用于海量数据的快速查找、判重、删除等。如从8位电话号码中查找重复号码或统计不同号码的个数(可用多个bit表示一个数)。
● Bloom Filter:位数组+k个hash函数。定义m位初始化都为0的数组,每个函数都可以将元素映射到某一位。判断某个元素是否属于集合时,查看k个位是否全部为1。缺点:若都为1存在错误率、无法删除元素。如检查英文单词是否拼写正确、邮箱过滤垃圾邮件、找出两个各存放50亿条URL的文件中共同的URL。
● 数据库优化法:创建索引、配置缓存、切表分表、数据采样。
● 倒排索引法:正向索引用来存储每个文档的单词的列表,反向索引则是单词指向了包含它的文档。如常见的学术论文的关键词搜索。
● 外排序法:内存不能一次处理待排序的对象,必须把它以文件的形式存放于外存,排序时(归并排序)再把他们一部分一部分地调入内存进行处理。用于大文件的排序以及去重。
● Trie树:前缀树。根节点不包含字符,除根节点外的每一个子节点都包含一个字符。从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点包含构成单词数量count。用于词频统计、前缀匹配、字符串排序。
● 堆:二叉堆。适用于海量数据求前N大(小顶堆)、前N小(大顶堆)或中位数(双堆)问题。如100w个数中找最大的前100个数。
● 双层桶:分而治之。因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。如5亿个整数中找出不重复的整数的个数(内存装不下)。将数据分离到不同的区域文件,不同的区域在利用bitmap来解决。
● MapReduce法:将数据划分并交给不同的机器去处理,结果归约。

1、链表和MAP

  • 链表:海量数据占用内存比较大,查找排序效率比较低。O(n)
  • MAP:海量数据占用内存比链表还大,但是查找效率比较高。O(1)

2、BITMAP 位图

  • 本质:内存方面讲:字节(Byte)数组。 1Byte=8bit,JAVA里面有Byte数据类型,没有bit数据类型。

2.1 BITMAP的下标和元素位置的确定

  • 一个数x(非负整数)若要存储在位数组里, 会面临两个问题:
  1. x存储在第几个byte里?
    因为一个byte可以存储8个bit,那很显然,x应该存储在第(x/8)个byte里。

  2. x存储在第(x/8)个byte的第几位上?
    通过观察,x应该存储在第(x%8)位上。

综上, x应该存储在第(x/8)个byte的第(x%8)位上。
在计算机里,位操作比除法和求模操作更高效点。x/8 相当于 x>>3(右移一位,相当于除以2;右移三位,相当于除以8);x%8相当于x&0x7。

2.2 BITMAP应用场景、优点和缺点

2.2.1 应用场景:
  • 使用位数组来表示某些比较连续的海量数据是否存在。boolean类型:要么1:存在 要么0:不存在
  • 数据状态不多的比较连续的海量数据的 数据的状态数量。可以用 多个BIT来存放状态,8(2的三次方)个状态的话用3BIT来存储一个元素。
  • 优点:省空间 (MAX-MIN)* 状态位 /8bit /1024 B/1024 KB/1024MB
    • 状态位: 1位 0:不存在, 1:存在
    • 状态位: 2位 00:状态0, 01:状态1. 10:状态2,11:状态3
2.2.2 优点:

省空间,数据有序(根据byte数组下标和第(x/8)个byte的第几位 能对应数据)

2.2.3 缺点:

如果数据比较少,不连续,状态比较多。那么占用空间比较大 (MAX-MIN)* 状态位 数据比较大,占空间比较多。

3、Bloom Filter 布隆过滤器

  • 本质实现:BITMAP和多个HASH算法(尽量减少HASH冲突)
    在这里插入图片描述
    在这里插入图片描述

3.1 特性:假阳性 误判

在这里插入图片描述
在这里插入图片描述

3.2 特点

在这里插入图片描述

3.3 具体使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值