AGNSS用户去重统计方法与流程

文档序号:14008339阅读:547来源:国知局
AGNSS用户去重统计方法与流程

本发明涉及软件开发技术领域,具体涉及大数据存储检索清洗技术。



背景技术:

近年来,随着技术的发展,人类对各类精准定位服务的需求日益迫切。商业公司对用户的总量的统计也侧面反映了公司的业务指标,如果采用传统的存储每个用户信息来做增量更新,固然可以解决统计的问题,但是其消耗的存储资源随着用户量的暴增而非线性的增长。同时,在这些海量数据中的比对去重时间成本也指数式暴涨。



技术实现要素:

为了解决现有技术存在的问题,需要一种平衡时间和空间的耗损同时允许可以接受的低错误率的处理方法。

本发明提供了一种agnss(辅助全球导航卫星系统)用户去重统计方法,解决了海量agnss迅速去重统计的技术问题,同时兼顾存储占用低,计算去重快。

本发明采用的技术方案如下:

一种agnss用户新的去重统计方法,包括以下步骤:

步骤1,将agnss用户转成数字签名。

步骤2,根据数字id转成低存储占用且可判定其是否存在的bitmap(位图)数据结构。

步骤3,在bitmap数据结构中进行有效次比较进行低错误率地判断去重。

进一步地,agnss用户的数字根据提供的算法转换成数字签名。

进一步地,将agnss用户数字签名映射到固定长度的bitmap中。

任意新老用户的agnss用户的数字签名标识都可以判断去重。

本发明的有益效果如下:

1、减少占用存储空间,同时存储空间不随用户量非线性无序增加。本发明在可预见的的用户数量下实现下完全固定,当一定的错误率增加的情况下,可适当考虑增加存储空间,空间增加幅度完全不随用户增长指数不可控增加。

2、加快去重检索的速度,通过特殊的存储方法和检索算法可以将全数据扫描转换成计算机基本移位比较操作。

附图说明

图1是本发明bloomfilter初始化存储结果图。

图2是本发明bloomfilter存储后结构图。

具体实施方式

下文中,结合附图和实施例对本发明作进一步阐述。

本发明一种agnss用户新的去重统计方法,包括以下步骤:

定义一:将agnss用户的id转成数字标签:通常采用hash(哈希)算法,考虑到一些算法有可能为负值,从存储空间和存储表示便利性考虑,本发明选择bkdrhash算法来计算任意agnss用户id的数字标签,原因有以下几种考虑:

1、此算法得到的agnss用户数字标签一定为正数。

2、如果不考虑得到数字标签的长度的情况,此算法得到的数字标签重复率比较低。经过各个hash算法自测比较结果如下:

其中数据类型1为100000个字母和数字组成的随机串哈希冲突个数。数据类型2为100000个有意义的英文句子哈希冲突个数。数据类型3为数据1的哈希值与1000003(大素数)求模后存储到线性表中冲突的个数。数据类型4为数据1的哈希值与10000019(更大素数)求模后存储到线性表中冲突的个数。

通过比对,可以看到bkdrhash算法的碰撞率在各种应用场景下碰撞率是比较低的。下面是该算法的scala版本的实现:

seed作为本身的hash初始值推荐一般是素数和奇数,这边考虑现在计算机计算架构移位操作的优势,优先采用同时2的指数减1的形式。考虑到此算法生成的hash值有可能非常巨大,超出一般计算机所能存储的最大值的范围,会对固定max取余保证一般计算机的存储的可行性。

定义二:采用bloomfilter(布隆过滤器)算法对各个agnss用户id进行标记。

bloomfilter基于bitmap,一般用于数据的去重计算。bitmap中用一个bit位来表示一个数字,用于精确计算,但是如果数据量大到一定程度,需要采用bloomfilter。bloomfilter可以看做是对bitmap的扩展,但不同于bitmap,bloomfilter是用多个bit位是否同时存在来判定元素是否存在,其为一种估算的数据结构,存在误判(falsepositive)的情况。

bloomfilter的核心是一个m位的bitset和k个hash函数(散列函数,把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值)。

初始时bitset中所有位的值都设置为0,假设取m=10,k=3,用浅色表示某位为0,深色表示为1,初始存储结果如图1所示。

插入元素的步骤具体如下:

步骤s11,计算k个hash值。

步骤s12,将k个hash值对m取模得到k个下标。

步骤s13,将bitset中k个下标对应的位设置为1。

比如向bloomfilter插入元素“testname”。分别用3个hash函数计算“testname”的hash值,将hash值对10取模,得到在[0,10)范围内的r1、r2、r3,假设计算结果为:

r1=h1(“testname”)%m=1

r2=h2(“testname”)%m=3

r3=h3(“testname”)%m=5

于是将bitset中第1位、第3位和第5位的值置为1:

“testname”对应的bloomfilter的存储结构如图2所示。

判断“testname”是否在bloomfilter字典里,同样需要三步:

步骤s21,计算k个hash值。

步骤s22,将k个hash值对m取模得到k个下标。

步骤s23,检查bitset中k个下标对应的位是否都为1。

如果bloomfilter里有“testname”,那bitset中相应的k位值显然都为1。问题是即使bloomfilter里没有“testname”,还是可能由于之前插入的元素而导致“testname”对应的k位值都为1,因此会错误地认为集合里已经有“testname”了,这就是bloomfilter会出错的地方。

在算法空间复杂度方面,bloomfilter不会动态增长,运行过程中维护的始终只是m位的bitset,所以空间复杂度只有o(m)。

时间复杂度方面,bloomfilter的插入与属于操作主要都是在计算k个hash,所以都是o(k)。

但是如上述所提及,bloomfilter算法会有一定错误率,错误率一般有以下两种:

fp=falsepositive

fn=falsenegative

对应bloomfilter的情况下,fp就是「集合里没有某元素,查找结果是有该元素」,fn就是「集合里有某元素,查找结果是没有该元素」。fn显然总是0,fp会随着bloomfilter中插入元素的数量而增加--极限情况就是所有bit都为1,这时任何元素都会被认为在集合里。其中fp的推导结果如下:

n是当前集合里元素的数量,bloomfilter总共占用多少bit位存储,k代表选取多少个hash函数:

n=0时,fp=0;n趋于无穷大时,fp趋于1;

k/m和n保持不变时,k越大,fp越小;

k、m的取值受用户量的预估和存储空间,能接受的错误率的影响。

在实施例中,以agnss用户统计为例,agnss用户主要手机终端量暴增,总用户量破亿的情况比较常见。按照传统的存储用户数据结构,其存储成本随着用户量的增加会不可控的增加,其检索成本之高相对统计成本也难以接受。对于计算总量去重的简单统计需求,采用本发明所采用的方法可以在可以接受的错误比例下,采用相对较廉价的方法获得比较令人满意的计算成果。

本发明的主要优点包括:

1、本方法的降低了存储空间,如果采用一些支持直接内存分配语言来实现上述方法,进一步提高空间复用率和节省实现和存储的空间复杂度。

2、本发明提高了运行效率,如上所述,一次编码可以提高查找定位数据的效率,降低cpu使用率。同时一次解码,可以得到参与编码的内容,避免多余查找。

3、本发明易于实现,降低了实现复杂度,也降低了维护成本。本方法基于常见的bkdrhash来编解码,方法的实现门槛低,同时易于测试和维护。

本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1