数据遍历方法及装置与流程

文档序号:12177034阅读:362来源:国知局
数据遍历方法及装置与流程
本申请涉及数据处理领域,具体而言,涉及一种数据遍历方法及装置。
背景技术
:在数据库操作中,经常需要对数据库中已存有的数据进行遍历。例如,在数据库中,存储有一周的用户访问数据,在现实工作中,需要对这一周中每天的用户访问数据分别进行统计。由于数据库中已存储的一周数据,往往是杂乱无章的,因此,需要对这一周的数据逐条进行读取,以分析每一条数据的生成日期,进而对每天的用户访问数据进行统计。在相关技术中,一般采用数据库游标(cursor)对数据库中存储的数据进行遍历。游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。该方法能够实现对数据库存储的数据的遍历,但是在需要遍历的数据量较大时,执行的效率较低;并且,通过游标进行数据遍历时,编写的程序较为复杂,可操作性较差。针对相关技术中在进行数据遍历时执行效率低的问题,目前尚未提出有效的解决方案。技术实现要素:本申请实施例提供了一种数据遍历方法及装置,以至少解决相关技术中在进行数据遍历时执行效率低的技术问题。根据本申请实施例的一个方面,提供了一种数据遍历方法,包括:获取待遍历数据集合,其中,待遍历数据集合包括多条数据;将多条数据分别存储至预设表中不同ID对应的存储地址;以及根据ID对预设表中存储的多条数据进行遍历。进一步地,将多条数据分别存储至预设表中不同ID对应的存储地址包括:将多条数据依次存储至预设表中,其中,每向预设表中存储一条数据,则对应存储该数据的存储地址生成一个ID,按照ID的生成次序,生成的ID依次增大。进一步地,根据ID对预设表中存储的多条数据进行遍历包括:按照ID由小到大的次序,依次读取各个ID对应的存储地址内存储的数据,直到读取到最大ID对应的存储地址内存储的数据,其中,最大ID为生成的ID中的最大值。进一步地,生成的第一个ID为1,相邻生成的ID的差值为1。进一步地,将多条数据分别存储至预设表中不同ID对应的存储地址包括:将多条数据分别存储至预设表中不同的存储地址;以及对应不同的存储地址生成不同的ID。根据本申请实施例的另一方面,还提供了一种数据遍历装置,包括:获取单元,用于获取待遍历数据集合,其中,待遍历数据集合包括多条数据;存储单元,用于将多条数据分别存储至预设表中不同ID对应的存储地址;以及遍历单元,用于根据ID对预设表中存储的多条数据进行遍历。进一步地,存储单元包括:第一存储模块,用于将多条数据依次存储至预设表中,其中,每向预设表中存储一条数据,则对应存储该数据的存储地址生成一个ID,按照ID的生成次序,生成的ID依次增大。进一步地,遍历单元包括:读取模块,用于按照ID由小到大的次序,依次读取各个ID对应的存储地址内存储的数据,直到读取到最大ID对应的存储地址内存储的数据,其中,最大ID为生成的ID中的最大值。进一步地,生成的第一个ID为1,相邻生成的ID的差值为1。进一步地,存储单元包括:第二存储模块,用于将多条数据分别存储至预设表中不同的存储地址;以及生成模块,用于对应不同的存储地址生成不同的ID。在本申请实施例中,包括以下步骤:获取待遍历数据集合,其中,待遍历数据集合包括多条数据;将多条数据分别存储至预设表中不同ID对应的存储地址;以及根据ID对预设表中存储的多条数据进行遍历,解决了相关技术中在进行数据遍历时执行效率低的问题,进而通过将多条数据存储至预设表中,根据ID对预设表中存储的多条数据进行遍历,达到了提高数据遍历的执行效率的技术效果。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1是根据本申请第一实施例的数据遍历方法的流程图;图2是根据本申请第二实施例的数据遍历方法的流程图;以及图3是根据本申请实施例的数据遍历装置的示意图。具体实施方式为了使本
技术领域
的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。根据本申请实施例,提供了一种数据遍历方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图1是根据本申请第一实施例的数据遍历方法的流程图,如图1所示,该方法包括如下步骤:步骤S102,获取待遍历数据集合,其中,待遍历数据集合包括多条数据。在数据库操作中,经常需要进行数据的遍历。其中,待遍历数据集合可以是对数据库中预先存储的数据进行查询,得到的查询结果。例如,在数据库中,存储有一周(2015年7月1日至7月7日)的原始用户访问数据,其中,在原始用户访问数据中,每天的用户访问数据可能包括多条或者一条。假设在实际工作过程中,需要对每天的用户数据进行统计,则对数据库中存储的原始用户访问数据进行查询,可以得到查询结果,即待遍历数据集合,包括数据为:2015.7.1、2015.7.2、2015.7.3、2015.7.4、2015.7.5、2015.7.6、2015.7.7共七条数据。对待 遍历数据集合中的数据逐条进行遍历时,每读取到一条数据可以对应该数据执行相应的操作。例如,对于上述待遍历数据,当遍历到第一条数据2015.7.1,则可以查找原始用户访问数据中访问时间为2015.7.1的用户访问数据。再举例说明。在数据库中,存储有多个独立用户的消费数据,通过查询该数据库,可以获取到独立用户IP分别为IP1、IP2和IP3,也即待遍历数据集合包括数据IP1、IP2和IP3共三条数据。在对待遍历数据集合中的数据逐一进行遍历时,每读取到一条数据则可对应该数据执行相应的操作。例如,对于上述的待遍历数据,需要获取每个独立用户IP的消费量,则针对第一条数据IP1,可获取多个独立用户的消费数据中IP1的消费数据,并根据IP1的消费数据计算该用户的消费量。需要说明的是,本申请不对待遍历数据集合中数据的类型、数据量等做具体的限定。步骤S104,将多条数据分别存储至预设表中不同ID对应的存储地址。将多条数据分别插入至预设表的不同的存储地址,不同的存储地址对应不同的ID。例如,待遍历数据集合为原始数据中存储时间在2015.1.1之前的数据,将这些数据逐条分别存储至预设表中不同ID对应的存储地址。在该实施例中,预设表可以是根据待遍历数据集合创建的一个临时表,可以将待遍历数据集合插入至该临时表中。步骤S106,根据ID对预设表中存储的多条数据进行遍历。根据ID对预设表中存储的多条数据进行遍历,将整个数据遍历的过程中的变量数字化(也即ID的变化),遍历的逻辑变得更加简单,可通过简单的循环语句实现,有效减小了查询结果遍历中代码编写的复杂性,提高了数据遍历的执行效率。根据该实施例的数据遍历方法,由于包括:获取待遍历数据集合,其中,待遍历数据集合包括多条数据;将多条数据分别存储至预设表中不同ID对应的存储地址;以及根据ID对预设表中存储的多条数据进行遍历,解决了相关技术中在进行数据遍历时执行效率低的问题,进而通过将多条数据分别存储至预设表中不同ID对应的存储地址,并根据ID对预设表中存储的多条数据进行遍历,达到了提高数据遍历的执行效率的技术效果。可选地,将多条数据分别存储至预设表中不同ID对应的存储地址包括:将多条数据依次存储至预设表中,其中,每向预设表中存储一条数据,则对应存储该数据的存储地址生成一个ID,按照ID的生成次序,生成的ID依次增大。在该实施例中,每将一条数据存储至预设表中的一个存储地址,则对应该存储地 址生成一个ID。其中,上述多条数据的总条数和预设表中存储地址的个数相等。伴随多条数据的存储,动态生成不同存储地址对应的ID。优选地,可以以临时表的自增列的形式生成ID。例如,待遍历数据集合中包括10条数据。第一条数据存储至预设表中的第一存储地址,对应该存储地址生成ID为1;将第二条数据存储至预设表中的第二存储地址,对应第二存储地址生成ID为2;依此类推,直到第十条数据存储至预设表中的第十存储地址,对应第十存储地址生成ID为10。通过采用自增列的方式,对应预设表中新的存储地址自动生成新的ID,有效提高了ID的生成效率。为了便于后期对存储至预设表中数据的处理(管理),可以预先设定ID的生成规则:按照ID生成的时间次序,生成的ID依次增大。优选地,生成的第一个ID为1,相邻生成的ID的差值为1。需要说明的是,为了满足实际需求也可以设置其他类型的ID,例如,按照ID的生成次序,生成的ID依次为ID=1、3、5。本申请不对ID的具体形式进行限定。优选地,根据ID对预设表中存储的多条数据进行遍历包括:按照ID由小到大的次序,依次读取各个ID对应的存储地址内存储的数据,直到读取到最大ID对应的存储地址内存储的数据,其中,最大ID为生成的ID中的最大值。该实施例可以通过循环语句来实现。在将待遍历数据集合存储入预设表后,记最大ID为MaxId。声明变量CurrentId,默认值为1。比较CurrentId和MaxId的大小,如果CurrentId<=MaxId,则获取预设表中ID等于CurrentId的存储地址内存储的数据;否则结束。通过该实施例,可以将数据遍历的过程有效简化为通过一个循环语句即可实现,有效提高了数据遍历的效率。可选地,将多条数据分别存储至预设表中不同ID对应的存储地址包括:将多条数据分别存储至预设表中不同的存储地址;以及对应不同的存储地址生成不同的ID。在该实施例中,提供了生成预设表ID的另外一种方式,即在将多条数据全部存储至预设表中之后,再对应各个存储地址分别生成ID。其中,上述多条数据的总条数和预设表中存储地址的个数相等。该方法可以有效地为预设表中不同的存储地址生成ID。下面通过两个具体的应用场景来对根据本申请实施例的数据遍历方法进行说明。场景一:假设数据库中存储有两张表,记为表A和表B。表A为广告曝光的原始数据,包括广告每次曝光的时间、IP地址等信息,表B为广告曝光的汇总数据,即广告在每个小时中的曝光次数、每个小时中独立IP的数量等。由于向表A中新录入了一批数据,因此需要根据表A中新录入的数据更新表B的数据。表1中提供的数据为表A中新录 入的数据。表1DateTime(精确到秒)IP2015-7-2500:00:0010.10.20.202015-7-2500:00:0110.10.20.202015-7-2500:00:0210.10.20.202015-7-2501:00:0010.10.20.202015-7-2501:00:0110.10.20.212015-7-2505:00:0210.10.20.202015-7-2600:00:0210.10.20.202015-7-2600:00:0210.10.20.21假设实际工作中,需要以小时为单位,统计新录入的数据中独立IP的数量,并利用该统计结果对表B进行更新。则首先根据表1获取待遍历数据,也即查询表1中以小时为单位的不重复的时间数据(DateTime列)。根据表1可以获取到待遍历数据集合如下:2015-7-2500:00:00、2015-7-2501:00:00、2015-7-2505:00:00、2015-7-2600:00:00。下面对待遍历数据集合执行遍历。首先将待遍历数据集合中包括的各条数据分别插入至预设表的不同的存储地址,并且不同的存储地址分别对应不同的ID。表2提供了预设表的字段及其相应的说明。表2字段说明ID自增字段DateTime精确到小时的时间表3为根据待遍历数据集合得到的预设表。表3IDDateTime(精确到小时)12015-7-2500:00:0022015-7-2501:00:0032015-7-2505:00:0042015-7-2600:00:00其次,对预设表中的数据逐条进行遍历。可声明一个变量CurrentId,用来标记当前需要遍历的数据对应的ID。逐一获取预设表中ID为CurrentId的存储地址内存储的数据。如从CurrentId=1开始,获取ID为1的存储地址内的数据为2015-7-2500:00:00;CurrentId加1,并判断当前的ID是否超过最大ID(也即4),如果没有超过,则获取CurrentId加1之后的ID对应的存储地址内的数据,直到CurrentId达到最大ID,结束遍历。每获取到预设表中一个ID对应的存储地址内存储的数据,可以根据该数据执行相应的操作。在该实施例中,需要根据表A中新录入的数据中独立IP的数量更新表B的数据。因此,在读取到ID为1的数据(也即2015-7-2500:00:00)时,统计表1中与2015-7-2500:00:00在同一个小时内的数据中独立用户的数量,并利用该统计结果更新表B。依次类推,直到根据ID为4的存储地址内的数据统计表1中相应时间段内的独立用户数。表4提供了该场景下独立用户数的统计结果。表4DateTime(精确到小时)UIP(独立IP数)2015-7-2500:00:0012015-7-2501:00:0022015-7-2505:00:0012015-7-2600:00:002另外,如果实际工作中,需要以小时为单位,统计新录入的数据中广告曝光的次数,并利用该统计结果对表B进行更新。基于相同的遍历方法,可以得到图5所示的 数据,图5提供了广告曝光次数的统计结果。表5DateTime(精确到小时)Impress(曝光数)2015-7-2500:00:0032015-7-2501:00:0022015-7-2505:00:0012015-7-2600:00:002场景二:假设存在一个订单处理系统,该系统随时都可能接收到新的订单。假设订单信息存放在A表中,系统会每分钟对待处理的订单进行处理,处理流程为:1、判断订单是否有效;2如果判断出订单有效,则将订单放入表B中(有效订单表),等待进一步的处理;如果判断出订单无效,则不作任何处理;3、将订单信息写入到表C(订单历史表)中。从A表中查询前一分钟的订单信息,并将查询结果集(待遍历数据集合)插入预设表中,其中,每条数据存储至预设表中的一个存储地址,不同的存储地址对应不同的ID。表6提供了该场景下预设表的字段及其相应的说明。表6下面对预设表中的数据进行遍历。声明一个变量CurrentId=1,用来标记待处理的订单编号。获取ID为CurrentId的记录,即获取编号为CurrentId的订单信息。如当CurrentId=1时,获取的为第一个订单信息。然后将CurrentId加1,继续读取,直达读取到最大ID的存储地址内存储的订单信息。针对遍历出的每一条数据,可执行的具体操作包括:判断订单信息是否有效;如 果判断出订单有效,则将订单插入表B中(有效订单表),等待进一步的处理;如果判断出订单无效,则不作处理;将订单信息写入到表C(订单历史表)中。图2是根据本申请第二实施例的数据遍历方法的流程图,该实施例可以作为图1所示实施例的一种优选实施方式。如图2所示,该方法包括如下步骤:步骤S202,创建预设表。该实施例中预设表可以为具有自增列的临时表。步骤S204,将待遍历数据集合写入预设表。步骤S206,声明变量CurrentId(初始默认值为1)。步骤S208,判断CurrentId是否小于等于MaxId。MaxId即为待遍历数据集合中数据的类别数,类别可根据用户需求自行设定。步骤S210,如果判断出CurrentId小于等于MaxId,则获取ID为CurrentId的存储地址内的数据。步骤S212,根据数据执行相应操作。在该步骤中根据数据执行相应操作,即根据ID为CurrentId的存储地址内的数据执行相应的操作,例如,根据表A中新录入的数据(包括ID为CurrentId的存储地址内的数据)更新表B内的数据。步骤S214,CurrentId加1,并继续执行步骤S208。如果判断出CurrentId小于等于MaxId,则重复执行步骤S210至步骤S212,直到CurrentId超过MaxId。步骤S216,如果判断出CurrentId超过了MaxId,则结束遍历。根据该实施例的数据遍历方法,引入了预设表(临时表)和自增列(ID),采用简单的循环语句便可实现数据遍历,可以极大地提高数据遍历的效率(尤其是在需要遍历数据的数据量较大时),并且该方法简化了编写代码,具有普遍适用性。下面根据本申请实施例,还提供了一种数据遍历装置。需要说明的是,根据本申请实施例的数据遍历装置可以用于执行根据本申请实施例的数据遍历方法,根据本申请实施例的数据遍历方法也可以通过根据本申请实施例的数据遍历装置来执行。图3是根据本申请实施例的数据遍历装置的示意图。如图3所示,该装置包括:获取单元20、存储单元40和遍历单元60。获取单元20,用于获取待遍历数据集合,其中,待遍历数据集合包括多条数据。存储单元40,用于将多条数据分别存储至预设表中不同ID对应的存储地址。遍历单元60,用于根据ID对预设表中存储的多条数据进行遍历。根据本申请实施例的数据遍历装置,由于包括:获取单元20,用于获取待遍历数据集合,其中,待遍历数据集合包括多条数据;存储单元40,用于将多条数据分别存储至预设表中不同ID对应的存储地址;以及遍历单元60,用于根据ID对预设表中存储的多条数据进行遍历,解决了相关技术中在进行数据遍历时执行效率低的问题,进而通过存储单元40将多条数据分别存储至预设表中不同ID对应的存储地址,遍历单元60根据ID对预设表中存储的多条数据进行遍历,达到了提高数据遍历的执行效率的技术效果。可选地,存储单元40包括:第一存储模块,用于将多条数据依次存储至预设表中,其中,每向预设表中存储一条数据,则对应存储该数据的存储地址生成一个ID,按照ID的生成次序,生成的ID依次增大。可选地,遍历单元60包括:读取模块,用于按照ID由小到大的次序,依次读取各个ID对应的存储地址内存储的数据,直到读取到最大ID对应的存储地址内存储的数据,其中,最大ID为生成的ID中的最大值。优选地,生成的第一个ID为1,相邻生成的ID的差值为1。可选地,存储单元40包括:第二存储模块,用于将多条数据分别存储至预设表中不同的存储地址;以及生成模块,用于对应不同的存储地址生成不同的ID。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模 块的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅是本申请的优选实施方式,应当指出,对于本
技术领域
的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1