`
周凡杨
  • 浏览: 234558 次
  • 性别: 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万的去重的吗?

相关推荐

    海量数据处理方法

    海量数据处理方法 海量数据处理是指基于海量数据上的存储、处理、操作,解决方案包括巧妙的算法搭配适合的数据结构,如 Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie 树,以及大而化小、分而治之的策略。...

    hadoop海量数据处理详解与项目实战

    由于给定的文件内容部分涉及到PDF电子书的提供信息,并非技术知识点,故这部分内容将被忽略,重点将放在标题与描述所提到的Hadoop海量数据处理技术上。 Hadoop是一个由Apache软件基金会开发的开源框架,旨在支持...

    面向高性能计算机的海量数据处理平台实现与评测.pdf

    随着时代的进步和科学的发展,高性能计算机已经成为海量数据处理的关键技术之一。高性能计算机的独特性质使其能够提供高效的处理速度和存储能力,从而满足海量数据处理的需求。 在高性能计算机的发展中,科学计算机...

    基于人工智能的海量数据处理技术研究.pdf

    为了高效处理这些数据,以人工智能(AI)为基础的海量数据处理技术的研究显得尤为重要。 首先,AI在海量数据处理中的应用体现在对数据进行自适应分组的技术上。传统的数据搜索技术往往效率低下,尤其是在数据量庞大...

    常见的海量数据处理方法

    ### 常见的海量数据处理方法 在大数据时代,如何高效、准确地处理海量数据是许多企业和组织面临的关键挑战之一。本文将详细介绍几种实用的数据处理方法,包括但不限于算法优化和技术选择,旨在帮助读者更好地理解和...

    基于MatLab的海量数据处理方法.pdf

    在进行海量数据处理时,可以通过扩大内存空间、采用短字节数值数据类型等方法来建立大容量矩阵,从而缩短数据处理时间。通过算例分析,可以验证当分配更多的内存给数据矩阵时,数据处理所需的时间会显著减少。这种...

    基于Hadoop的海量数据处理模型研究和应用.pdf

    本文主要探讨了基于Hadoop的海量数据处理模型的设计与应用,以解决这一问题。 首先,Hadoop作为开源的分布式计算框架,为处理大规模数据提供了解决方案。Hadoop的核心组件包括HDFS(Hadoop Distributed File System...

    海量数据处理

    #### 一、海量数据处理概述 在当前的大数据时代,数据量的急剧增长使得传统的数据处理技术面临着前所未有的挑战。海量数据处理是指在合理的时间内,对大规模数据集进行高效存储、管理和分析的技术过程。这种处理...

    Hadoop海量数据处理:技术详解与项目实战 pdf

    根据提供的文件信息,我们可以聚焦于标题和描述中的关键信息来生成相关的IT知识点,尤其是关于Hadoop海量数据处理的技术详解。 ### Hadoop海量数据处理:技术详解与项目实战 #### Hadoop简介 Hadoop是一个能够对...

    面向海量数据处理的数据密集型计算发展研究.pdf

    综上所述,数据密集型计算是当前大数据时代的关键技术之一,它涉及数据处理、分析和管理等多个方面。随着数据量的持续增长,这一领域将持续发展,创新技术将不断涌现,以满足不断升级的数据处理需求。对于IT专业人士...

    浅谈海量数据处理技巧.pdf

    数据库设计是海量数据处理的关键之一。文中提到,数据的分表存储可以减少大量的查询时间,数据量越庞大,效果越明显。例如,对北美贸易数据,可以按照时间这一维度,把数据分表存储。 索引的创建是海量数据处理的另...

    海量数据处理面试题.pdf

    在当前的大数据时代,海量数据处理技术已成为IT行业的重要技术之一。面试中,关于海量数据处理的问题往往占据着举足轻重的地位,特别是在涉及秒杀系统、高并发处理和多线程应用的场景中。本文件《海量数据处理面试题...

    hadoop海量数据处理.pdf

    《Hadoop海量数据处理》是关于大数据领域的重要参考资料,它主要聚焦在利用Hadoop框架进行大规模数据处理的技术和实践。Hadoop是Apache软件基金会开发的一个开源项目,旨在提供分布式、容错性强的系统,用于存储和...

    大数据量,海量数据 处理方法总结

    ### 大数据量,海量数据处理方法总结 在IT领域,特别是大数据分析、数据库管理和算法设计方面,处理海量数据的能力是至关重要的技能之一。本文旨在总结处理大数据量、海量数据的有效方法,涵盖从理论基础到实际应用...

    文件系统技术内幕:大数据时代海量数据存储之道.docx

    文件系统技术内幕:大数据时代海量数据存储之道 大数据时代的到来带来了海量数据的挑战,如何高效、可靠地存储和管理这些数据成为企业和组织面临的重要问题。文件系统技术作为信息管理的重要组成部分,在海量数据...

    地质灾害海量监测数据处理方法研究.pdf

    通过建立地质灾害监测数据调试系统,研究者可以利用数据挖掘算法,如分类、聚类、预测模型等,从海量数据中挖掘出有助于地质灾害预测、预警和减灾决策的知识和信息。 最终,研究者开发了地质灾害监测数据展示平台,...

    海量数据处理平台体系架构分析

    ### 海量数据处理平台体系架构分析 #### 一、引言 随着互联网技术的飞速发展,人类社会正经历着前所未有的数据爆炸时代。这些数据不仅数量巨大,而且种类繁多,包括文本、图像、视频等多种形式。如何有效地管理和...

    基于Hadoop的PB级海量数据处理系统的设计与实现.pdf

    文章《基于Hadoop的PB级海量数据处理系统的设计与实现》详细介绍了如何利用Hadoop技术搭建集群平台,用以应对PB级海量数据的存储和处理问题。搭建的集群平台显著提升了系统处理海量数据的能力,具体体现在对1PB级别...

    海量数据处理技术的发展与相关问题探究.pdf

    海量数据处理技术的发展,对于提高信息的使用效率,推动企业业务发展,具有不可估量的价值。 海量数据的发展历程与现状主要反映了信息化时代下,数据量急剧增加,处理这些数据的需求也随之增长。信息技术的进步使得...

Global site tag (gtag.js) - Google Analytics