一种海量数据的处理方法

文档序号:6650546阅读:207来源:国知局
专利名称:一种海量数据的处理方法
技术领域
本发明属于数据处理领域,尤其涉及一种海量数据进行存储、检索处理的方法。
背景技术
在通信、气象和金融等技术领域中存在着对海量数据的分析和检索需求,由于数据量本身的庞大,在存储、检索以及分析这些数据的过程中,执行效率以及空间开销是无法回避的技术瓶颈。
在现有技术中,一种方法是通过设计一个高效的并行算法,使用高性能的并行处理机制来实现最终数据的存储、检索和分析,诸如大型机系统或者分布式计算系统,主要通过高性能的硬件以及结合优良的并行分布算法来解决海量数据的处理性能瓶颈。这种方法虽然实施比较简单,技术风险也相对比较小,但由于大型的并行处理机或者分布式计算系统成本很高,维护复杂,对于使用低端设备的用户来说是可望而不可及的。另外,不可预知的数据处理量增加导致硬件系统的升级,也会不断增加系统的成本。
第二种方法是在海量数据处理前先主观确定一个标准,然后根据该标准将数据进行无量纲化以及归一化处理,通过数据预处理可将数据类型化、序列化,甚至可以通过特定的算法将原始数据进行转化,已达到缩小数据处理规模以及复杂度的目的。这种方法方案抽象程度较高,有较好的灵活性和处理能力,但常常导致运算结果不仅含有诸多主观因素,而且在运算前就改动了数据的原始性。另外,通常这类方法运算相对复杂,难以被一般技术人员掌握。同时,大部分海量数据对象的抽象有一定的难度,具有很高的数据建模要求。
第三种方法是使用数据仓库和数据挖掘技术,它在一定程度上包含第二种技术方案,是一种面向主题的、集成而且稳定的、随时间不断变化的数据集和技术。这种方法能够很好的解决海量数据处理的问题,但由于实施环境的信息化基础设备相对不太完善、数据仓库的价格居高不下、管理机制和技术人才缺乏、数据积累不充分以及数据挖掘工具本身不成熟等原因难以广泛获得推广。
综上所述,现有技术在对海量数据进行处理时,普遍存在实现成本较高,实现过程复杂等缺点,难以满足用户的实际应用需要。

发明内容
本发明的目的在于提供一种数据处理方法,旨在解决对海量数据进行处理时,实现成本较高,实现过程复杂的问题。
本发明的发明目的是这样实现的,一种海量数据的处理方法,所述方法包括下述步骤A.接收请求处理的源数据,将所述源数据分块存入源数据队列;B.对所述源数据队列中的数据块进行处理,将源数据转换为目标数据;C.将所述目标数据存入数据库。
所述步骤A进一步包括提取所述源数据的原始信息,根据所述原始信息将所述源数据分块处理,所述原始信息包括所述源数据数据包的大小、时间或帧头附加信息。
所述步骤A进一步包括当源数据队列达到最大水位时,缓存溢出的数据,并在源数据队列空闲时,将缓存的数据补充进源数据队列。
所述缓存溢出的数据的步骤进一步包括将溢出的数据放入在内存中设置的缓冲器,当缓冲器满后将数据写入外部存储介质进行缓存。
所述步骤B进一步包括通过多个线程对所述源数据队列进行并行轮询处理,每个线程以源数据块为单位,将轮询获取的源数据块转换为目标数据。
所述步骤B进一步包括在将源数据转换为目标数据的过程中,将多个源数据压缩封装为一个目标数据,并将所述目标数据存入目标数据队列。
所述步骤C进一步包括设置存储所述目标数据的数据表,以及对所述数据表进行索引的索引表。
所述方法进一步包括D.对数据库进行定时配置和维护。
所述步骤D进一步包括根据数据表时间定期对数据表进行合并和删除,以及定期清理数据库日志。
所述步骤C进一步包括设置单页显示记录数,在用户查询数据时,根据设置的单页显示记录数和用户查询的数据总记录数,向用户分页输出查询记录。
本发明在海量数据的处理过程中,通过对应用处理逻辑以及数据库存储操作进行优化,提升了整个应用系统对海量数据的吞吐能力,实现简单,成本低。


