海量数据处理思路「建议收藏」

海量数据处理思路「建议收藏」海量数据处理思路海量数据处理海量数据,不能一次加载到内存中海量数据topK(最大和最小k个数),第k大,第k小的数海量数据判断一个整数是否存在其中海量数据找出不重复的数字找出A,B两个海量url文件中共同的url海量数据topK最大K使用最小堆,最小K使用最大堆,这里以最大K为例海量数据hash分块维护最小堆的K个数据的数据容器堆中数据是topK大的数据,堆顶的数据是第K大数据先将海量数据hash再取模m,分成m个小文件,hash(num)%m,也可以直接取模在

大家好,又见面了,我是你们的朋友全栈君。

海量数据处理思路


海量数据处理

海量数据,不能一次加载到内存中

  • 海量数据topK(最大和最小k个数),第k大,第k小的数
  • 海量数据判断一个整数是否存在其中
  • 海量数据找出不重复的数字
  • 找出A,B两个海量url文件中共同的url

海量数据topK

最大K使用最小堆,最小K使用最大堆,这里以最大K为例

  • 海量数据hash分块
  • 维护最小堆的K个数据的数据容器
  • 堆中数据是topK大的数据,堆顶的数据是第K大数据
  1. 先将海量数据hash再取模m,分成m个小文件,hash(num)%m,也可以直接取模
  2. 在每个小文件中维护K个数据的最小堆,堆顶是当前堆中的最小值
  3. 遍历每个小文件中剩余的数据,与堆顶的数据进行比较,更新最小堆中的数据
  4. 生成m * K个数据,然后对这些数据再进行排序,或者再次通过维护最小堆

变形

  1. 第K大不只是topK,此时堆顶数据即是
  2. 只求最大或最小
  3. 海量数据不仅仅是整数,也可以是字符串
  4. 海量数据按照出现的次数或者频率排序,topK
  • 海量数据按照出现的次数或者频率排序,topK
  1. 先将海量数据hash再取模m,分成m个小文件,hash(num)%m
  2. 扫描每个小文件的数据,通过hash_map建立值和频率的键值对
  3. 以出现的频率维护最小堆的K个数据的数据容器
  4. 遍历每个小文件中剩余的数据,与堆顶的数据进行比较,更新最小堆中的数据
  5. 生成m * K个数据,然后对这些数据再进行排序,或者再次通过维护最小堆

找出A,B两个海量url文件中共同的url

题目:两个文件各存50亿个url,每个url64个字节,内存限制4G,找出A,B共同的url

  • 单个文件读取肯定超出内存大小,所以还是采取之前的分治思想,大化小,对A/B分别取模分成1000个文件存储,这样两个文件中相同的url都被分到相同的小文件中,若有一方的小文件还是太大,则可以扩大分块或者通过不同hash函数继续hash(若继续,两方应该一起),50亿url算下来每个文件300M。
  • 对小文件求公共url的时候可以使用hash_set去重。A文件Set建立后另外一个文件的内容遍历跟Set中内容比对,如果相等则记录

bitmap

bitmap一般是total/32 + 1个数组,从a[0]开始,每组是32bit表示,对应位的0或1表示十进制的0-31是否存在,可以用于快速排序,快速去重,快速查询

海量数据判断一个整数是否存在其中

  • 分治思想,首先分成小文件,然后建立HashTable进行统计
  • 可以使用BitMap,每个数分配1Bit,0不存在,1存在建立完毕扫描数据把对应位置的比特位描成0/1,最后查找整数的位置是否为1(通过商判断在哪个数组中,余数判断哪一位)

海量数据找出不重复的数字/仅出现一次的数据

  • 可以使用BitMap,每个数分配两Bit,00不存在,01出现一次,10出现多次,11没意义。需要内存2^32 * 8 * 2bit,建立完毕扫描数据把对应位置的比特位描成00/01/10/11,最后查找01
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152458.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pychar激活码3月最新在线激活

    pychar激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    48
  • matlab 及数字信号实验报告,Matlab数字信号处理实验报告.doc

    您所在位置:网站首页>海量文档&nbsp>&nbsp高等教育&nbsp>&nbsp实验设计Matlab数字信号处理实验报告.doc26页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。2.该文档所得收入…

    2022年4月8日
    47
  • 软件测试的一点知识[1]

    软件测试的一点知识[1]

    2021年8月1日
    51
  • bzero memset_memset是什么函数

    bzero memset_memset是什么函数 bzero函数函数原型:voidbzero(void*s,intn);头文件:#include<string.h>功能:将字符串s的前n个字节置为0,一般来说n通常取sizeof(s),将整块空间清零。返回值:无返回值例子:将一个数组清零:charstr[10];bzero(str,…

    2022年10月13日
    0
  • 百度分享异步加载问题、分页,无效果解决[通俗易懂]

    百度分享异步加载问题、分页,无效果解决[通俗易懂]使用百度分享的时候,如果所涉及到的html部分是后加载进来的,如ajax等异步请求成功后,加载进来,那么百度分享就有可能出现错误。我在使用的时候,遇到了两个问题。在这里记录一下。1、无法把所需要分享的内容传值到百度分享里。  百度分享的配置里有两个值,bdText,bdDesc,这两个内容,分别分享标题和内容。  内容是异步加载进来的,所以在百度分享相关代码是在加载成功后运

    2022年10月8日
    0
  • JQuery——图片缩放和截图发送

    记录一下图片缩放 和截图发送!图片缩放 https://yihui.name/cn/2007/09/highslide-and-lightbox/ http://www.zhangxinxu.com/jq/balupton_zh/demo/ http://www.dowebok.com/demo/214/ http://www.lanrentuku.com/js/tupian-933.htm

    2022年2月26日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号