发明内容
有鉴于此,本申请提供一种用户活跃数据处理的方法及装置。
根据本申请实施例的第一方面,提供一种用户活跃数据处理的方法,所述方法包括:
获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息;
获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量;
根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值;
判断所述间隔时间值是否满足设定条件;
若所述间隔时间值满足设定条件,则在所述bitmap结构中确定所述目标活跃时间戳信息对应的日期的状态存储位置,并将所述状态存储位置的存储状态设置为活跃状态。
可选地,所述间隔时间值满足设定条件包括:所述间隔时间值为负数且所述间隔时间值的绝对值小于预设阈值,或者,所述间隔时间值为小于或等于预设阈值的正数;
所述在所述bitmap结构中确定所述目标活跃时间戳信息对应的日期的状态存储位置,包括:
根据所述时间偏移量确定最近一次活跃时的日期在所述bitmap结构中的状态存储位置,作为参考存储位置;
若所述间隔时间值为负数且所述间隔时间值的绝对值小于或等于预设阈值,则将所述bitmap结构中位于所述参考存储位置之前的、所述间隔时间值的绝对值的位数所在的位置,作为所述目标活跃时间戳信息对应的日期的状态存储位置;
若所述间隔时间值为小于或等于预设阈值的正数,则在所述bitmap结构中在所述参考存储位置之后偏移所述间隔时间值的位数,得到所述目标活跃时间戳信息对应的日期的状态存储位置。
可选地,根据所述时间偏移量确定最近一次活跃时的日期在所述bitmap结构中的状态存储位置,包括:
在所述bitmap结构中从右往左开始,偏移所述时间偏移量对应的位数,得到最近一次活跃时的日期在所述bitmap结构中的状态存储位置。
可选地,若所述间隔时间值为小于或等于预设阈值的正数,在将所述状态存储位置的存储状态设置为活跃状态之后,所述方法还包括:
将所述参考存储位置与所述状态存储位置之间的位置的状态设置为未活跃状态。
可选地,所述间隔时间值满足设定条件包括:所述间隔时间值为大于预设阈值的正数;
所述在所述bitmap结构中确定所述目标活跃时间戳信息对应的日期的状态存储位置包括:
若所述间隔时间值为大于预设阈值的正数,则设置所述目标用户账号的bitmap结构为预设的初始bitmap结构。
可选地,所述方法还包括:
若所述间隔时间值为正数,则根据所述目标活跃时间戳信息更新所述时间偏移量。
可选地,所述获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期距离预设的初始时间戳信息的时间偏移量,包括:
在预先生成的活跃记录数据库中查找所述目标用户账号,以获得所述目标用户账号对应的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量。
可选地,所述方法还包括:
若在所述活跃记录数据库中没有查找到所述目标用户账号对应的bitmap结构以及所述时间偏移量,则设置所述目标用户账号的bitmap结构为预设的初始bitmap结构,并根据所述目标活跃时间戳信息更新所述时间偏移量。
可选地,所述方法还包括:
若所述间隔时间值不满足设定条件,则不对所述目标用户账号的bitmap结构以及所述时间偏移量进行更新;
其中,所述间隔时间值不满足设定条件包括:所述间隔时间值为负数且所述间隔时间值的绝对值大于预设阈值,或者,当所述间隔时间值为数值0。
可选地,所述根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值,包括:
计算所述目标活跃时间戳信息与所述初始时间戳信息的时间戳差值,并根据所述时间戳差值计算所述目标活跃时间戳信息距离所述初始时间戳信息的目标时间偏移量;
计算所述目标时间偏移量与所述时间偏移量的差值,得到所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
根据本申请实施例的第二方面,提供一种用户活跃数据处理的装置,所述装置包括:
目标活跃数据获取模块,用于获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息;
bitmap及时间偏移量获取模块,用于获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量;
间隔时间值确定模块,用于根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值;
设定条件判断模块,用于判断所述间隔时间值是否满足设定条件;
活跃状态记录模块,用于若所述间隔时间值满足设定条件,则在所述bitmap结构中确定所述目标活跃时间戳信息对应的日期的状态存储位置,并将所述状态存储位置的存储状态设置为活跃状态。
根据本申请实施例的第三方面,提供一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
根据本申请实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述方法的步骤。
本申请提供的方案具有如下有益效果:
在本实施例中,当获取目标用户账户中待处理的目标活跃时间戳信息以后,可以根据该目标用户账户获取对应的bitmap结构以及该目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量,并根据目标活跃时间戳信息、初始时间戳信息以及时间偏移量,确定目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值,若判定该间隔时间值满足设定条件,则在bitmap结构中确定目标活跃时间戳信息对应的日期的状态存储位置,并将状态存储位置的存储状态设置为活跃状态,从容实现通过bitmap结构记录用户账户的各日期的活跃状态,占用较少的存储空间则可以存储数量较多的用户的活跃记录,进而可以优化系统性能,提高系统的运算效率以及其他处理效率。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
参考图1,示出了本申请第一示例性实施例示出的一种用户活跃数据处理的方法实施例的步骤流程图,本实施例具体可以包括如下步骤:
步骤101,获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息。
在一种例子中,目标活跃数据中记录的目标用户账号以及目标活跃时间戳信息可以表示为“Uid+TargetTimestamp”的形式,其中,Uid即目标用户账户,可以是目标用户注册的账号信息;TargetTimestamp即目标活跃时间戳信息,用于标识活跃时的日期信息,示例性地,该时间戳信息可以为秒级时间戳,例如,若时间戳信息为“1546272000”标识的日期信息为“2019/1/10:0:0”。
在一种可能的实施方式中,可以采用如下方式获取待处理的目标活跃数据:获取客户端发送的待处理的目标活跃数据。
该实施例可以应用于服务器中,服务器可以通过但不限于如下方式获取客户端发送的待处理的目标活跃数据:在一种例子中,客户端可以直接向服务器发送待处理的目标活跃数据,则服务器可以直接接收客户端发送的该目标活跃数据。在另一种例子中,客户端可以将待处理的目标活跃数据推到Kafka(Kafka是一种高吞吐量的分布式发布订阅消息系统)消息系统中,则服务器通过消费该消息系统中的消息来获取目标活跃数据。
示例性地,该客户端可以包括但不限于客户方客户端或者调用方客户端。
在一种可能的场景中,该目标活跃数据可以为目标用户账户活跃时的实时活跃数据,当客户端检测到目标用户账户活跃时,则获取当前实时的日期信息,并将该日期信息转换成秒级的时间戳信息,得到目标时间戳信息,然后结合该目标时间戳信息以及目标用户账户得到目标活跃数据。
在另一种可能的场景中,该目标活跃数据还可以为目标用户账户的历史活跃数据,该历史活跃数据中携带有日期信息,客户端可以将该日期信息转换成秒级的时间戳信息,得到目标时间戳信息,然后结合该目标时间戳信息以及目标用户账户得到目标活跃数据。
需要说明的是,对于不同的业务系统而言,用户账户活跃可以由不同的动作触发,本实施例对此不作限定,例如,对于某些业务系统来说,若用户通过用户账户登录业务系统,则可以判定为检测到该用户账户活跃。对于另一些业务系统来说,可以通过检测用户点击某个功能、打开某个页面来判定为该用户账户活跃。
步骤102,获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期距离预设的初始时间戳信息的时间偏移量。
在该实施例中,每个用户账户可以采用一个位图bitmap结构来记录该用户账户一段时间内的状态,示例性地,该状态可以包括活跃状态或者未活跃状态。
bitmap是一个Long类型的数字,可以转化为64位的二进制数,bitmap就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了bit为单位来记录数据,因此在存储空间方面,可以大大节省。在一种例子中,bitmap的二进制数中每一位可以用于记录一天的状态,其中,0表示未活跃状态,1表示活跃状态。
在该实施例中,目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量可以为天数偏移量dayOffset。在一种实现方式中,假设目标用户账户最近一次活跃的日期的时间戳信息为CurrentTimestamp,预设的初始时间戳信息为initTimestamp,则dayOffset的计算公式如下:
dayOffset=(CurrentTimestamp-initTimestamp)/(3600*24)。
在本实施例的一种可能的实施方式中,步骤102可以包括如下子步骤:
在预先生成的活跃记录数据库中查找所述目标用户账号,以获得所述目标用户账号对应的位图bitmap结构以及所述目标用户账户最近一次活跃的日期距离预设的初始时间戳信息的时间偏移量。
在该实施例中,针对每个用户账户而言,当其首次活跃时可以为其创建对应的bitmap结构,并在bitmap结构中记录对应的活跃状态,同时还可以根据最近一次活跃的日期计算dayOffset。随后,可以将该bitmap结构、该dayOffset与该用户账户关联存储在活跃记录数据库中,即活跃记录数据库中可以存储各用户账户对应的bitmap结构及最近一次活跃的日期对应的dayOffset。
示例性地,该活跃记录数据库可以为db数据库,也可以为集群Redis数据库,本实施例对此不作限制。
在该步骤中,当获得目标用户账号以后,可以在活跃记录数据库中查找KEY为该目标用户账号的记录,若查找成功,则可以获得该KEY对应的VALUE为"bitmap:dayOffset"的活跃信息。
例如,假设初始时间戳信息为1546272000(对应的日期为2019/1/1 0:0:0),获得的VALUE为VALUE="33554701:30",其中,bitmap=33554701,对应的二进制值即bitmap结构为“0000000000000000000000000000000000000010000000000000000100001101”;dayOffset=30,其标识目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的天数偏移量为30天,即最近一次活跃的日期为2019/1/31。
根据bitmap:dayOffset可以确定一个时间段内用户账户活跃的日期,例如,从上述33554701对应的bitmap结构可以看出,bitmap结构从右往左第零位代表2019/1/31的活跃标识,第一位代表2019/1/30号,第二位代表2019/1/29号……以此类推。则对应于比特位为1就是用户活跃日期,可以知道,用户在2019/1/31、2019/1/29、2019/1/29、2019/1/28、2019/1/23、2019/1/6号活跃过。
当然,bitmap结构并不限于从右往左开始,也可以是从左往右开始,可以根据不同的业务需求设定。
在本实施例的一种可能的实施方式中,还可以包括如下步骤:
若在所述活跃记录数据库中没有查找到所述目标用户账号对应的bitmap结构以及所述时间偏移量,则设置所述目标用户账号的bitmap结构为预设的初始bitmap结构,并根据所述目标活跃时间戳信息更新所述时间偏移量。
在该实施例中,如果在活跃记录数据库中没有找到KEY为目标用户账户对应的VALUE,即获取不到bitmap:dayOffset活跃信息,则可以进行初始化操作,首先可以设置目标用户账号的bitmap结构为预设的初始bitmap结构,例如,设置bitmap=1。然后可以根据目标活跃时间戳信息更新时间偏移量dayOffset,使得dayOffset=(TargetTimestamp-initTimestamp)/(3600*24)。
步骤103,根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
在该步骤中,当获得目标用户账户对应的bitmap:dayOffset以后,可以根据该dayOffset以及目标活跃时间戳信息,确定目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值activeDayGap。
在一种可能的实施方式中,步骤103可以包括如下子步骤:
子步骤S11,计算所述目标活跃时间戳信息与所述初始时间戳信息的时间戳差值,并根据所述时间戳差值计算所述目标活跃时间戳信息距离所述初始时间戳信息的目标时间偏移量。
例如,假设时间戳信息为秒级时间戳信息,则目标活跃时间戳信息距离初始时间戳信息的目标时间偏移量的计算公式如下:
目标时间偏移量=(TargetTimestamp-initTimestamp)/(3600*24)。
子步骤S12,计算所述目标时间偏移量与所述时间偏移量的差值,得到所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
例如,根据上述目标时间偏移量的计算公式,则目标时间偏移量与最近一次活跃时的时间偏移量的差值得到的间隔时间值的计算公式为:
activeDayGap=(currentTimestamp-initTimestamp)/(3600*24)-dayOffset。
步骤104,判断所述间隔时间值是否满足设定条件。
在该步骤中,设定条件可以根据不同的业务需求而不同,例如,设定条件可以包括预设阈值,该预设阈值可以设定为小于或等于bitmap的二进制数值的长度(或位数)。
步骤105,若所述间隔时间值满足设定条件,则在所述bitmap结构中确定所述目标活跃时间戳信息对应的日期的状态存储位置,并将所述状态存储位置的存储状态设置为活跃状态。
在该步骤中,当目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值满足设定条件时,则可以在bitmap的二进制结构中记录该目标活跃时间戳信息对应的日期的状态。
在一种实现中,由于bitmap二进制结构中每一bit位表示一个单位时间,例如,一位表示一天。则可以首先确定最近一次活跃的日期在bitmap结构中所处的位置,然后根据该最近一次活跃的日期在bitmap结构中所处的位置以及上述间隔时间值,计算目标活跃时间戳信息对应的日期在bitmap结构中的状态存储位置,并将该状态存储位置的状态设置为活跃状态,从而完成状态的记录。
通过bitmap中记录的用户活跃状态,还可以便于区分不同活跃度的用户,从而实现定制化运营,提高用户的留存。
在本实施例中,当获取目标用户账户中待处理的目标活跃时间戳信息以后,可以根据该目标用户账户获取对应的bitmap结构以及该目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量,并根据目标活跃时间戳信息、初始时间戳信息以及时间偏移量,确定目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值,若判定该间隔时间值满足设定条件,则在bitmap结构中确定目标活跃时间戳信息对应的日期的状态存储位置,并将状态存储位置的存储状态设置为活跃状态,从容实现通过bitmap结构记录用户账户的各日期的活跃状态,占用较少的存储空间则可以存储数量较多的用户的活跃记录,进而可以优化系统性能,提高系统的运算效率以及其他处理效率。
参考图2,示出了本申请第二示例性实施例示出的一种用户活跃数据处理的方法实施例的步骤流程图,本实施例具体可以包括如下步骤:
步骤201,获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息。
步骤202,获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量。
步骤203,根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
步骤204,若判定所述间隔时间值为负数且所述间隔时间值的绝对值小于预设阈值,则根据所述时间偏移量确定最近一次活跃时的日期在所述bitmap结构中的状态存储位置,作为参考存储位置。
在实际中,目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值可以为正数、负数或者数值0。如果该间隔时间值为负数,表示目标活跃时间戳信息对应的日期在最近一次活跃的日期之前,即该目标活跃数据为历史活跃数据。如果该间隔时间值为正数,表示目标活跃时间戳信息对应的日期在最近一次活跃的日期之后,即该目标活跃数据为实时的活跃数据。如果该间隔时间值为数值0,表示目标活跃时间戳信息对应的日期与最近一次活跃的日期为同一天。
在该步骤中,针对间隔时间值为负数的场景,可以进一步判断该间隔时间值的绝对值是否小于预设阈值。示例性地,预设阈值可以根据实际情况确定,但是不能超过bitmap的二进制数值的bit位数,例如,假设bitmap的二进制数值的bit位数为24位,则预设阈值可以设定为60,即-60<activeDayGap<0。
若间隔时间值为负数且其绝对值小于预设阈值,则可以确定最近一次活跃时的日期在bitmap结构中的状态存储位置,作为参考存储位置。
在本实施例的一种可能的实施方式中,其中一种根据时间偏移量确定最近一次活跃时的日期在bitmap结构中的状态存储位置的方式可以为:在bitmap结构中从右往左开始,偏移该时间偏移量对应的位数,得到最近一次活跃时的日期在bitmap结构中的状态存储位置。
例如,假设bitmap结构中第0位表示的时间偏移量为0,而最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量为3,若bitmap结构可以为:“1001”,则按照从右往左的方向从第0位开始偏移3位,得到该结构中最左边的“1”所处的位置即为最近一次活跃时的日期在bitmap结构中的状态存储位置,该位置可以称为参考存储位置。
步骤205,将所述bitmap结构中位于所述参考存储位置之前的、所述间隔时间值的绝对值的位数所在的位置,作为所述目标活跃时间戳信息对应的日期的状态存储位置。
在该步骤中,针对间隔时间值为负数的场景,即目标活跃时间戳信息对应的日期在最近一次活跃的日期之前,此时目标活跃时间戳信息对应的日期的状态存储位置可以位于参考存储位置之前,其中,位于参考存储位置之前可以理解为该状态存储位置在第0位(包括第0位)与参考存储位置之间,在这个位置区间内,可以根据间隔时间值的绝对值来确定目标活跃时间戳信息对应的日期的状态存储位置。例如,可以从参考存储位置之前的一位开始,往回数该间隔时间值的绝对值位数,则可以得到该状态存储位置。
例如,针对上述bitmap结构为“1001”的例子,假设初始时间戳信息为2019/1/1(为了便于理解,此处将时间戳信息表示为年月日的日期形式,实际上在处理时该时间戳信息为该日期的秒级时间戳,下同),最近一次活跃的日期为2019/1/4,目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值为-2,则在“1001”的bitmap结构中,从最左边的数值“1”的前一位开始,往回数|-2|位数,得到从右往左开始第1位(从第0位开始)的位置为状态存储位置。
步骤206,将所述状态存储位置的存储状态设置为活跃状态。
在该步骤中,当确定状态存储位置以后,可以判断该状态存储位置对应的数值是否为“1”,若该数值为“0”则表示该日期没有活跃记录,则需要在该位置中补齐活跃记录,即将该位置的数值设置为“1”;若该数值为“1”则不作处理。
例如,针对上例,得到状态存储位置,bitmap结构“1001”更新为“1011”,从右往左分别表示该账号中2019/1/1、2019/1/2、2019/1/4的状态为活跃状态。
在本实施例中,针对间隔时间值为负数且其绝对值小于或等于预设阈值的场景,确定最近一次活跃时的日期在bitmap结构中的参考存储位置以后,可以根据该参考存储位置将bitmap结构中位于该参考存储位置之前的、该间隔时间值的绝对值的位数所在的位置,作为目标活跃时间戳信息对应的日期的状态存储位置,然后将该状态存储位置的存储状态设置为活跃状态,从而灵活实现对历史活跃数据的活跃状态的记录,便于对历史活跃数据的管理。
参考图3,示出了本申请第三示例性实施例示出的又一种用户活跃数据处理的方法实施例的步骤流程图,本实施例具体可以包括如下步骤:
步骤301,获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息。
步骤302,获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量。
步骤303,根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
步骤304,若判定所述间隔时间值为小于或等于预设阈值的正数,则根据所述时间偏移量确定最近一次活跃时的日期在所述bitmap结构中的状态存储位置,作为参考存储位置。
示例性地,预设阈值可以根据实际情况确定,但是不能超过bitmap的二进制数值的bit位数,例如,假设bitmap的二进制数值的bit位数为24位,则预设阈值可以设定为60。
确定参考存储位置的方式可以参考步骤204的描述,此处不再赘述了。
步骤305,在所述bitmap结构中在所述参考存储位置之后偏移所述间隔时间值的位数,得到所述目标活跃时间戳信息对应的日期的状态存储位置,并将所述状态存储位置的存储状态设置为活跃状态。
在该步骤中,针对间隔时间值为正数的场景,即目标活跃时间戳信息对应的日期在最近一次活跃的日期之后,此时目标活跃时间戳信息对应的日期的状态存储位置位于参考存储位置之后,在该参考存储位置之后偏移该间隔时间值的位数则可以得到该目标活跃时间戳信息对应的日期的状态存储位置。
示例性地,当60>activeDayGap>0时,则可以采用如下公式更新bitmap,以在bitmap中记录当前的活跃状态:若bitmap从右往左开始,则从参考存储位置之后的位置开始左移activeDayGap得到目标活跃时间戳信息对应的日期的状态存储位置。
例如,用户在1月3日活跃过,对应于bitmap是00000000…00000001,假如1月5日又活跃,那么activeDayGap=2,bitmap左移2位,则目标活跃时间戳信息对应的日期的状态存储位置为bitmap中从右往左的第3位,将该位置的状态设置为活跃状态后得到的bitmap为00000000…00000101。
步骤306,将所述参考存储位置与所述状态存储位置之间的位置的状态设置为未活跃状态。
例如,在上例中,用户1月3日和1月5日用户活跃,但未收到1月4日用户活跃的数据,因此将1月4日的状态设置为未活跃状态“0”。
步骤307,根据所述目标活跃时间戳信息更新所述时间偏移量。
针对间隔时间值为正数的场景,除了要更新bitmap以外,还需要更新时间偏移量dayOffset,因为此时最近一次活跃的日期变成了目标活跃时间戳信息对应的日期。
在一种实施方式中,dayOffset的更新方式如下:
dayOffset=(TargetTimestamp-initTimestamp)/(3600*24)。
在本实施例中,针对间隔时间值为小于或等于预设阈值的正数的场景,确定最近一次活跃时的日期在bitmap结构中的参考存储位置以后,可以根据该参考存储位置偏移该间隔时间值的位数,得到目标活跃时间戳信息对应的日期的状态存储位置,然后将该状态存储位置的存储状态设置为活跃状态,同时根据目标时间戳信息更新时间偏移量,从而快速实现对实时活跃数据的活跃状态的记录,而无需另外增加一条关于实时活跃数据的记录,节省了存储空间,也便于对活跃数据的管理。
参考图4,示出了本申请第四示例性实施例示出的又一种用户活跃数据处理的方法实施例的步骤流程图,本实施例具体可以包括如下步骤:
步骤401,获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息。
步骤402,获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量。
步骤403,根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
步骤404,若判定所述间隔时间值为大于预设阈值的正数,则设置所述目标用户账号的bitmap结构为预设的初始bitmap结构。
例如,当activeDayGap>60,则表明bitmap中已记录的活跃记录已经超过60天了,而bitmap用于维护最近60天内的活跃记录,因此在这种场景下可以将bitmap初始化,即将bitmap结构初始化为预设的初始bitmap结构,例如,初始化bitmap=1。
步骤405,根据所述目标活跃时间戳信息更新所述时间偏移量。
针对间隔时间值为大于预设阈值的正数的场景,除了要更新bitmap以外,还需要更新时间偏移量dayOffset,因为此时最近一次活跃的日期变成了目标活跃时间戳信息对应的日期。
在一种实施方式中,dayOffset的更新方式如下:
dayOffset=(TargetTimestamp-initTimestamp)/(3600*24)。
在本实施例中,针对间隔时间值为大于预设阈值的正数的场景,通过设置bitmap结构为预设的初始bitmap结构来完成bitmap的及时更新,确保bitmap记录的是最近一段时间的活跃记录,通过bitmap提供合理的数据存储结构,占用较少的存储空间。
参考图5,示出了本申请第五示例性实施例示出的又一种用户活跃数据处理的方法实施例的步骤流程图,本实施例具体可以包括如下步骤:
步骤501,获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息。
步骤502,获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量。
步骤503,根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
步骤504,若所述间隔时间值为数值0,则不对所述目标用户账号的bitmap结构以及所述时间偏移量进行更新。
在该实施例中,当间隔时间值为数值0时,即activeDayGap==0,表示目标时间戳信息对应的日期与最近一次活跃的日期为同一天,因此当天已活跃过,不需要再更新bitmap以及时间偏移量了。
在本实施例中,针对间隔时间值为数值0的场景支持幂等性,即不对bitmap结构以及时间偏移量进行更新,这样无论获取到多少次间隔时间值为数值0对应的活跃数据,都不会活跃记录的存储结果产生影响,提高了高并发数据的安全性。
参考图6,示出了本申请第六示例性实施例示出的又一种用户活跃数据处理的方法实施例的步骤流程图,本实施例具体可以包括如下步骤:
步骤601,获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息。
步骤602,获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量。
步骤603,根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
步骤604,若所述间隔时间值为负数且所述间隔时间值的绝对值大于预设阈值,则不对所述目标用户账号的bitmap结构以及所述时间偏移量进行更新。
示例性地,假设activeDayGap<=-60,则表示这是用户60天前的活跃信息,不属于bitmap支持的近段时间的记录,属于无效记录,因此可以不需要更新bitmap结构以及时间偏移量。
在本实施例中,针对间隔时间值为负数且间隔时间值的绝对值大于预设阈值,则不对目标用户账号的bitmap结构以及时间偏移量进行更新,以避免浪费bitmap的存储资源。
与前述方法的实施例相对应,本申请还提供了一种用户活跃数据处理的装置实施例。
本申请的装置实施例可以应用在终端设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图7所示,为本申请的装置所在设备的一种硬件结构图,除了图7所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常根据该装置的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图8,示出了本申请一示例性实施例示出的一种用户活跃数据处理的装置实施例的结构框图,所述装置可以包括如下模块:
目标活跃数据获取模块801,用于获取待处理的目标活跃数据,所述目标活跃数据包括目标用户账号以及目标活跃时间戳信息;
bitmap及时间偏移量获取模块802,用于获取用于记录所述目标用户账号的状态的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量;
间隔时间值确定模块803,用于根据所述目标活跃时间戳信息、所述初始时间戳信息以及所述时间偏移量,确定所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值;
设定条件判断模块804,用于判断所述间隔时间值是否满足设定条件;
活跃状态记录模块805,用于若所述间隔时间值满足设定条件,则在所述bitmap结构中确定所述目标活跃时间戳信息对应的日期的状态存储位置,并将所述状态存储位置的存储状态设置为活跃状态。
在本实施例的一种可能的实施方式中,所述间隔时间值满足设定条件包括:所述间隔时间值为负数且所述间隔时间值的绝对值小于预设阈值,或者,所述间隔时间值为小于或等于预设阈值的正数;
所述活跃状态记录模块805包括:
参考存储位置确定子模块,用于根据所述时间偏移量确定最近一次活跃时的日期在所述bitmap结构中的状态存储位置,作为参考存储位置;
第一状态存储位置确定子模块,用于若所述间隔时间值为负数且所述间隔时间值的绝对值小于或等于预设阈值,则将所述bitmap结构中位于所述参考存储位置之前的、所述间隔时间值的绝对值的位数所在的位置,作为所述目标活跃时间戳信息对应的日期的状态存储位置;
第二状态存储位置确定子模块,用于若所述间隔时间值为小于或等于预设阈值的正数,则在所述bitmap结构中在所述参考存储位置之后偏移所述间隔时间值的位数,得到所述目标活跃时间戳信息对应的日期的状态存储位置。
在本实施例的一种可能的实施方式中,所述参考存储位置确定子模块具体用于:
在所述bitmap结构中从右往左开始,偏移所述时间偏移量对应的位数,得到最近一次活跃时的日期在所述bitmap结构中的状态存储位置。
在本实施例的一种可能的实施方式中,若所述间隔时间值为小于或等于预设阈值的正数,所述活跃状态记录模块805还用于:
在将所述状态存储位置的存储状态设置为活跃状态之后,将所述参考存储位置与所述状态存储位置之间的位置的状态设置为未活跃状态。
在本实施例的一种可能的实施方式中,所述间隔时间值满足设定条件包括:所述间隔时间值为大于预设阈值的正数;
所述所述活跃状态记录模块805还用于:
若所述间隔时间值为大于预设阈值的正数,则设置所述目标用户账号的bitmap结构为预设的初始bitmap结构。
在本实施例的一种可能的实施方式中,所述装置还包括:
时间偏移量更新模块,用于若所述间隔时间值为正数,则根据所述目标活跃时间戳信息更新所述时间偏移量。
在本实施例的一种可能的实施方式中,所述bitmap及时间偏移量获取模块802具体用于:
在预先生成的活跃记录数据库中查找所述目标用户账号,以获得所述目标用户账号对应的位图bitmap结构以及所述目标用户账户最近一次活跃的日期的时间戳信息距离预设的初始时间戳信息的时间偏移量。
在本实施例的一种可能的实施方式中,所述装置还包括:
初始化模块,用于若在所述活跃记录数据库中没有查找到所述目标用户账号对应的bitmap结构以及所述时间偏移量,则设置所述目标用户账号的bitmap结构为预设的初始bitmap结构,并根据所述目标活跃时间戳信息更新所述时间偏移量。
在本实施例的一种可能的实施方式中,所述活跃状态记录模块还用于:
若所述间隔时间值不满足设定条件,则不对所述目标用户账号的bitmap结构以及所述时间偏移量进行更新;
其中,所述间隔时间值不满足设定条件包括:所述间隔时间值为负数且所述间隔时间值的绝对值大于预设阈值,或者,当所述间隔时间值为数值0。
在本实施例的一种可能的实施方式中,所述间隔时间值确定模块具体用于:
计算所述目标活跃时间戳信息与所述初始时间戳信息的时间戳差值,并根据所述时间戳差值计算所述目标活跃时间戳信息距离所述初始时间戳信息的目标时间偏移量;
计算所述目标时间偏移量与所述时间偏移量的差值,得到所述目标活跃时间戳信息对应的日期距离最近一次活跃的日期的间隔时间值。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法实施例的步骤。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述方法实施例的步骤。
本说明书中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本说明书中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本说明书中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如车载终端、移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及CD ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。