图1是本发明提供的数据处理方法的实现流程图;图2是本发明中源数据和目标数据的压缩封装比例示意图。
具体实施例方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明通过对请求处理的源数据进行队列缓存、并行逻辑处理等批处理过程,提高海量数据处理的效率,同时采用分表存储以及分页输出等优化数据库的存储结构,提高海量数据的检索查询效率。
图1示出了本发明提供的数据处理方法的实现流程,详述如下1.将源数据分块放入源数据队列在实际海量数据的应用环境中,源数据总是一批一批、源源不断地上报,由于整个系统的硬件资源有限,难以做到到达一批数据就启动一个线程对数据进行处理。同时,为了避免丢失数据以及降低系统效率,需要对被阻塞的数据进行管理。因此,在本发明中,请求处理的源数据到达后,并不立即进行分析处理,而是提取源数据的原始信息,例如源数据数据包的时间、大小以及帧头的一些附加信息等,根据这些原始信息将源数据分簇(块),然后将源数据块放到源数据队列中,以提升后续应用处理逻辑的效率。
通过将源数据放入源数据队列缓存,一方面可以把请求的源数据组织成块,每个线程以块为单位来进行逻辑处理,通过块大小以及线程数的配置调节,可以达到CPU以及内存的最大利用率;另一方面,通过源数据队列对请求数据的管理,包括阻塞控制、缓存控制等能有效的防止数据丢失,同时队列本身良好的数据出队入队控制也能在很大程度上提升系统效率。尤其对于请求数据具有严格的时序处理要求的应用,队列是再合适不过的数据预存容器。
2.溢出数据的缓存和补充作为本发明的一个优选实施例,当请求处理的源数据到达后,如果源数据队列已经到达最大水位(队列已满),为了防止数据丢失,需要把溢出的数据缓存到磁盘、磁带等外部存储介质中,当源数据队列有空闲时,再将数据从外部存储介质载入源数据队列处理。
在对外部介质进行溢出缓存的读写时,为了提升外部存储介质的使用效率,从源数据队列溢出的数据并不直接写入到外部介质中,而先写入到内存中设置的一个缓冲器,缓冲器的大小可配置,例如为了达到最优读写效率,基本与源数据块的大小一致,等到缓冲器满后,再将源数据写入外部存储介质。相应地,当源数据队列空闲时,将外部存储介质中的源数据按块为单位写入内存。
3.对源数据队列进行多线程并行处理,将源数据转换为目标数据在本发明中,每一个线程都是一个独立的数据处理应用逻辑,每个线程以源数据块为单位来进行逻辑处理。每个线程实时轮询源数据队列,从源数据队列中获取一块源数据进行处理,转换成目标数据。
线程数目可以与源数据队列的大小以及整个系统的实际资源状况相结合灵活、合理配置,以发挥整个系统的最大效率。一般来说,线程数目与源数据的数据块大小成反比,数据块越大,所需的线程数就越少,反之数据块越小,所需的线程数就要相应增加。同时,线程数目与源数据的数据块大小的配置关系取决于硬件环境,是空间和效率的取舍关系,如果硬件执行效率比较高(CPU比较快),就可以多开一些线程,节省内存的存储空间,如果CPU性能较低,就需要采取空间换效率的措施,少开一些线程。
当线程对源数据队列进行轮询时,如果当前线程轮询不到数据,就不作处理;如果轮询到的数据不满一块,线程在超时时间进行等待,如果到达超时时间,仍然不能凑足一块数据,就按当前获得的数据进行处理。
4.将目标数据放入目标数据队列作为本发明的一个实施例,为了减少外设I/O(输入/输出)次数和系统开销,在将目标数据存入数据库前,先放入目标数据队列进行缓存。
目标数据队列与源数据队列并不具有一一对应的关系。在本发明中,在源数据块转变为目标数据的过程中,按照一定的比例将源数据进行压缩组装,将若干个源数据进行逻辑处理后封装到一个目标数据中,例如将源数据转变成批插入SQL语句等,以减少目标数据后续存储的开销,同样的一次磁盘访问,可以存储更多的数据,也从一定程度上缓解了数据库连接等访问资源的争夺。
目标数据队列同样也有最大、最小水位,它的最大水位一定程度上决定了整个系统瞬时的数据容纳能力,但通过将源数据到目标数据压缩组装以及合理地设置目标数据列表的水位,可以解决整个系统瞬时的数据容纳能力。
图2示出了源数据和目标数据压缩封装比例的示意,n的大小视实际情况而定,一般同源数据一块的大小(也就是一个线程处理的源数据规模)相等是比较合适的,而目标数据队列的最大水位需根据实际的逻辑处理线程数确定,一般以实际线程数的3-5倍比较适宜,太高会造成内存空间的浪费,太低容易引起系统内部数据通路的堵塞。
5.将目标数据存入数据库作为本发明的一个实施例,目标数据在数据库的存储采用分表存储的方式。首先,要确定一张数据库表的存储上限,达到上限后需要新建表存储。相应的,由于通过多个数据表存储数据,为了能够更快地找到对应数据所在的数据表,建立索引表,对所有的数据表进行索引。索引表可以根据多种参数建立,比如根据时间字段,可以建立一张数据表和时间的索引表,这种数据表设计方案,需要严格要求表数据的存放,如上所述的时间表索引,就要求每张数据表中数据的时间字段一定要落在索引表对应记录的起始终止时间之间,而不允许别的时间段的数据存放到本表中。通过索引表,对数据库的查询就可以将范围缩小到一张或几张数据表中,而不是整个数据表的集合,从而提高了数据的查询速度。
同时,对于数据表中的字段,按照查询检索的实际场景,对于一些常用查询的关键字段可以建立各级数据库索引,可以在一定范围内显著地提高数据的查询效率。
在实际海量数据的检索过程中,一次查询的数据量往往比较大,不适合一次性显示给用户。作为本发明的一个优选实施例,首先配置用户单页显示的数据记录个数,在数据库接受到查询请求以后,先在数据库中计算本次查询请求的规模(记录总数),然后通过查询到的数据规模以及已经配置的单页显示记录数,可以计算出本次查询一共要分多少页显示,然后一次只从数据库查询一页的数据显示给用户,同时记住本次查询的起始和终止位置,以供后续上/下翻页查询使用。采用这种分页方法,减少了单次查询的数据规模,降低了对系统的性能要求,而且查询手段较为灵活,不需要系统为缓存查询出来的数据提供额外的开销。
6.对数据库进行定时配置和维护。
由于数据库的数据存储量庞大,为了提高数据库的存储效率,本发明对数据库定时进行维护,例如定期对数据表进行合并和删除,对一些时间比较久的数据表可以将其合并,以减少数据查询过程中数据表的调用开销,同时删除一些已经超出保活期的数据表。另外,还可以定期清理数据库的日志,释放数据库空间,以保持数据库的运行活力。
综上所述,本发明利用程序建模、数据建模以及数据库使用上的一些优化操作来构成海量数据存储检索的解决方案,实现成本和复杂度比较低,可以作为其他高成本、高复杂度解决方案,例如数据仓库的一种替代方案,尤其适用于解决中小企业级应用过程中海量数据的处理,并可以作为海量数据存储检索的设计参照模型。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种海量数据的处理方法,其特征在于,所述方法包括下述步骤A.接收请求处理的源数据,将所述源数据分块存入源数据队列;B.对所述源数据队列中的数据块进行处理,将源数据转换为目标数据;C.将所述目标数据存入数据库。
2.如权利要求1所述的海量数据的处理方法,其特征在于,所述步骤A进一步包括提取所述源数据的原始信息,根据所述原始信息将所述源数据分块处理,所述原始信息包括所述源数据数据包的大小、时间或帧头附加信息。
3.如权利要求1所述的海量数据的处理方法,其特征在于,所述步骤A进一步包括当源数据队列达到最大水位时,缓存溢出的数据,并在源数据队列空闲时,将缓存的数据补充进源数据队列。
4.如权利要求3所述的海量数据的处理方法,其特征在于,所述缓存溢出的数据的步骤进一步包括将溢出的数据放入在内存中设置的缓冲器,当缓冲器满后将数据写入外部存储介质进行缓存。
5.如权利要求1所述的海量数据的处理方法,其特征在于,所述步骤B进一步包括通过多个线程对所述源数据队列进行并行轮询处理,每个线程以源数据块为单位,将轮询获取的源数据块转换为目标数据。
6.如权利要求1所述的海量数据的处理方法,其特征在于,所述步骤B进一步包括在将源数据转换为目标数据的过程中,将多个源数据压缩封装为一个目标数据,并将所述目标数据存入目标数据队列。
7.如权利要求1所述的海量数据的处理方法,其特征在于,所述步骤C进一步包括设置存储所述目标数据的数据表,以及对所述数据表进行索引的索引表。
8.如权利要求7所述的海量数据的处理方法,其特征在于,所述方法进一步包括D.对数据库进行定时配置和维护。
9.如权利要求8所述的海量数据的处理方法,其特征在于,所述步骤D进一步包括根据数据表时间定期对数据表进行合并和删除,以及定期清理数据库日志。
10.如权利要求1所述的海量数据的处理方法,其特征在于,所述步骤C进一步包括设置单页显示记录数,在用户查询数据时,根据设置的单页显示记录数和用户查询的数据总记录数,向用户分页输出查询记录。
全文摘要
本发明适用于数据处理领域,提供了一种海量数据的处理方法,所述方法包括下述步骤A.接收请求处理的源数据,将所述源数据分块存入源数据队列;B.对所述源数据队列中的数据块进行处理,将源数据转换为目标数据;C.将所述目标数据存入数据库。本发明在海量数据的处理过程中,通过对应用处理逻辑以及数据库存储操作进行优化,提升了整个应用系统对海量数据的吞吐能力,实现简单,成本低。
文档编号G06F17/30GK1858735SQ20051012146
公开日2006年11月8日 申请日期2005年12月30日 优先权日2005年12月30日
发明者陈辉, 周翔, 王健 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1