`
周凡杨
  • 浏览: 230872 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

海量数据处理之一

阅读更多

                                                            

项目组里因为需要,现要开发一个数据过滤软件,针对文本文件 (txt 文件 ) ,文本文件里的数据是 11 位的手机号码,数据约有四千万行,进行数据过滤 ( 重复号码过滤,位数非 11 位的进行过滤 ) 尽量脱离数据库。而且要提速,太慢了客户不满意的。

 

   显然在内存里过滤数据是最快的,可是显然对于 2G 内存的本来说,可分配给 JAVA HAEP 的大小是容不下这么多数据的。那怎么办呢?

 

索引机制:

   首先的想到的是通过 Lucene 索引机制,循环判断目标文件里是否已经存在要写入的号码,若不存在,则写入文件。

             

思路很清晰,但效率不高,主要是索引的速度不高,三十万的数据约要十几分钟,这太慢了。四千万的数据两个小时也跑不出来。

 

 

分割文件:

4000 万的数据文件约 500M ,一个文件太大,那可以把它分割成小文件,这里我采用的是安手机号的号段进行分割,比如把以 135 开头的手机号码读入一个文件,把 136 的开头的读入另一个文件 这样实际情况下是行的通的,可是如果理想的情况下是不通的,因为如果文本文件里手机号码 90% 都是 135*** 那分割后的文件 135 的还是太大了,不过可以实行循环分割,把第一次分割后的文件再次分割(取四位号码分割),如果文件还大,循环分割

 

    经测试:

 

 * 371M 的文件(3000万的数据)  过滤数据耗时: 99844毫秒
 * 520M 的文件(4200万的数据)  过滤数据耗时: 369359毫秒
 

  6 分钟可以搞定 4000 万的数据,从这个耗时看,效率有了很大的提升。基本可以满足用户的需要了。

    那是不是可以更快呢?

 

 

分割法 ( 内存机制 )

     第一步 :循环读取文件一遍,取出所有数据的前三位,即号段存入 List ( 要滤重 )

第二步: 遍历 List 分别取出号段值 value ,再分别读取文件把数据是以 value 开头数据读入到 Set 中,当读文件结束时,写 Set 中的数据写入目标文件。

  经测试:

  

* 371M 的文件( 3000 万的数据)   过滤数据耗时 : 70672 毫秒
* 520M 的文件( 4200 万的数据)   过滤数据耗时 : 159016 毫秒 
 

 

2 多分钟可以搞定 4000 万的数据,从这个耗时看,效率有了很大的提升。已经可以满足用户的需要了。

    那是不是还可以更快呢?

 

  • 大小: 21.6 KB
2
1
分享到:
评论
10 楼 frank-liu 2013-03-14  
可以考虑对每个电话号码做这样的映射:文件名 = hashCode(str) % 10。这样所有重复的号码都会映射到同一个文件里。这里假设是将这个大文件划分成10个小文件。基本上每个文件足够小到可以装载到内存里利用hashMap等进行消重了。碰到文件还是够大的可以调整前面求模的数字或者再对文件按照前面的法子进行划分。
9 楼 周凡杨 2012-06-26  
lengyimeng 写道
博主,你的第一步是把文件的数据读一遍,然后把数据的前三位放入一个list中,然后再遍历这个list,通过这个list中的数据,即文件数据的前三位又再去读一遍文件,然后再通过set去重,为什么要读两遍数据,而且你把前三位拿出来又通过前三位去读文件拿数据是为什么呢,我记得好像String的subString方法比较耗资源,你这里拿前三位是用哪个方法。还有,最后一个疑问,为什么不直接一次性把数据读入一个linkedList中,然后再遍历一次放入set中啊?


数据量太大,一次性的把数据读入linkedList中,会内存溢出的!我第一次读取文件,取前三位,是要得到号段值。比如 135 136 是手机号码的号段。然后再读取文件就可以归类了,是根据已经得到的号段归类的,比如以135开头的数据为一类数据... 总体原理还是化大为小,实现数据过滤。
8 楼 lengyimeng 2012-06-25  
博主,你的第一步是把文件的数据读一遍,然后把数据的前三位放入一个list中,然后再遍历这个list,通过这个list中的数据,即文件数据的前三位又再去读一遍文件,然后再通过set去重,为什么要读两遍数据,而且你把前三位拿出来又通过前三位去读文件拿数据是为什么呢,我记得好像String的subString方法比较耗资源,你这里拿前三位是用哪个方法。还有,最后一个疑问,为什么不直接一次性把数据读入一个linkedList中,然后再遍历一次放入set中啊?
7 楼 周凡杨 2012-06-24  
eyes_on_you 写道
能把数据传上来测试下不

数据文件很大啊,几百M ,你可以自己写个点代码生成嘛
6 楼 eyes_on_you 2012-06-22  
能把数据传上来测试下不
5 楼 datawarehouse 2012-06-19  
哪里下载代码啊
4 楼 周凡杨 2012-06-19  
datawarehouse 写道
给出方法啊啊啊

思路和过程写的还不够明显吗? 源代码我这也有啊
3 楼 datawarehouse 2012-06-19  
给出方法啊啊啊
2 楼 周凡杨 2012-06-19  
huangsky 写道
博主是在2G的内存情况下完成这4000万的去重的吗?

是啊
1 楼 huangsky 2012-06-18  
博主是在2G的内存情况下完成这4000万的去重的吗?

相关推荐

    基于并行数据库的海量数据分析处理方法的研究

    随着计算机信息处理系统的迅速发展,传统的...最后在该方法的基础之上,提出了从数据读取到数据处理的整个算法流程,该算法大幅缩短了海量数据处理的时间,使得数据处理更加高效,在未来的发展中有较强的实用价值。

    C++算法之海量数据处理方法的总结分析

    海量数据处理中常用到的技术 1. Bloom Filtering基本的Bloom Filtering支持快速的插入和查找操作,是一种hash表技术。基本的数据结构非常简单,容量为m的位数组,k个hash函数,将输入的n个元素存储在位数组里面。...

    基于Hadoop的海量图象数据管理

    基于海量图像数据管理的新难题和新的解决方案不断被提出的背景,本文在 分析了海量图像数据的产生与应用的具体背景之后,根据...了Had00p系统的调优,使之适合于作为一个管理海量图像数据的新的海量图像 数据平台基础架构

    深入搜索引擎--海量信息的压缩、索引和查询.pdf

    《深入搜索引擎:海量信息的压缩、索引和查询》作为斯坦福大学信息检索课程的教材之一,具有一定的阅读难度,主要面向信息检索专业高年级本科生和研究生、搜索引擎业界的专业技术人员和从事海量数据处理相关专业的...

    大数据技术分享 大数据处理 互联网海量业务数据运维 共34页.pdf

    【目录】 ===海量运维带来的挑战和机会 一大数据时代到来 -挑战 一机会 ===如何做好海量运维 -质量 -成本 效率 ===海量运维之道 一先抗住再优化 一灰度发布 -更多.

    大数据处理过程.docx

    大数据时代处理之一:采集(获取) 大数据的采集是指利用多个数据库来接收发自客户端的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。 在大数据的采集过程中,其主要特点和挑战是并发数高,因为...

    深入搜索引擎--海量信息的压缩、索引和查询

    本书是斯坦福大学信息检索和...本书作为斯坦福大学信息检索课程的教材之一,具有一定的阅读难度,主要面向信息检索专业高年级本科 生和研究生、搜索引擎业界的专业技术人员和从事海量数据处理相关专业的技术人员。...

    秒杀99%的海量数据面试题

    “99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十...

    释放海量数据的潜能

    移动设备、从电子商务处理到地理空间信息,海量数据时代现已来临。海量数 据可以成为一个组织的最大资产,也可以成为其最严重的负累之一,这取决于 是否能在短期内实施到位的策略和解决方案,以处理数据量、复杂性、...

    从Hadoop框架与MapReduce模式中谈海量数据处理

    我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理。由此,最近凡是...

    深入搜索引擎——海量信息的压缩、索引和查询

    本书理论和实践并重,深入浅出地给出了海量信息数据处理的整套解决方案,包括压缩、索引和查询的方方面面。其最大的特色在于不仅仅满足信息检索理论学习的需要,更重要的是给出了实践中可能面对的各种问题及其解决...

    教你如何迅速秒杀掉:99%的海量数据处理面试题

    文摒弃绝大部分的细节,只谈方法/模式论,且注重用最...最后,有一点必须强调的是,全文行文是基于面试题的分析基础之上的,具体实践过程中,还是得具体情况具体分析,且场景也远比本文所述的任何一种场景复杂得多。

    SQL&NoSQL之辩,究竟谁更适海量数据处理

    SQL经历了时间的考验,目前已获得...执行大数据【注】项目的企业面对的关键决策之一是使用哪个数据库,SQL还是NoSQLSQL有着骄人的业绩,庞大的安装基础;而NoSQL正在获得可观的收益,且有很多支持者。我们来看看两位专

    大数据处理过程(1).docx

    大数据时代处理之一:采集(获取) 大数据的采集是指利用多个数据库来接收发自客户端的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。 在大数据的采集过程中,其主要特点和挑战是并发数高,因为...

    大数据处理的关键技术.docx

     Hadoop的HBase是大数据的数据管理技术的典型代表之一。HBase基于HDFS。作为NoSQL(Not only SQL)数据库,它们为应用提供数据结构化存储功能和类似数据库的简单数据查询功能,并为MapReduce 等并行处理方式提供数据...

    JPA整合达梦数据库实例

    2.DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上...

    大数据量处理的解决方案

    Style Intelligence敏捷商业智能平台中内存数据库的访问性能提高到传统关系型数据库管理系统(RDBMS)的十倍甚至数十倍;而在内存的使用上,却是...这一技术为支持海量数据处理,实时海量数据分析奠定了坚实的基础。

    深入搜索引擎--海量信息的压缩索引和查询.part2(共6部分)

    众所周知,海量数据处理是搜索引擎最耀眼的核心技术之一,本书准确和系统地阐明了海量数据处理中压缩、索引和查询的理论、技术和实现,由此奠定了其搜索引擎圣经的美名,至今对学术界和行业界都产生着巨大的影响。...

    深入搜索引擎--海量信息的压缩索引和查询.part4(共6各部分)

    众所周知,海量数据处理是搜索引擎最耀眼的核心技术之一,本书准确和系统地阐明了海量数据处理中压缩、索引和查询的理论、技术和实现,由此奠定了其搜索引擎圣经的美名,至今对学术界和行业界都产生着巨大的影响。...

Global site tag (gtag.js) - Google Analytics