具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供了一种用于联机分析处理的数据处理方法。
图1是根据本发明一实施例的数据处理方法的流程图。如图所示,该数据处理方法包括如下步骤:
步骤S101,获取对联机分析处理中的数据进行分区得到的多个分区。需要进行联机分析处理的数据通常按照一定的规则存储在某个分区中,例如,按时间存储在不同的时间分区中,例如按照每个月份进行分区,对于一年的数据就可以分为12个区,假设当前月份是11月份,则最近两个月份为9月份和10月份。联机分析处理中的数据可以存储近两个月的数据或者更长时间的数据。
为了方便对联机分析处理中的数据进行计算处理,对按照例如月份进行分区之后得到的分区再按照一定规则进行分区处理。例如,按照用户是数量或者CPU的数量对10月份分区内的数据再进行分区处理,得到多个分区。经过再次分区得到的多个分区中的数据可以由不可累加的指标变成可累加的指标。
需要说明的是,这里所说的分区规则不用于限制本发明的技术方案,应当理解为本发明技术方案的优选实施方式。
步骤S102,分别计算多个分区的去重计数指标的用户数。
用户数是指访问者的数目,由于一个访问者可能多次访问某个网址,那么每次访问都会计数一次,每个月份同一个访问者多次访问同一个网址,则每个月份该访问者会被多次计数。为了准确计算访问一个网址的实际用户数,则需要对记录的用户数进行去重计算。
由于通过分区将可以进行累加的一类指标数据存放至一个分区上,每个分区上的数据按照用户唯一标识作为分区条件,则每个分区中存放的用户相同,不同分区中的用户不相同,对多个分区中的用户数分别进行去重计数指标的计算,得到每个分区的去重计数指标的用户数。
步骤S103,将计算得到的多个分区的去重计数指标的用户数相加,得到联机分析处理中的去重计数的用户数。
由于每个分区的用户数是按照用户唯一标识作为分区条件的,每个分区中存放的用户相同,不同分区中的用户不同,在分别计算每个分区的去重计数指标的用户数之后,可以将不同分区计算得到的去重计数指标的用户数进行累加,无需经过内存的去重计算,从而将不可累加的用户数指标转化为可以累加的指标,进而达到了减少联机分析处理时内存开销的效果。
需要指出的是,用户数指标是去重计数指标中的一类指标,本发明实施例中所说的用户数指标只是用来详细说明本发明实施例的具体实施方式,本发明实施例所记载的具体实施方式还可以用于计算去重计数指标的其他种类的指标,例如用户访问时间、用户访问内容和用户访问路径等。
图2是根据本发明又一实施例的数据处理方法的流程图。如图所示,该数据处理方法包括如下步骤:
步骤S201,对联机分析处理中的数据进行分区处理,得到对应于多个时间段的多个第一分区。
按照时间段将联机分析处理中的数据进行分区处理,例如,将10月份的联机分析处理中的数据存储在10份的分区中,将11月份的联机分析处理中的数据存储在11月份的分区中,再例如,将11月份第一周的联机分析处理中的数据存储在11月份第一周的分区中,将11月份第二周的联机分析处理中的数据存储在11月份第二周的分区中。
按照一定的时间段,可以将联机分析处理中数据分配到相应的时间段的分区中,这些按照时间段得到的分区为第一分区。
步骤S202,将每个第一分区划分为多个子分区。对按照时间段划分得到的第一分区再进行分区,得到多个子分区。划分多个子分区可以按照用户唯一标识进行划分,用户唯一标识可以为用户ID、用户手机号或者用户cookie等信息。按照用户唯一标识将与用户唯一标识相关的一类数据放在同一个子分区中,以便对每个子分区中的数据进行去重计数指标的计算之后,对计算结果进行累加。
步骤S203,将多个子分区作为对联机分析处理中的数据进行分区得到的多个分区。经过分区处理得到的多个子分区即为步骤S101中对联机分析处理中的数据进行分区得到的多个分区。
例如,按照时间段分区后,10月份的用户数为100,11月份的用户数位200,由于10月份的用户数中可能有同一用户被重复计数,11月份的用户数中也可能有同一用户被重复计数,如果直接将100与200相加会导致计算结果不准确,需要将10月份和11月份的用户数放在内存中进行去重处理,但是这样会消耗大量的内存资源。
为了减少内存资源的消耗,将10月份用户按照用户ID等信息分为多个子分区,每个子分区分别进行去重计数,将多个子分区中的去重计算结果相加,即可得到10月份的无重复的用户数,例如90。用同样的方法对11月份的用户数进行计算得到11月份无重复的用户数,例如150。如果需要计算10月份和11月份的用户数,可以将10月份和11月份的数据分配到多个子分区中,对多个子分区中的数据进行去重计算,并对计算结果进行累加,得到两个月份的无重复的用户数。
通过将与用户唯一标识相关的一类数据放在同一个子分区中,那么相同的数据也放在同一子分区中,对每个子分区进行去重计数的计算之后,可以直接对每个子分区的计算结果进行累加,得到多个子分区的去重计数指标的计算结果。用这种方法能够避免在内存中处理大量数据,减少了内存开销。
优选地,多个子分区中的每个子分区包括同一哈希组的用户数据。在上述实施例中,利用用户唯一标识例如用户ID、用户Cookie等信息作为分区条件,为了减少分区的个数,将用户哈希值作为用户唯一标识,使每个子分区中包括同一哈希组的用户数据。在获取对联机分析处理中的数据进行分区得到的多个分区之后,该数据处理方法包括如下步骤:
步骤204,判断是否有新增加用户。由于将用户唯一标识作为分区条件,则每增加一个用户,便会多一个用户唯一标识,用户动态增加则用户唯一标识动态增加。为了及时将新增加的用户分配到利用该用户唯一标识作为分区条件得到的分区中,首先要判断是否有新增加用户,并对用户唯一标识进行处理。
步骤205,如果判断出有新增加的用户,则获取预先设置的哈希组。
预先设置的哈希组中包含多个哈希值,哈希值与用户唯一标识一一对应,每个用户唯一标识有且仅对应一个哈希值,每个哈希值可以对应多个用户唯一标识。
对用户唯一标识进行处理得到哈希值,假设分区数为8,具体步骤如下:
A),将用户唯一标识的值模以分区数8之后,取余数。
B),将余数乘以10的N次方,其中,N为分区数8。假设用户唯一标识的值的最大值为2,147,483,647,如果预估用户数最大值为1亿,则用最大值2,147,483,647除以1亿,得到的数值约为21,此数值大于8,则可以将N取为8,即分区数为8。
C),将步骤A)中求得的余数和步骤B)中的数值相加,将得到的结果作为与用户唯一标识的值对应的哈希值。
用户唯一标识的值 |
a |
b |
c |
198 |
6 |
6*10^8=6亿 |
6亿+198 |
99196 |
4 |
4*10^8=4亿 |
4亿+99196 |
步骤206,将新增加用户的用户数据分配到预先设置的哈希组中。
按照哈希值将用户数据分为8个分区,每个分区的数值容量为1亿,则拆分的8个分区分别为:
第一个分区:哈希值为0-1亿;
第二个分区:哈希值为1-2亿;
第三个分区:哈希值为2-3亿……依次类推。
对每个新增加用户的用户唯一标识的值进行上述计算,并根据计算结果将用户数据分配到预先设置的哈希组中,例如,计算得到的哈希值为400099196,则该用户数据存储在第四个分区中。
图3是根据本发明实施例的计算联机分析处理中的去重计数的用户数的流程图。如图所示,该方法包括如下步骤:
步骤S301,查找去重计数指标的相关列。去重计数指标的相关列可以为用户唯一标识列。
步骤S302,由去重计数指标的相关列创建用户哈希映射列,其中,去重计数指标的相关列和用户哈希映射列为一一对应关系。
去重计数指标为用户唯一标识列,用户唯一标识列与用户哈希值相对应,一个用户唯一标识对应一个用户哈希值,一个用户哈希值可以对应多个用户唯一标识。用户哈希映射列包括多个用户哈希值,多个用户哈希值组成一个用户哈希映射列。
步骤S303,通过采用用户哈希映射列替换去重计数指标的相关列进行去重计数计算。在进行去重计算时,将用户哈希值作为分区条件,按照用户哈希映射列将相应的用户分配到与该用户哈希值对应的分区中。
具体地,通过采用用户哈希映射列替换去重计数指标的相关列进行去重计数计算包括:获取联机分析处理中的去重计数指标,以及通过直接更改联机分析处理中的去重计数指标进行去重计数计算。
用户的去重计数指标不仅指用户数,还可以指用户访问时间、访问路径等去重计数指标,对于用户数这一去重计数指标,在进行去重计数计算时,去掉相同用户的数量,对于访问路径这一去重计数指标,在进行去重计算时,去掉相同路径的数量。其他去重计数指标类推,不做一一赘述。
在对用户数以外的其他去重计数指标进行去重计数计算时,直接将联机分析处理中的去重计数指标更改为其他去重计数指标,以进行去重计数计算。
本发明实施例提供了一种用于联机分析处理的数据处理装置。
图4是根据本发明一实施例的数据处理装置的示意图。如图所示,该数据处理装置包括第一获取单元10、计算单元20和求和单元30。
第一获取单元10用于获取对联机分析处理中的数据进行分区得到的多个分区。需要进行联机分析处理的数据通常按照一定的规则存储在某个分区中,例如,按时间存储在不同的时间分区中,例如按照每个月份进行分区,对于一年的数据就可以分为12个区,假设当前月份是11月份,则最近两个月份为9月份和10月份。联机分析处理中的数据可以存储近两个月的数据或者更长时间的数据。
为了方便对联机分析处理中的数据进行计算处理,对按照例如月份进行分区之后得到的分区再按照一定规则进行分区处理。例如,按照用户是数量或者CPU的数量对10月份分区内的数据再进行分区处理,得到多个分区。经过再次分区得到的多个分区中的数据可以由不可累加的指标变成可累加的指标。
需要说明的是,这里所说的分区规则不用于限制本发明的技术方案,应当理解为本发明技术方案的优选实施方式。
计算单元20用于分别计算多个分区的去重计数指标的用户数。用户数是指访问者的数目,由于一个访问者可能多次访问某个网址,那么每次访问都会计数一次,每个月份同一个访问者多次访问同一个网址,则每个月份该访问者会被多次计数。为了准确计算访问一个网址的实际用户数,则需要对记录的用户数进行去重计算。
由于通过分区将可以进行累加的一类指标数据存放至一个分区上,每个分区上的数据按照用户唯一标识作为分区条件,则每个分区中存放的用户相同,不同分区中的用户不相同,对多个分区中的用户数分别进行去重计数指标的计算,得到每个分区的去重计数指标的用户数。
求和单元30用于将计算得到的多个分区的去重计数指标的用户数相加,得到联机分析处理中的去重计数的用户数。
由于每个分区的用户数是按照用户唯一标识作为分区条件的,每个分区中存放的用户相同,不同分区中的用户不同,在分别计算每个分区的去重计数指标的用户数之后,可以将不同分区计算得到的去重计数指标的用户数进行累加,无需经过内存的去重计算,从而将不可累加的用户数指标转化为可以累加的指标,进而达到了减少联机分析处理时内存开销的效果。
需要指出的是,用户数指标是去重计数指标中的一类指标,本发明实施例中所说的用户数指标只是用来详细说明本发明实施例的具体实施方式,本发明实施例所记载的具体实施方式还可以用于计算去重计数指标的其他种类的指标,例如用户访问时间、用户访问内容和用户访问路径等。
图5是根据本发明又一实施例的数据处理装置的示意图。如图所示,该数据处理装置包括第一获取单元10、计算单元20和求和单元30,还包括分区单元40、划分单元50和处理单元60。
分区单元40用于在获取对联机分析处理中的数据进行分区得到的多个分区之前,对联机分析处理中的数据进行分区处理,得到对应于多个时间段的多个第一分区。按照时间段将联机分析处理中的数据进行分区处理,例如,将10月份的联机分析处理中的数据存储在10份的分区中,将11月份的联机分析处理中的数据存储在11月份的分区中,再例如,将11月份第一周的联机分析处理中的数据存储在11月份第一周的分区中,将11月份第二周的联机分析处理中的数据存储在11月份第二周的分区中。
按照一定的时间段,可以将联机分析处理中数据分配到相应的时间段的分区中,这些按照时间段得到的分区为第一分区。
划分单元50用于将每个第一分区划分为多个子分区。对按照时间段划分得到的第一分区再进行分区,得到多个子分区。划分多个子分区可以按照用户唯一标识进行划分,用户唯一标识可以为用户ID、用户手机号或者用户cookie等信息。按照用户唯一标识将与用户唯一标识相关的一类数据放在同一个子分区中,以便对每个子分区中的数据进行去重计数指标的计算之后,对计算结果进行累加。
处理单元60用于将多个子分区作为对联机分析处理中的数据进行分区得到的多个分区。经过分区处理得到的多个子分区即为第一获取单元10中对联机分析处理中的数据进行分区得到的多个分区。
例如,按照时间段分区后,10月份的用户数为100,11月份的用户数位200,由于10月份的用户数中可能有同一用户被重复计数,11月份的用户数中也可能有同一用户被重复计数,如果直接将100与200相加会导致计算结果不准确,需要将10月份和11月份的用户数放在内存中进行去重处理,但是这样会消耗大量的内存资源。
为了减少内存资源的消耗,将10月份用户按照用户ID等信息分为多个子分区,每个子分区分别进行去重计数,将多个子分区中的去重计算结果相加,即可得到10月份的无重复的用户数,例如90。用同样的方法对11月份的用户数进行计算得到11月份无重复的用户数,例如150。如果需要计算10月份和11月份的用户数,可以将10月份和11月份的数据分配到多个子分区中,对多个子分区中的数据进行去重计算,并对计算结果进行累加,得到两个月份的无重复的用户数。
通过将与用户唯一标识相关的一类数据放在同一个子分区中,那么相同的数据也放在同一子分区中,对每个子分区进行去重计数的计算之后,可以直接对每个子分区的计算结果进行累加,得到多个子分区的去重计数指标的计算结果。用这种方法能够避免在内存中处理大量数据,减少了内存开销。
优选地,多个子分区中的每个子分区包括同一哈希组的用户数据。在上述实施例中,利用用户唯一标识例如用户ID、用户Cookie等信息作为分区条件,为了减少分区的个数,将用户哈希值作为用户唯一标识,使每个子分区中包括同一哈希组的用户数据。
该数据处理装置还包括判断单元、第二获取单元和分配单元。
判断单元用于在获取对联机分析处理中的数据进行分区得到的多个分区之后,判断是否有新增加用户。由于将用户唯一标识作为分区条件,则每增加一个用户,便会多一个用户唯一标识,用户动态增加则用户唯一标识动态增加。为了及时将新增加的用户分配到利用该用户唯一标识作为分区条件得到的分区中,首先要判断是否有新增加用户,并对用户唯一标识进行处理。
第二获取单元用于在判断出有新增加的用户时,获取预先设置的哈希组。预先设置的哈希组中包含多个哈希值,哈希值与用户唯一标识一一对应,每个用户唯一标识有且仅对应一个哈希值,每个哈希值可以对应多个用户唯一标识。
对用户唯一标识进行处理得到哈希值,假设分区数为8,具体步骤如下:
A),将用户唯一标识的值模以分区数8之后,取余数。
B),将余数乘以10的N次方,其中,N为分区数8。假设用户唯一标识的值的最大值为2,147,483,647,如果预估用户数最大值为1亿,则用最大值2,147,483,647除以1亿,得到的数值约为21,此数值大于8,则可以将N取为8,即分区数为8。
C),将步骤A)中求得的余数和步骤B)中的数值相加,将得到的结果作为与用户唯一标识的值对应的哈希值。
用户唯一标识的值 |
a |
b |
c |
198 |
6 |
6*10^8=6亿 |
6亿+198 |
99196 |
4 |
4*10^8=4亿 |
4亿+99196 |
分配单元用于将新增加用户的用户数据分配到预先设置的哈希组中。按照哈希值将用户数据分为8个分区,每个分区的数值容量为1亿,则拆分的8个分区分别为:
第一个分区:哈希值为0-1亿;
第二个分区:哈希值为1-2亿;
第三个分区:哈希值为2-3亿……依次类推。
对每个新增加用户的用户唯一标识的值进行上述计算,并根据计算结果将用户数据分配到预先设置的哈希组中,例如,计算得到的哈希值为400099196,则该用户数据存储在第四个分区中。
图6是根据本发明实施例的又一实施例的数据处理装置的示意图。如图所示,该数据处理装置包括第一获取单元10、计算单元20和求和单元30,其中,求和单元30包括查找模块301、映射模块302和去重模块303。
查找模块301用于查找去重计数指标的相关列。去重计数指标的相关列可以为用户唯一标识列。
映射模块302用于由去重计数指标的相关列创建用户哈希映射列,其中,去重计数指标的相关列和用户哈希映射列为一一对应关系。去重计数指标为用户唯一标识列,用户唯一标识列与用户哈希值相对应,一个用户唯一标识对应一个用户哈希值,一个用户哈希值可以对应多个用户唯一标识。用户哈希映射列包括多个用户哈希值,多个用户哈希值组成一个用户哈希映射列。
去重模块303用于通过采用用户哈希映射列替换去重计数指标的相关列进行去重计数计算。在进行去重计算时,将用户哈希值作为分区条件,按照用户哈希映射列将相应的用户分配到与该用户哈希值对应的分区中。
具体地,去重模块303包括获取子模块和去重子模块,其中获取子模块用于获取联机分析处理中的去重计数指标,去重子模块,用于通过直接更改联机分析处理中的去重计数指标进行去重计数计算。
用户的去重计数指标不仅指用户数,还可以指用户访问时间、访问路径等去重计数指标,对于用户数这一去重计数指标,在进行去重计数计算时,去掉相同用户的数量,对于访问路径这一去重计数指标,在进行去重计算时,去掉相同路径的数量。其他去重计数指标类推,不做一一赘述。
在对用户数以外的其他去重计数指标进行去重计数计算时,直接将联机分析处理中的去重计数指标更改为其他去重计数指标,以进行去重计数计算。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。