更新用户所满足的规则的方法及处理***
技术领域
本申请涉及通信及计算机领域,尤其涉及一种能够针对千万级别以上用户及相对于百万级别的规则条件,支持在秒级/毫秒级实时计算用户满足的人群规则的用户标签更新方法以及应用所述用户标签更新方法的用户满足规则处理方法和用户满足规则处理方法***。
背景技术
在当今互联网为大众所广泛应用,人们已经熟悉并乐于通过互联网消费、娱乐、发布个人信息等,商家通过查找服务商提供的互联网用户在互联网上的消费、娱乐以及信息的记录及更改信息,能够更为全面地了解受众或消费群体的需求,更为准确的找到受众或消费群体并向他们投放广告或提供服务。例如阿里巴巴数据平台事业部也提供了定向投放平台,其中定向产品应用于淘宝无线主客户端,主要进行卡片推荐和人群推荐。淘宝普通卖家可以通过定投产品在淘宝店铺以及活动页面进行定向营销,比如淘宝的详情页以及试用中心,以提高商家的盈利。
随着互联网用户数量急剧增加,数据平台需要处理更新的数量急剧增加,例如阿里妈妈数据管理平台(DMP平台)是一个人群精准营销的大数据应用平台,截止2014年所有阿里妈妈广告业务均已接入阿里妈妈数据管理平台,目前服务数千广告主、日均处理上万人群、日均收入500万。预计年底广告主达到10万、人群数达到50万,广告日均收入3000万,另外对于淘宝网站的用户数量已经达到千万甚至上亿数量级,而每日用户更新数据量也达到了上亿数量级,而规则的数量级也在百万级别以上。
现有为用户满足提供规则查询的处理方法主要有两种:一种是离线批处理方法,一种增量计算处理方法。
其中,图1为现有技术中用户满足规则的离线批处理方法中Map的简要流程图,图2为现有技术中用户满足规则的离线批处理方法中Reduce的简要流程图,结合图1和图2,所述离线批处理方法是采用Map-Reduce(映射-归约)框架程序实现,所述离线批处理方法可以在数小时内处理数十亿输入和数万的人群计算。所述Map-Reduce框架程序实现的基本步骤分为Map(映射)和Reduce(归约)两个阶段:其中在Map阶段,包括以下步骤:
步骤S01’:首先读入人群规则表,步骤S03’:解析人群的规则表达式,得到与当前Map输入表相关的去重的原子条件表达式,利用Fel(Fast Expression Language)编译这些去重的原子条件表达式;
步骤S04’:逐条读入输入表数据,执行所有编译后的原子表达式;
步骤S05’:针对一条数据执行完成后;
步骤S07’:Map输出用户ID、用户在表中满足的原子条件表达式(Cid,ClauseIdentity)列表,每个用户对应多个原子表达式,不是每个用户输出一次,而是每条对应原子表达式的记录都输出一次。
在Reduce阶段,包括以下步骤:
步骤S11’:首先也是读入人群规则表(Gid list,Group Identification list);
步骤S13’:解析人群的规则表达式(Gid,Group Identification),与Map不同的是,这里解析出的是每个人群需要各个表满足的原子条件表达式列表;
步骤S14’:读入Map的输出作为数据输入,对每个用户在各个Map输出的数据做合并,合并后得到用户在各个表的多条记录上满足的表达式列表;
步骤S15’:合并以上两步骤的结果,得出用户和人群规则的对应关系,针对每一个用户,执行所有规则;
步骤S17’:判断用户是否满足规则;
步骤S19’:输出用户满足规则的结果。
现有技术中所述离线批处理的方式,可以处理比较大数据量的计算,吞吐量大,但延迟很大,一般需要几十小时甚至更长的时间,因此属于天(Day)级别的处理速度。
图3为现有技术中用户满足规则的索引批处理方法的简要流程图,结合图3,另一种方法是利用索引处理方式,通常采用建立索引结合增量的方式处理,包括以下步骤:
步骤S21’:首先读取全量的人群数据;步骤S23’:通过离线批处理***建立索引,生成索引文件放在分布式文件***中;步骤S25’:在线***读取分布式***中的索引,加载起来;步骤S27’:然后,通过API提供在线查询服务。
通过建索引结合增量处理的方式,可以对一个查询较快的得出结果,但建索引的时间依然需要十小时左右,因此依然属于小时(Hour)级别的处理速度,而且也无法对当前更新的人群进行实时计算输出结果。
综上所述,现有的两种解决方案,都不能实时处理的人群计算需求,且不能处理人群的实时更新,更无法支持从人查询所属人群的功能。因此,如何能够针对巨大用户数量、由此产生的用户大量的更新以及规则数量和更新数量同样巨大的情况,例如千万级别以上用户及相对于百万级别的规则条件,在秒级/毫秒级实时计算用户满足的人群规则,即实时判断一个受众目标实时符合哪些卖家的规则,将获得的结果以更高的效率的方式提供给受众目标,给受众目标提供更好的体验,例如帮助广告主或者卖家达成成交等,成为业界关注的问题。
发明内容
本申请要解决的技术问题是能够针对巨大用户数量、由此产生的用户大量的更新以及规则数量和更新数量同样巨大的情况,提高用户数据更新的效率,实现在秒级/毫秒级实时计算用户满足的人群规则的实时查询,并将获得的结果以更高效率的方式提供给受众目标。
有鉴于此,本申请提供一种更新用户所满足的规则的方法,其中,包括:
获得待更新用户的用户数据,根据所述用户数据的属性,将所述用户数据分成不同类别的多个用户标签;
根据所述用户标签的类别信息,对所述用户标签进行更新处理,以查找变化的用户标签并重新计算所述变化的用户标签所满足的规则。
优选的,其中,所述用户标签的类别信息包括动态,所述动态的用户标签为属性随环境变化而发生变化的用户标签
进一步的,对所述用户标签进行更新处理,还包括:
建立所述映射关系,包括规则表达式到子句表达式的映射关系、子句表达式到规则表达式的映射关系、动态的用户标签到子句表达式的映射关系、用户和一个子句表达式是否命中的位图命中关系以及用户命中规则表达式的映射关系;
将待更新用户的用户数据与原有用户数据库的用户数据进行比对,查找变化的动态的用户标签,如未查找到则返回,如查找到则进入下一步;
查找所述变化的动态的用户标签在所述动态的用户标签到子句表达式的映射关系中对应的若干子句表达式;
针对所述对应的若干子句表达式,进行所述待更新用户是否命中子句表达式的遍历计算,获得所述待更新用户与所述对应的若干子句表达式的命中关系;
将所述命中关系与所述遍历计算前所述位图命中关系进行比对,找到变化的命中关系;
对于所述变化的命中关系是由命中变为不命中的,则查找该命中关系所对应的子句表达式在所述子句表达式到规则表达式的映射关系对应的若干规则表达式,并将所述对应的若干规则表达式从所述待更新用户命中的规则表达式的映射关系中删除;
对于所述变化的命中关系是由不命中变为命中的,则将所述待更新用户与该命中关系所对应的子句表达式的位图命中更新上传至所述位图命中关系中,并查找该命中关系所对应的子句表达式在所述子句表达式到规则表达式的映射关系对应的若干规则表达式,将所述对应的若干规则表达式增加到所述待更新用户命中的规则表达式的映射关系中。
优选的,对所述用户标签进行更新处理还包括:
根据所述动态的用户标签内容,将所述动态的用户标签分为可枚举类、不可枚举可索引类和不可枚举不可索引类;
对所述可枚举的动态的用户标签建立属性数组存储,并采用过滤查询法进行查询;对不可枚举但可索引的动态的用户标签建立查找树存储,并采用索引法进行查询;对不可枚举且不可索引的动态的用户标签划分范围存储,并对范围进行编号存储,并采用可索引查询法和可过滤查询法组合查询。
较佳的,每个所述动态的用户标签都具有记录最新更新时间的时间戳。
进一步的,对所述用户标签进行更新处理还包括:
接收规则更新请求,通过对所述动态的用户标签进行分类查询对照,建立用户所满足的规则的新的映射关系。
优选的,所述用户标签的类别信息还包括位置,所述位置的用户标签为属性与时间和空间位置相关的用户标签。
进一步的,对所述用户标签进行更新处理还包括:
对所有用户建立空间索引编号,建立所述用户的唯一全局识别码与述建立的空间索引编号的映射关系;
传输待更新用户的用户数据,对所述待更新用户分配当地识别码,建立空间索引编号与当地识别码的映射关系;
将所述待更新用户的用户数据与原有用户数据库进行比对,若所述待更新用户以前不存在,则建立新的空间索引编号,若所述待更新用户为原有用户,则检查所述空间索引编号是否有变化,对所述空间索引编号没有发生变化的则更新所述待更新用户的位置的用户标签的属性信息,对所述空间索引编号发生变化的则删除所述待更新用户原有的当地识别码,建立新的当地识别码,并更新当地识别码与所述空间索引编号的映射关系。
进一步的,在所述传输待更新用户的用户数据过程中,采用分布式消息队列方式对所述用户数据进行数据更新解耦,并通过关键标记字符对所述用户数据的数据进行切分。
较佳的,采用希尔伯特曲线对所有用户建立空间索引编号。
进一步的,对所述位置的用户标签建立空间索引还包括:
对所述建立的空间索引编号进行再取模划分。
较佳的,对所述用户标签进行更新处理包括:
将所述位置的用户标签的属性信息存储在连续的缓存中,所述缓存具有一个以当地识别码为下表的偏移指向表。
较佳的,对所述用户标签进行更新处理还包括:
根据所述待更新用户的位置的用户标签的变动频繁程度,动态设定更新阀值,当所述待更新用户的位置的用户标签的变动超过所述更新阀值时再进行更新。
较佳的,在对所述位置的用户标签的更新处理方法的过程中,还包括,支持数据过期,通过动态设定数据过期期限,删除超过数据过期期限仍未更新的数据。
较佳的,对所述用户标签的分类还包括滑动的用户标签,所述滑动的用户标签为属性本身不变但随环境变化而发生变化的用户标签。
较佳的,对所述用户标签进行更新处理还包括:
根据滑动的用户标签的频繁程度采用不同存储方式以备更新和查询,对于频繁程度高的滑动的用户标签采用矩阵存储方式;对于频繁程度低的滑动的用户标签采用链表存储方式。
较佳的,所述用户标签的类别信息还包括上下文和静态,所述上下文的用户标签为属性随条件同时发生的用户标签,所述静态的用户标签为属性固定的用户标签,采用建立函数判断法处理所述上下文的用户标签,采用建立索引方法处理所述静态的用户标签。
本申请还提供了一种更新用户所满足的规则的***,其中,包括:
第一装置,用以获得待更新用户的用户数据,根据所述用户数据的属性,将所述用户数据分成不同类别的多个用户标签;
第二装置,根据所述用户标签的类别信息,对所述用户标签进行更新处理,以查找变化的用户标签并重新计算所述变化的用户标签所满足的规则。
优选的,所述用户标签的类别信息包括动态,所述动态的用户标签为属性随环境变化而发生变化的用户标签。
优选的,所述动态引擎服务器第二装置包括第一引擎,所述第一引擎对所述动态的用户标签进行更新处理:
建立所述映射关系,包括:规则表达式到子句表达式的映射关系、子句表达式到规则表达式的倒排表映射关系、动态的用户标签到子句表达式的倒排表映射关系、用户和一个子句表达式是否命中的位图命中关系以及用户命中规则表达式的倒排表映射关系;
将待更新用户的用户数据与原有用户数据库的用户数据进行比对,查找变化的动态的用户标签,如未查找到则返回,如查找到则进入下一步;
查找所述变化的动态的用户标签在所述动态的用户标签到子句表达式的映射关系中对应的若干子句表达式;
针对所述对应的若干子句表达式,进行所述待更新用户是否命中子句表达式的遍历计算,获得所述待更新用户与所述对应的若干子句表达式的命中关系;
将所述命中关系与所述遍历计算前所述位图命中关系进行比对,找到变化的命中关系;
对于所述变化的命中关系是由命中变为不命中的,则查找该命中关系所对应的子句表达式在所述子句表达式到规则表达式的映射关系对应的若干规则表达式,并将所述对应的若干规则表达式从所述待更新用户的用户命中的规则表达式的映射关系中删除;
对于所述变化的命中关系是由不命中变为命中的,则将所述待更新用户与该命中关系所对应的子句表达式的位图命中更新上传至所述位图命中关系中,并查找该命中关系所对应的子句表达式在所述子句表达式到规则表达式的映射关系对应的若干规则表达式,将所述对应的若干规则表达式增加到所述待更新用户的用户命中的规则表达式的映射关系中。
进一步的,所述第一引擎对所述用户标签进行更新处理,还包括:
根据所述动态的用户标签内容,将所述动态的用户标签分为可枚举类、不可枚举可索引类和不可枚举不可索引类;
对所述可枚举的动态的用户标签建立属性数组存储,并采用过滤查询法进行查询;对不可枚举但可索引的动态的用户标签建立查找树存储,并采用索引法进行查询;对不可枚举且不可索引的动态的用户标签划分范围存储,并对范围进行编号存储,并采用可索引查询法和可过滤查询法组合查询。
较佳的,每个所述动态的用户标签都对应存储有一记录最新更新时间的时间戳。
进一步的,,所述第一引擎对所述用户标签进行更新处理,还包括:
接收规则更新请求,通过对用户的动态的用户标签进行分类查询对照,建立用户所满足的规则的新的映射关系。
优选的,所述用户标签的类别信息包括位置,所述位置的用户标签为属性与时间和空间位置相关的用户标签。
优选的,所述第二装置还包括若干第二引擎,用以处理所述位置的用户标签,所述第二引擎的构架包括:
第一模块,用以接收并传输所述待更新用户的用户数据;
第二模块,用以传输并分发所述待更新用户的用户数据;
第三模块,用以传输并分发用户查询请求和规则更新请求;以及
第四模块,用以对所述位置的用户标签进行更新并返回结果。
进一步的,所述第四模块对所述位置的用户标签进行更新并返回结果的过程,包括:
对所有用户建立空间索引编号,建立所述用户的唯一全局识别码与所述空间索引编号的映射关系;
传输待更新用户的用户数据,对所述待更新用户分配当地识别码,建立空间索引编号与当地识别码的映射关系;
将所述待更新用户的用户数据与原有用户数据库进行比对,若所述待更新用户以前不存在,则建立新的空间索引编号,若所述待更新用户为原有用户,则检查所述空间索引编号是否有变化,对所述空间索引编号没有发生变化的则更新所述待更新用户的位置的用户标签的属性信息,对所述空间索引编号发生变化的则删除所述待更新用户原有的当地识别码,建立新的当地识别码,并更新当地识别码与所述空间索引编号的映射关系。
进一步的,所述若干第一模块采用分布式消息队列方式对所述位置的用户标签进行数据更新解耦,并通过关键标记字符对位置的用户标签的数据进行切分。
较佳的,在所述第二引擎对所述位置的用户标签建立空间索引的过程中,第四模块采用希尔伯特曲线对所述位置的用户标签建立空间索引编号。
进一步的,在所述第二引擎对所述位置的用户标签建立空间索引的过程中,还包括对所述建立的空间索引编号进行再取模划分。
较佳的,所述第二引擎对所述用户标签进行更新处理还包括:
将所述位置的用户标签的属性信息存储在连续的缓存中,所述缓存具有一个以当地识别码为下表的偏移指向表。
较佳的,所述第二引擎对所述用户标签进行更新处理还包括:
根据所述待更新用户的位置的用户标签的变动频繁程度,动态设定更新阀值,当所述待更新用户的位置的用户标签的变动超过所述更新阀值时再进行更新。
较佳的,在所述第二引擎对所述位置的用户标签的更新处理方法的过程中,还包括,动态设定数据过期期限,删除超过数据过期期限仍未更新的数据。
较佳的,所述用户标签的类别信息还包括滑动,所述滑动的用户标签为属性与时间和空间位置相关的用户标签。
较佳的,所述第二装置还包括若干第三引擎,所述第三引擎对所述滑动的用户标签的更新处理方法,包括所述第三引擎根据滑动的用户标签的频繁程度采用不同存储方式以备更新和查询:对于频繁程度高的滑动的用户标签采用矩阵存储方式;对于频繁程度低的滑动的用户标签采用链表存储方式。
较佳的,所述的更新用户所满足的规则的***还包括若干镜像节点,每个所述第一引擎、每个所述第二引擎以及每个所述第三引擎都有至少一个镜像节点提供服务。
较佳的所述用户标签的类别信息还包括上下文和静态,所述上下文的用户标签为属性随条件同时发生的用户标签,所述静态的用户标签为属性固定的用户标签。
可选的,所述***还包括第三装置,所述第三装置采用建立索引方法更新处理所述静态的用户标签,所述第一装置直接更新处理所述下文信息标签并返还结果。
较佳的,所述第二装置分责且专注负责处理对应的用户标签。
与现有技术相比,本申请所述的更新用户所满足的规则的方法通过根据用户标签的数据活跃程度及内容,将用户标签划分为动态的用户标签、位置的用户标签和滑动的用户标签等不用类的标签,并针对不同类的标签采用不同的更新处理方法,尤其是对更新最为频繁的动态的用户标签采用快速有效的更新处理方法,提高了***对用户更新请求的处理能力和处理速度,进而提高用户满足规则的实时更新和查询以提高用户数据更新的效率;
进一步的,本申请所述对所述动态的用户标签的更新处理方法通过建立若干映射关系,利用映射关系进行查询和计算,相当于从细粒度对查询计算结果进行了缓存,因此大幅度加快了计算;同时通过对动态的用户标签的相关子句表达式进行计算,从计算上进行了剪枝,故大幅减少了计算量,进而大幅提高了计算效率,进一步提高用户满足规则的实时更新和查询以提高用户数据更新的效率。
此外,本申请通过建立所述更新用户所满足的规则的***,采用分布式规则计算架构,包括对建立用户标签的划分与用户标签的分布式框架和位置的用户标签的计算框架,实现了用户标签的合理分配和实时处理,进一步提高用户更新请求的处理速度。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为现有技术中用户满足规则的离线批处理方法中Map的简要流程
图2为现有技术中用户满足规则的离线批处理方法中Reduce的简要流程图;
图3为现有技术中用户满足规则的索引批处理方法的简要流程图;
图4为根据本申请一实施例中所述用户满足规则的实时更新方法的对用户标签的划分示意图;
图5为本申请一实施例中所述更新用户所满足的规则的***框架示意图;
图6为本申请一实施例中所述更新用户所满足的规则的***中第二引擎框架示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本申请的核心思想是,在实时计算是为了在海量数据—即用户数量、规则数量以及更新数量的庞大数据—的此基础上,对短时间内实时变更的数据进行快速计算,实时返回结果,帮助受众群体(例如广告主或者卖家)迅速查询到满足人群。其中实时变更的数据包括用户标签(比如位置信息、成交金额等)的实时更新以及对人群规则的实时创建和更新。
结合上述核心思想,在本申请的一实施例中提供了一种提供用户满足规则的实时更新方法和实时更新***。通过根据用户标签的属性,包括用户标签存储的数据的具体内容和数据的活跃程度及内容等,将用户标签划分为动态的用户标签、位置的用户标签和滑动的用户标签等不用类别的标签,并针对不同类别的标签采用不同的更新处理方法,尤其是对更新最为频繁的动态的用户标签以及内容相对复杂的位置的用户标签采用快速有效的更新处理方法,从而大幅提高用户更新请求的处理速度,进而提高用户满足规则的实时更新和查询以提高用户数据更新的效率,以更高效率的方式提供给受众群体,实现受众群体在秒级/毫秒级实时查询最近用户满足的人群规则。
具体地,下面结合附图及具体实施例对本申请作进一步详细描述。
在本申请的一个方面提供了一种用户满足规则的实时更新方法,包括:获得待更新用户的用户数据,根据所述用户数据的属性,将所述用户数据分成不同类别的多个用户标签;根据所述用户标签的类别信息,对所述用户标签进行更新处理,以查找变化的用户标签并重新计算所述变化的用户标签所满足的规则。
在本申请的一方面,每个用户的用户数据都包括一全局识别码和多个用户标签,当用户提出更新请求书,获得待更新用户的多个用户标签。其中,在本申请最优的较佳的实施例中,根据所述用户数据的属性,可以对所述用户标签进行分类,所述用户标签类别信息包括动态的用户标签、位置的用户标签和、滑动的用户标签、上下文的用户标签和静态的用户标签等。对所述用户标签的分类至少包括动态的用户标签,其中所述动态的用户标签为属性随环境变化而发生变化的用户标签。在较佳的实施例中,;对所述用户标签的分类还包括、位置的用户标签和、滑动的用户标签,所述位置的用户标签为属性与时间和空间位置相关的用户标签,;所述滑动的用户标签为属性本身不变但随环境变化而发生变化的用户标签。;在其他实施例中,对所述用户标签的分类还可以包括、上下文的用户标签和静态的用户标签。,所述上下文的用户标签为属性随条件同时发生的用户标签,所述静态的用户标签为属性固定的用户标签。
图4为根据本申请一个方面的对用户标签的划分示意图,以下结合图4说明,详细说明本申请一较佳一优选的的实施例中不同类别的用户标签属性的具体描述,在本申请一较佳的实施例中,将所述用户标签100划分为以下几类:动态的用户标签101、位置的用户标签103、滑动的用户标签105、上下文的用户标签107和静态的用户标签109,所述动态的用户标签101为属性随环境变化而发生变化的用户标签100,例如用户购买的商品、用户的订阅信息等,所述位置的用户标签103为属性同时与时间和空间位置相关的用户标签100,例如用户活动位置等,所述位置的用户标签103因为既与时间挂钩,也与用户自身空间位置挂钩,因此位置的用户标签103的计算方式不同于动态的用户标签101,所述滑动标签滑动的用户标签105为属性值本身不变,但随环境变化属性发生变化的用户标签100,例如随时间流逝,用户最近一段时间内的交易笔数(一段时间内交易笔数属性不变,但是交易笔数的数值随时间发生变化)等。所述上下文的用户标签107为属性随条件同时发生的用户标签100,属性随着条件同时发生,例如用户享受某种优惠随支付方式的不同而不同,而所述静态标签静态的用户标签109为属性固定的用户标签100,不变化的或相对较长的时间内不变化的用户标签100均可划归为静态标签静态的用户标签109,例如用户的年龄、性别、姓名等。其中对所述动态的用户标签101、位置的用户标签103、滑动的用户标签105以及滑动的用户标签105均需要进行实时计算。所述上下文的用户标签107和静态的用户标签109对实时计算要求不高。
在后续实施例中均以该分类方式为例进行描述,当然本领域技术人员应能理解上述标签类型的描述仅为举例,其他根据数据活跃程度及内容对用户标签100或用户数据进行的划分且采用不同的处理方式进行更新处理的方法及其变型,或其他划分方式,例如包括动态的用户标签101、滑动的用户标签105结合其他本领域技术人员所熟知的标签类型的划分方法等,都在本申请的思想范围之内。至于具体的用户标签100对根据上述类别划分到具体哪一类别中可以由受众群体与开发人员协商确定,不再赘述。
在用户标签100中,所述动态的用户标签101是数据存储量最大,数据变化频率最高的一类用户标签100,因此如何能够实现动态的用户标签101的实时更新和实时查询成为本申请的关键技术问题,在本申请实施例的一个方面中,对所述动态的用户标签101的更新处理方法为的核心思想为:通过建立若干映射关系,若干所述动态的用户标签101与规则表达式、子句表达式之间以及所述规则表达式和所述子句表达式之间的命中关系或对应关系的映射关系,利用所述映射关系,找到变化的所述动态的用户标签101相关的子句表达式,并找到所述相关的子句表达式对应的规则表达式,根据与所述相关的子句表达式命中关系的变化情况,对所述变化的动态的用户标签所满足的规则所述对应的规则进行更新。
在较佳的实施例中,对所述动态的用户标签101的更新处理方法具体包括:
步骤S01:建立若干映射关系,包括规则表达式到子句表达式的映射关系、子句表达式到规则表达式的映射关系、动态的用户标签到子句表达式的映射关系、用户和一个子句表达式是否命中的位图命中关系以及用户命中规则表达式的映射关系;
步骤S02:将待更新用户的用户数据与原有用户数据库的用户数据进行比对,查找变化的动态的用户标签,如未查找到则返回,如查找到则进入下一步;
步骤S03:查找所述变化的动态的用户标签在所述动态的用户标签到子句表达式的映射关系中对应的若干子句表达式;
步骤S04:针对所述对应的若干子句表达式,进行所述待更新用户是否命中子句表达式的遍历计算,获得所述待更新用户与所述对应的若干子句表达式的命中关系;
步骤S05:将所述命中关系与所述遍历计算前所述位图命中关系进行比对,找到变化的命中关系;
步骤S06:对于所述变化的命中关系是由命中变为不命中的,则查找该命中关系所对应的子句表达式在所述子句表达式到规则表达式的映射关系对应的若干规则表达式,并将所述对应的若干规则表达式从所述待更新用户的用户命中的规则表达式的映射关系中删除;
步骤S07:对于所述变化的命中关系是由不命中变为命中的,则将所述待更新用户与该命中关系所对应的子句表达式的位图命中更新上传至所述位图命中关系中,并查找该命中关系所对应的子句表达式在所述子句表达式到规则表达式的映射关系对应的若干规则表达式,将所述对应的若干规则表达式增加到该待更新用户的用户命中的规则表达式的映射关系中。
本申请所述的更新处理方法支持用户的动态的用户标签101的实时更新,支持从用户(User)的用户标签(Field)到规则(Group)的实时查询,每个用户由一个唯一的身份识别码(ID)和多个用户标签100组成,用户满足的规则表达式(Gid)包含多个与(AND)的结构化查询语句(SQL,Structured Query,规则表达式中的SQL语句可以拆分成一个或者多个子句表达式(Cid),即:gid—>{cid}+,每个子句表达式只包含一个关系,其中众多规则表达式中的子句表达式(Cid)很多为重复的,例如{‘性别’:‘男’}、{‘年龄’,‘15~20’}等,通过建立映射关系节约查询计算量,其中,在以下的描述中,映射关系包括相应的对应表和相应的倒排表等。
具体地,表一为所述动态的用户标签101的更新处理方法伪代码示意图,为使描述更为清晰准确,以下参考表一,对所述动态的用户标签101的更新处理方法进行进一步描述:
在所述步骤S01中,建立所述映射关系,所述映射关系包括:规则表达式到子句表达式的对应表(Gid—>Cids)、子句表达式到规则表达式的倒排表(Cid—>Gids)、动态的用户标签101到子句表达式的倒排表(Field—>Cids)、用户和一个子句表达式是否命中的位图命中关系(User+Cid—>Bitmap)以及用户命中规则表达式的倒排表(User—>Gids);
在所述步骤S02中,接收用户(User)更新请求后,将待更新用户的用户数据与原有用户数据库的用户数据进行比对,查找一个或多个变化的动态的用户标签101(Field),如未查找到则返回,如查找到则进入步骤S13;
在所述步骤S03中,针对所述变化的动态的用户标签101,查找所述变化的动态的用户标签101在所述动态的用户标签101到子句表达式的倒排表(Field->Cids)中对应的若干子句表达式(Cid),形成子句表达式集合(Cid Set);
在所述步骤S04中,对所述子句表达式集合(Cid Set)里对应的若干子句表达式(Cid),进行所述待更新用户是否命中子句表达式的遍历计算(Cid+User),获得该用户与所述相关子句表达式集合里的子句表达式的命中关系(User+Cid的命中关系);
在所述步骤S04中,将所述步骤S14获得的该用户与所述相关子句表达式集合里的子句表达式的命中关系(User+Cid的命中关系)的命中关系与遍历计算前对应动态的用户标签101和子句表达式的命中位图((User+Cid—>Bitmap)进行相关比对,找到变化的命中关系,若命中关系从以前命中变为现在不命中(命中关系从True>False),则命中关系变化标记为T,若命中关系从以前不命中变为现在命中(命中关系从False—>True),则命中关系变化标记为F;
在所述步骤S06中,对于所述命中关系变化标记为T的相应子句表达式,对每个子句表达式查找子句表达式到规则表达式的倒排表(Cid—>Gids),得到对应的若干规则表达式(Gid),组成规则表达式集合(Gidset),将每一所述规则表达式集合(Gid set)中的每个规则表达式从所述用户命中规则表达式的倒排表(User—>Gids)中删除;
在所述步骤S07中,对所述命中关系变化标记为F的子句,则将所述待更新用户与该命中关系所对应的子句表达式的位图命中更新上传至所述位图命中关系((User+Cid—>Bitmap)中,并查找该命中关系所对应的子句表达式在所述子句表达式到规则表达式的倒排表对应的若干规则表达式(Cid—>Gids),将所述对应的若干规则表达式增加到所述待更新用户的用户命中的规则表达式的倒排表(User—>Gids)中。
综上所述,本申请所述对所述动态的用户标签101的更新处理方法通过将一个规则表达式拆分成多个子句表达式,并建立若干映射关系,利用映射关系进行查询和计算,相当于从细粒度对查询计算结果进行了缓存,因此大幅度加快了计算;同时通过对动态的用户标签101的相关子句表达式进行计算,从计算上进行了剪枝,故大幅减少了计算量,并大幅提高了计算效率。
本领域技术人员应能理解上述对所述动态的用户标签101的更新处理方法的描述仅为举例,其他根据本申请动态的用户标签101的更新处理方法的意图所进行的变型,包括伪代码、编程语言的变化或相应对照表名称等,均在本申请的思想范围之内。
表一:所述动态的用户标签的更新处理方法伪代码示意图
在本申请一实施例另一方面中,对所述动态的用户标签的更新处理方法还包括:根据所述动态的用户标签101内容分类存储,具体包括:将所述动态的用户标签101分为可枚举类、不可枚举可索引类和不可枚举不可索引类;对所述可枚举的动态的用户标签101建立属性数组存储,并采用过滤查询法进行查询;对不可枚举但可索引的动态的用户标签101建立查找树存储,并采用索引法进行查询;对不可枚举且不可索引的动态的用户标签101划分范围存储,并对范围进行编号存储,并采用可索引查询法和可过滤查询法组合查询。
进一步的,在具体的实施例中,对于所述可枚举的动态的用户标签101,通过字典得到数值,例如对于男女属性,可以设定0和1,然后将该0和1数值作为动态的用户标签101记录的一个属性,放到属性数组中,对于可枚举的动态的用户标签101可以合并存储,进而节省内存。对于不可枚举但可索引的动态的用户标签101,通过建立查找树(B+tree),查找树的密钥(Key)为字段值,值(Value)为命中值,形成命中列表(Postinglist)。因为B+树支持上限(Lower_bound),下限查找(Upper_bound),且天然支持范围查询(Range query),也可以支持布尔查询(Boolean query)因此查询简便快速。对于不可枚举且不可索引的动态的用户标签101,例如比如交易笔数,可以先通过对范围进行范围编号,通过范围编号过滤后再做具体的范围过滤,从而节约运算成本,减少计算时间。
此外,在本申请一较佳的实施例中,每个所述动态的用户标签101都具有记录最新更新时间的时间戳,由于动态的用户标签101更新的顺序可能是不定的,故通过为每个所述动态的用户标签101配置一个记录最新更新时间的时间戳,可以记录每一个标签的最新更新时间,以防止被老的更新请求覆盖。其中,在较佳的实施例中,对每个动态的用户标签101设定一个时间戳,其中时间戳可以由一个数组组成,并可连续存放。
本申请所述更新用户所满足的规则的方法,还包括实时接收规则更新请求,通过对用户的动态的用户标签101进行分类查询对照,获得建立满足新规则的用户的映射表。当规则更新时,根据新的规则内容,采用不同的查询方法查询存储方式不同的动态的用户标签101,获得满足新的规则的用户的动态的用户标签101集合。通过对不同的动态的用户标签101建立不同的存储方式和查询方式能够大量节约内存,并且大量减少查询计算量,进而减低查询时间,提高实时性。
本领域技术人员应能理解上述对所述规则更新时对动态的用户标签101的处理方法的描述仅为举例,其他根据本申请对所述规则更新时对动态的用户标签101的处理方法所进行的变型,包括伪代码、编程语言的变化、存储属性数值及存储字段名称等,均在本申请的思想范围之内。
在本申请一较佳的实施例中,对所述在位置的用户标签的更新处理的过程,包括以下步骤:
S11:对所有用户建立空间索引编号,并建立所述用户的全局识别码与所述空间索引编号的映射关系;
S12:传输待更新用户的用户数据,对所述待更新用户分配当地识别码,建立空间索引编号与当地识别码的映射关系;
S13:将所述待更新用户的用户数据与原有用户数据库进行比对,若所述待更新用户以前不存在,则建立新的空间索引编号,若所述待更新用户为原有用户,则检查所述空间索引编号是否有变化,对所述空间索引编号没有发生变化的则更新所述待更新用户的位置的用户标签103的属性信息,对所述空间索引编号发生变化的则删除所述待更新用户原有的当地识别码,建立新的当地识别码,并更新当地识别码与所述空间索引编号的映射关系。
本申请所述在位置的用户标签103的更新处理方法能够满足实时更新用户的位置信息(例如经纬度、道路名称等),能实时查询某一位置的人群数量。以下结合具体实施例详细说明本申请所述对所述在位置的用户标签103的更新处理的过程。
在所述步骤S11中,对所有用户建立空间索引编号以及所述用户的全局识别码(User ID)与所述空间索引编号的映射关系,在较佳的实施例中,可以采用了希尔伯特曲线对所有用户建立空间索引编号(Key)。对较为稳定用户数据,例如性别,属地,年龄段可以用过滤器(Filter)过滤。此外,还可以对每一个空间索引编号进行取模再划分,根据***的中央处理器个数,可以划分为若干分块(Block),能够加大并行量,例如根据***的中央处理器个数,可以划分为若干分块(Block),在每一个分块,为了能够加大并行量,对数据再进行取模划分,比如划分为10个block(具体的数字可以根据***处理能力来确定),每个block负责一个分块的1/10的数据更新和查询。其中,在所述Block的索引存储第一级,可以使用树表(Btree map)存储,Key为空间索引密钥,值(Value)为偏移(Offset)指针指向命中列表(Posting list),所述方法能够高索引查询效率。
在所述步骤S12中,传输待更新用户的用户数据,对所述待更新用户分配当地识别码(Local id),建立空间索引编号与当地识别码的对应表(Key->Local id)。在较佳的实施例中,传输待更新用户的用户数据可以采用所述第二模块305和所述第三模块304分配给所述处理节点处理,也可以利用所述第一模块309采用分布式消息队列(MetaQ)方式对所述位置的用户标签103进行数据更新解耦,并通过关键标记字符(Tag)对位置的用户标签103的数据进行切分,在可选的实施例中,不同的关键标记字符可以通过对每个用户的身份识别码(ID)取模来设定,不同的数据节点负责处理一部分关键标记字符消息,从而方便地做到数据节点的扩容和缩容,进而提高用户更新请求的处理效率。
进一步的,所述用户都具有唯一的全局身份识别码,当用户的所述位置的用户标签103进入一第四模块307后会被分配一个从0开始增长的当地识别码(local id),长度可以为4个字节(Bytes),同时建立所述当地识别码与所述全局身份识别码一一对应的映射关系,空间索引表中的命中列表采用当地识别码进行存储,将所述位置的用户标签103的数据属性存储于连续的缓存中,所述缓存具有以所述当地识别码为下标的偏移指向表。
在所述步骤S13中,当上游发来用户更新数据时,将所述待更新用户的用户数据与原有用户数据库进行比对,若所述待更新用户以前不存在,则建立新的空间索引编号(Key),若所述待更新用户为原有用户,则检查所述空间索引编号(Key)是否有变化,对所述空间索引编号(Key)没有发生变化的则更新所述待更新用户的位置的用户标签103的属性信息,所述位置的用户标签103的属性信息是存储在一个连续的缓存中,可以通过调用所述缓存的当地识别码(Local id)为下表的偏移指向表找到对应位置的用户标签103的属性信息,从而对用户的属性信息进行更新,对所述空间索引编号(Key)发生变化的则删除所述待更新用户原有的当地识别码(Local id),建立新的当地识别码,并更新当地识别码与所述空间索引编号的映射关系。
在较佳的实施例中,将接收的位置的用户标签103的内容与原有用户数据库的位置的用户标签103内容进行比对更新,将接收的位置的用户标签103的内容与原有用户数据库的位置的用户标签103内容进行比对更新的过程中还包括,根据所述位置的用户标签103的变动频繁程度,动态设定更新阀值,并根据负载情况设定更新精度,根据更新精度对位置的用户标签103进行更新。根据***的负载情况来选择更新精度,比如:一般情况下,大于1米的变动都更新;如果用户数据的流量大,可以大于5米以上的变动再更新;如果用户的数据流量非常大,则可以大于20米才更新。这里所述的更新指的是对空间索引(Key)的更新,用户的位置信息例如经纬度信息可以作为位置的用户标签103的属性一直更新,并影响用户数据的准确性。此外用户的经纬度变化了,一些情况下用户的空间索引不需要更新,因此通过所述动态设定更新阈值可以缓解***的负载压力,提高***的处理速度。
本领域技术人员应能理解上述对所述动态设定更新阈值的描述仅为举例,其他根据本申请所述动态设定更新阈值所进行的变型,包括更新阈值的范围、更新方式的变化等,均在本申请的思想范围之内。
在对所述位置的用户标签103的更新处理方法的过程中,还包括,支持数据过期,通过动态设定数据过期期限,删除超过数据过期期限仍未更新的数据。在具体的实施例中,例如一个用户如果上报了一次信息,但再也没有上传(比如关掉应用,网络丢失等),那么现有用户上报的信息可能在一段时间后是过期无效的,因此需要去掉这些数据。在具体的实现中,可以建立一个线程依次扫描每一个分块(Block),检查每条记录是否过期,如果过期则会将用户数据置位删除,并回收资源。
在可选的实施例中,对所述滑动的用户标签105的更新处理方法,包括根据滑动的用户标签105的频繁程度采用不同存储方式以备更新和查询,包括:对于频繁程度高的滑动的用户标签105采用矩阵存储方式,采用矩阵存储方式能够在单个用户非常频繁时对用户数据使用数组可以快速遍历,以支持随机查找并求和;对于频繁程度低的滑动的用户标签105采用链表存储方式,没有行为的时间窗口不存储,节省存储,也节省了查询过程。
此外,在可选的实施例中,所述更新处理***还包括第三装置207,对所述用户标签100的分类还可以包括上下文的用户标签107和静态的用户标签109,由于所述上下文的用户标签107可以直接采用建立函数判断法即可更新处理,实时计算简单易行,故可以由所述第一装置204直接用以处理并返还结果。所述静态的用户标签109可以采用建立索引方法处理,可以进行离线索引查找,所述静态的用户标签109所述第三装置207进行处理,所述第三装置207对实时处理要求不高,可以降低***负载并提高处理效率。
综上所述,本申请所述的通过根据用户标签100的数据活跃程度及内容,将用户标签100划分为动态的用户标签101、位置的用户标签103和滑动的用户标签105等不用类的标签,并针对不同类的标签采用不同的更新处理方法,尤其是对更新最为频繁的动态的用户标签101采用快速有效的更新处理方法,提高了***对用户更新请求的处理能力和处理速度,进而提高用户满足规则的实时更新和查询以提高用户数据更新的效率;进一步的,本申请所述对所述动态的用户标签101的更新处理方法通过建立若干映射关系,利用映射关系进行查询和计算,相当于从细粒度对查询计算结果进行了缓存,因此大幅度加快了计算;同时通过对动态的用户标签101的相关子句表达式进行计算,从计算上进行了剪枝,故大幅减少了计算量,进而大幅提高了计算效率,进一步提高用户满足规则的实时更新和查询以提高用户数据更新的效率。
此外,本发明还提供了一种更新用户所满足的规则的***,其中,包括:
第一装置,用以获得待更新用户的用户数据,根据所述用户数据的属性,将所述用户数据分成不同类别的多个用户标签;
第二装置,用以根据所述用户标签的类别信息,对所述用户标签进行更新处理,以查找变化的用户标签并重新计算所述变化的用户标签所满足的规则。
图5为本申请一实施例中所述更新用户所满足的规则的***的所述更新用户所满足的规则的***框架示意图;如图5所示,所述更新用户所满足的规则的***包括第一装置204和第二装置205,其中:
所述第一装置204用以获得待更新用户的用户数据,根据所述用户数据的属性的不同,对所述用户标签100进行分类并派发,分类包括动态的用户标签,位置的用户标签,滑动的的用户标签等;
所述第二装置205接收所述第一装置204派发的用户标签100,所述对不同类的用户标签100分配给不同的引擎,对不同类的用户标签100采用不同的更新处理方法进行更新返回结果,其中所述第二装置205至少包括若干第一引擎235,所述第一引擎235用以处理所述动态的用户标签101,其中所述第一引擎235对动态的用户标签101的更新处理方法为:建立若干所述动态的用户标签101与规则表达式、子句表达式之间以及所述规则表达式和所述子句表达式之间的命中关系或对应关系的映射关系,利用所述映射关系,找到变化的所述动态的用户标签101相关的子句表达式,并找到所述相关的子句表达式对应的规则表达式,根据与所述相关的子句表达式命中关系的变化情况,对所述待更新用户与用户所满足的规则的集合进行更新。
所述更新用户所满足的规则的***还包括用户更新请求接口201、规则查询接口203、所述用户更新请求接口201用以实时接收用户更新请求,并获得待更新用户的包括一全局识别码和多个用户标签100的用户数据;所述规则查询接口203接收实时规则查询请求并输出所述第一装置204实时归并返还的结果。
在可选的实施例中,所述更新处理***还可以包括第三装置207,对所述用户标签100的分类还可以包括上下文的用户标签107和静态的用户标签109。所述上下文的用户标签107可以采用建立函数判断法处理,实时计算简单易行,而所述静态的用户标签109可以采用建立索引方法处理,可以进行离线索引查找,因此所述上下文的用户标签107可以直接由第一装置201处理,所述静态的用户标签109可以利用实时处理要求不高的第三装置207进行处理,降低***负载并提高处理效率。
本领域技术人员应能理解上述对所述第三装置207的描述仅为举例,其他根据本申请对所述规则更新时对上下文的用户标签107和所述静态的用户标签109所进行的变型,包括名称、存储地址等变化、均在本申请的思想范围之内。
在较佳的实施例中,所述第二装置205中的每个引擎分责且专注负责处理对应的用户标签100。因为用户标签100的多样化,在支持用户使用时,所述实时处理***在将来需要可以支持几百上千的标签,通过建立支持用户标签100的分区服务,使用户标签100可以做到水平扩展,单独维护,***具有良好的扩展性和可维护性,还可以支持不同种类的标签计算最优化。因此,每个标签对应的引擎只处理自己负责的标签,如果规则不包含引擎负责的标签,则该引擎将不被处理;同样,如果用户属性不包含引擎负责的用户标签,就该引擎也不需要进行更新和计算,做到每个引擎极致专注负责。同时,为配合引擎的专注性,建立对应用层有统一的入口,引擎可以选择自己调用的用户标签,从而使实时处理***做了统一支持,无需为特定用户搭建专有的***。
在最优的实施例中,所述第二装置205具有多个引擎,不同的引擎类型处理不同的用户标签,至少包括第一引擎235,所述第一引擎235用以处理所述动态的用户标签101。在较佳的实施例中,所述第二装置205还可以包括第二引擎215和第三引擎255,所述第二引擎215用以处理所述位置的用户标签103,所述第三引擎255用以处理所述滑动的用户标签105。所述动态的用户标签101、位置的用户标签103、滑动的用户标签105的定义及其属性描述与所述用户满足规则的实时更新方法中的相同的用户标签100的定义及其属性描述相同,不再赘述。
在本申请一较佳的实施例中,所述第二装置205将划分为以下几类:第一引擎235、第二引擎215、第三引擎255。在以下的实施例中均以该分类方式为例进行描述,当然本领域技术人员应能理解上述标签类型的描述仅为举例,其他根据数据活跃程度及内容对所述第二装置205进行的划分且处理不同的用户标签进行更新处理的方法及其变型,例如划分为第一引擎235、第二引擎215结合其他本领域技术人员所熟知的标签类型的划分方法等,都在本申请的思想范围之内。至于具体的若干第二装置205如何分配处理哪些用户标签100可以由受众群体与开发人员协商确定,不再赘述。
在用户标签100中,所述动态的用户标签101是数据存储量最大,数据变化频率最高的一类用户标签100,因此如何能够利用所述第一引擎235实现动态的用户标签101的实时更新和实时查询成为本申请的关键技术问题,在本申请实施例的一个方面中,所述第一引擎235采用本申请所述用户满足规则的实时更新方法所述的方法对所述动态的用户标签101进行更新处理。
综上所述,本申请所述第一引擎235对所述动态的用户标签101的更新处理方法通过将一个规则表达式拆分成多个子句表达式,并建立若干映射关系,利用映射关系进行查询和计算,相当于从细粒度对查询计算结果进行了缓存,因此大幅度加快了计算;同时通过对动态的用户标签101的相关子句表达式进行计算,从计算上进行了剪枝,故大幅减少了计算量,并大幅提高了计算效率。
图6为本申请一实施例中所述用户满足规则的实时更新***更新用户所满足的规则的***中第二引擎的框架示意图。结合图6,在较佳的实施例中,所述更新用户所满足的规则的***包括第二引擎215,所述第二引擎215的构架包括第一模块309、第二模块305、第三模块304以及第四模块307,其中所述第一模块309用以传输所述请求用户待更新用户的用户数据;所述若干第一模块305用以传输并分发所述请求用户待更新用户的用户数据,所述第三模块304用以所述用户查询请求和规则更新请求给若干处理节点;以及第四模块307用以对位置的用户标签103进行更新并返回结果。其中,所述第四模块307对所有用户建立空间索引编号以及所述全局识别码与所述空间索引编号的映射关系;传输请求用户待更新用户的用户数据,对所述请求用户待更新用户分配当地识别码,建立空间索引编号与当地识别码的映射关系;将所述请求用户待更新用户的用户数据与原有用户数据库进行比对,若所述请求用户待更新用户以前不存在,则建立新的空间索引编号,若所述请求用户待更新用户为原有用户,则检查所述空间索引编号是否有变化,对所述空间索引编号没有发生变化的则更新所述请求用户待更新用户的位置的用户标签103的属性信息,对所述空间索引编号发生变化的则删除所述请求用户待更新用户原有的当地识别码,建立新的当地识别码,并更新当地识别码与所述空间索引编号的映射关系。
所述第二引擎215的构架还可以包括更新用户数据接口301和检索用户接口303,所述更新用户数据接口301用以接收请求用户待更新用户的用户数据;所述检索用户接口303用以接收检索用户查询请求和规则更新请求。
在本实施例中,所述第一模块205、所述第三模块304以及第四模块307都与外部的服务平台313相连,例如综合的业务运营和管理平台(OSS),用以显示处理状态,统计上报更新结果以及管理进程。
本申请所述第二引擎215能够满足实时处理更新用户的位置信息(例如经纬度、道路名称等),并能实时查询某一位置的人群数量。以下结合具体实施例详细说明本申请所述所述第二引擎215对位置的用户标签103的更新处理的过程。
本申请所述第二引擎215对位置的用户标签103的更新,具体地,对所有用户建立空间索引编号以及所述全局识别码(User ID)与所述空间索引编号的映射关系,在较佳的实施例中,可以采用了希尔伯特曲线对所有用户建立空间索引编号(Key)。对较为稳定用户数据,例如性别,属地,年龄段可以用过滤器(Filter)过滤。此外,还可以对每一个空间索引编号进行取模再划分,根据***的中央处理器个数,可以划分为若干分块(Block),能够加大并行量,例如根据***的中央处理器个数,可以划分为若干分块(Block),在每一个分块,为了能够加大并行量,对数据再进行取模划分,比如划分为10个block(具体的数字可以根据***处理能力来确定),每个block负责一个分块的1/10的数据更新和查询。其中,在所述Block的索引存储第一级,可以使用树表(Btree map)存储,Key为空间索引密钥,值(Value)为偏移(Offset)指针指向命中列表(Posting list),所述方法能够高索引查询效率。
在所述步骤S12中,传输待更新用户的用户数据,对所述待更新用户分配当地识别码(Local id),建立空间索引编号与当地识别码的映射关系(Key->Local id)。在较佳的实施例中,传输待更新用户的用户数据可以采用第一模块309分配给所述第四模块307处理,也可以采用采用分布式消息队列(MetaQ)方式对所述位置的用户标签103进行数据更新解耦,并通过关键标记字符(Tag)对位置的用户标签103的数据进行切分,在可选的实施例中,不同的关键标记字符可以通过对每个用户的身份识别码(ID)取模来设定,不同的数据节点负责处理一部分关键标记字符消息,从而方便地做到数据节点的扩容和缩容,进而提高用户更新请求的处理效率。
进一步的,所述用户都具有唯一的全局身份识别码,当用户的所述位置的用户标签103进入一第四模块307后会被分配一个从0开始增长的当地识别码(local id),长度可以为4个字节(Bytes),同时建立所述当地识别码与所述全局身份识别码一一对应的映射关系,空间索引表中的命中列表采用当地识别码进行存储,将所述位置的用户标签103的数据属性存储于连续的缓存中,所述缓存具有以所述当地识别码为下标的偏移指向表。
在所述步骤S13中,当上游发来用户更新数据时,将所述待更新用户的用户数据与原有用户数据库进行比对,若所述待更新用户以前不存在,则建立新的空间索引编号(Key),若所述待更新用户为原有用户,则检查所述空间索引编号(Key)是否有变化,对所述空间索引编号(Key)没有发生变化的则更新所述待更新用户的位置的用户标签103的属性信息,所述位置的用户标签103的属性信息是存储在一个连续的缓存中,可以通过调用所述缓存的当地识别码(Local id)为下表的偏移指向表找到对应位置的用户标签103的属性信息,从而对用户的属性信息进行更新,对所述空间索引编号(Key)发生变化的则删除所述待更新用户原有的当地识别码(Local id),建立新的当地识别码,并更新当地识别码与所述空间索引编号的映射关系。
在较佳的实施例中,将接收的位置的用户标签103的内容与原有用户数据库的位置的用户标签103内容进行比对更新,将接收的位置的用户标签103的内容与原有用户数据库的位置的用户标签103内容进行比对更新的过程中还包括,根据所述位置的用户标签103的变动频繁程度,动态设定更新阀值,并根据负载情况设定更新精度,根据更新精度对位置的用户标签103进行更新。根据***的负载情况来选择更新精度,比如:一般情况下,大于1米的变动都更新;如果用户数据的流量大,可以大于5米以上的变动再更新;如果用户的数据流量非常大,则可以大于20米才更新。这里所述的更新指的是对空间索引(Key)的更新,用户的位置信息例如经纬度信息可以作为位置的用户标签103的属性一直更新,并影响用户数据的准确性。此外用户的经纬度变化了,一些情况下用户的空间索引不需要更新,因此通过所述动态设定更新阈值可以缓解***的负载压力,提高***的处理速度。
本领域技术人员应能理解上述对所述动态设定更新阈值的描述仅为举例,其他根据本申请所述动态设定更新阈值所进行的变型,包括更新阈值的范围、更新方式的变化等,均在本申请的思想范围之内。
在对所述位置的用户标签103的更新处理方法的过程中,还包括,支持数据过期,通过动态设定数据过期期限,删除超过数据过期期限仍未更新的数据。在具体的实施例中,例如一个用户如果上报了一次信息,但再也没有上传(比如关掉应用,网络丢失等),那么现有用户上报的信息可能在一段时间后是过期无效的,因此需要去掉这些数据。在具体的实现中,可以建立一个线程依次扫描每一个分块(Block),检查每条记录是否过期,如果过期则会将用户数据置位删除,并回收资源。
在可选的实施例中,对所述滑动的用户标签105的更新处理方法,包括根据滑动的用户标签105的频繁程度采用不同存储方式以备更新和查询,包括:对于频繁程度高的滑动的用户标签105采用矩阵存储方式,采用矩阵存储方式能够在单个用户非常频繁时对用户数据使用数组可以快速遍历,以支持随机查找并求和;对于频繁程度低的滑动的用户标签105采用链表存储方式,没有行为的时间窗口不存储,节省存储,也节省了查询过程。
在较佳的实施例中,所述更新用户所满足的规则的***还设置有镜像节点,所述第二装置205中每个计算引擎都有至少一个镜像节点来提供服务,服务于一个计算引擎的多个镜像节点的数据和服务是均等的,例如,在一实施例中,每个计算引擎配有三个镜像节点,每个镜像节点的数据和服务都是均等的,因此如果其中一个镜像节点出现故障,另两个镜像节点可以提供同样的服务。具体的,所述镜像节点的信息保存在ZK框架中,路径命名规则可以为:root/分区号/镜像号,其中所述ZK框架节点存储的内容值为一个protobuf对象,包含rpc ip/port等信息。镜像节点需要保持ZK心跳,当查询的时候,根据镜像节点信息进行查询,如果一个镜像节点连不上,那么可以查询下一个活着的镜像节点。
其中,所述protocolbuf对象(以下简称PB)是谷歌的一种数据交换的格式,它独立于语言,独立于平台。谷歌提供了三种语言的实现:java、c++和python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用xml进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
本领域技术人员应能理解上述对所述镜像节点的描述仅为举例,其他根据本申请所述镜像节点的功能所进行的变型,包括采用的存储方式、使用框架的变化等,均在本申请的思想范围之内。
综上所述,本申请通过建立所述更新用户所满足的规则的***,采用分布式规则计算架构,对用户标签的分布式框架处理,根据用户标签100的数据活跃程度及内容将用户标签100划分为动态的用户标签101、位置的用户标签103和滑动的用户标签105等不用类的标签,建立第二装置205,所述第二装置205包括若干第一引擎235、第二引擎215和第三引擎255,对不同类的用户标签采用不同的处理方法,实现了用户标签的合理分配和实时处理,进一步提高用户更新请求的处理速度。
同时,本申请所述更新用户所满足的规则的***提出了一种第二引擎215的框架,所述第二引擎215接收更新用户和检索用户的更新请求和用户数据,对用户进行分发处理,并采用对每个用户建立空间索引并根据所述空间索引进行存储,在需要进行位置更新时,调用空间索引对用户的位置的用户标签进行更新处理,进而提高了第二引擎215的处理能力和处理效率。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。