问题:数据太大,在内存中无法一次性装入。

题1:给定一个大小超过100亿的文件,该文件是用来存储IP地址,找到出现次数最多的IP地址。
分析:100亿就是大约就是10G,对于现在的计算机而言,内存中无法容纳这么大的文件。
解决:将一个大文件切分为多个小文件,例如:我们可以将该100亿的大文件切分为1000个文件,即每个文件的大小大约就是10M,那么就可以在内存中容纳得下了。
那么,我们要怎么来切分这个100亿的大文件呢?平均分?很显然是不可以的,如果分到某个文件的IP地址出现的次数都是1次,那么该文件出现最多的IP就是这10M个IP。那么就会浪费很大的空间,不符合我们的预期。所以,在此我们可以采用哈希表的方式,对IP先转换为对应的整数,在对该数取模,将模相同的IP放在同一个文件之中,那么这样在同一个文件中出现IP相同的概率就会大一些。
然后我们就可以分别统计出这1000个文件中IP次数最多的IP,然后再将这1000个文件进行汇总。如下面的图解。

题2:给定100亿个整数,找到其中只出现一次的整数。
分析:遇到这样的问题,我们首先想到的处理方法就是:使用一个辅助数组,用来存储每个数据出现的次数。那么我们就需要100亿大小的数组。100亿 = 10G = 10 * 4 = 40G,可能就需要40G的内存,明显对于当代的计算机是不可能的。
解决:我们需要的结果是找出出现一次的数字,我们知道,位图可以用来表示一个数字是否存在,可是我们现在要找的数字是出现一次的数字。所以,我们可以将之前的位图进行扩展。例如:我们使用两位来表示一个数字的存在状态。00:表示该数字不存在;01:表示该数字存在1次;11:表示该数字出现了多次。那么,这样100亿个数字就只要200亿个位,即需要25亿字节,即需要2.5个G就可以进行统计了。在查找的过程中,我们只需要判断是否是01,如果是那么就是我们要找的那个数字。


题3:有两个文件,分别由100亿个query(查询词,即字符串),但是只有1G的内存,找到两个文件的交集。
分析:对于这样的 大文件,同样的我们不能对其进行处理。因为在当代的计算机中并不能存储这么大的数据。
解决:与问题一相似,首先将这两个大文件进行切分。切分完后,就产生了很多小文件,文件1:file1.1,file1.2,file1.3,file1.4,file1.5,…….文件2:file2.1,file2.2,file2.3,file2.4,file2.5,…….然后我们将file1中的所有小文件采用布隆过滤器存储,然后再处理文件2的小文件,在处理文件2的小文件时,若file1中也存在该文件,我们就把它存储于另外一个文件中。当文件2的所有小文件处理完时,也就找到了两个文件的交集。


题4:给定上千个文件,每个文件的大小为1K-100M,请设计算法找到某个词存在于哪些文件之中。
解决:首先我们了解一下什么是正排索引,什么是倒排索引。
简单的说,正排索引就是根据编号去找对应的数据;而倒排索引就是根据数据去找编号。详解如下图所示:


那么,显而易见,对于这个问题我们就要使用倒排索引的方式:
解决过程:

  1. 首先将每个文件的数据对应的存储到一个布隆过滤器之中,可能会存在很多个布隆过滤器。
  2. 然后我们读取每一个布隆过滤器中的词,并且记录每个词和其对应的文件,将其保存在另外一个文件中,假设这个文件叫做Information。(即倒排索引的方式存储)
  3. 将所有的词分为几个小部分,分别存储到布隆过滤器中。
  4. 当遇到一个词后,我们就要判断该词是否存在。那么,此时我们就可以在存储单词的布隆过滤器中查找,判断该词是否存在。
    a.遍历所有存储单词的布隆过滤器,如果存在,也就可以找到其对应的文件了。若不存在,那么该单词不在这些文件之中。

总结:对于大数的处理方法:

  1. 切分
  2. 使用哈希,位图,布隆过滤器等算法。。。。。。。

对于大数据的一些处理方法相关推荐

  1. 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  2. mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  3. 大数据可视化的应用方法

    随着互联网的不断发展,大数据技术在各个行业中都有不同的表现作用,作为助力企业经营决策的大数据可视化应用,对于的企业发展起着至关重要的作用,但是如何利用大数据可视化,如何做好大数据可视化?而今天我们就一 ...

  4. MySQL 和 Oracle 大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  5. 浅析大数据时代下市场研究方法

    大数据时代新的市场研究方法使"无干扰"真实还原消费过程成为可能,智能化的信息处理技术使低成本.大样本的定量调研成为现实,这将推动消费行为及消费心理研究达到一个新的高度,帮助快速消费 ...

  6. MySQL大数据量分页查询方法及其优化

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...

  7. 大数据量分页查询方法(转)

    本文旨在介绍一种对数据库中的大数据量表格进行分页查询的实现方法,该方法对应用服务器.数据库服务器.查询客户端的cpu和内存占用都较低,查询速度较快,是一个较为理想的分页查询实现方案. 1.问题的提出  ...

  8. 处理机器学习大数据的7种方法

    文章目录 目录 1.分配更多的内存 2.使用较小的样本 3.将数据提交至服务器上 4.更改数据格式 5.使用数据流方式或者逐行读入的方法 6.使用关系数据库 7.使用大数据平台 目录 在实际的生产过程 ...

  9. 大数据架构的典型方法和方式

    版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载. https://blog.csdn.net/wireless_com/article/details ...

  10. 数字格式化、大数据BigDecimal、随机数生成方法random()

    目录 数字格式化: 大数据: 常用构造函数: 常用方法: BigDecimal大小比较: 除法的时候出现异常 工具类推荐: 随机数生成方法random(): 参考文献: 数字格式化: 符号 说明 0 ...

最新文章

  1. java中Map的用法(HaspMap用法)
  2. 【原创】flume-1.3.0安装配置以及flume启动说明
  3. LSTM 和 GRU
  4. c++设计新思维_贵阳花溪区初三冲刺多少钱,新思维
  5. 格雷码、二进制码、BCD编码
  6. 渗透测试入门1之信息收集
  7. ARCGIS RUNTIME FOR IOS总结(三)
  8. click Commands and Groups
  9. 让你的博文自动带上缩址,方便发到微博客上
  10. layui select 默认选中
  11. JAVA数据结构和算法系列视频教程 20课
  12. leaflet保存pm绘图geojson数据
  13. 基于CNN的微信二维码引擎OpenCV开源!
  14. 特斯拉和拼多多,到底在「较真儿」什么?
  15. 量化交易系统用例图(一)
  16. Lua: Error during loading: \[string “/usr/share/wireshark/init.lua“\]:45
  17. 今年你们赚到钱了吗?
  18. 关于 LambdaMART 的六个疑惑
  19. TI C2000系列TMS320F2837xD开发板(DSP+FPGA)硬件规格参数说明书
  20. PostgreSQL安装以及和mysql的对比

热门文章

  1. 房车接父母“反向过年”成春运新亮点
  2. DOTA2匹配机制详解
  3. Jupyter制作slides(幻灯片)
  4. 360浏览器兼容模式下站点显示不正常,极速模式正常
  5. CentOS7.6安装图形界面失败,startx执行失败
  6. sublime text3安装python插件和flake8_Sublime Text环境配置(Python、Latex、Markdown)及常见问题汇总...
  7. C语言 强符号与弱符号
  8. 【数据结构 C描述】一个文本串可用事先给定的字母映射表进行加密。
  9. lua与c#交互篇 | 合理用好lua+unity,更省性能的方案整理
  10. 沸点Java笔试考核