发明内容
本申请解决的技术问题在于提供一种数据更新方法及装置,以提高及时发现系统BUG、恶意篡改等异常修改数据的行为的概率,进一步提高账户信息的安全性。
为此,本申请解决技术问题的技术方案是:
本申请提供了一种数据更新方法,包括:
当前检测到数据变更请求;
获取当前检测到的所述数据变更请求的请求时间,作为当前变更时间;所述当前变更时间所在的账户周期为当前结算周期;
比较所述当前变更时间和最近变更时间;所述最近变更时间为距离当前最近的数据变更请求的请求时间;
若所述当前变更时间和所述最近变更时间不在同一账户周期内,且所述当前变更时间晚于所述最近变更时间,将上一结算周期的数据更新为当前数据、将所述最近变更时间更新为所述当前变更时间、以及,在更新所述上一结算周期的数据之后,根据所述当前检测到的所述数据变更请求更新当前数据;
若所述当前变更时间和所述最近变更时间在同一账户周期内,根据所述当前检测到的所述数据变更请求更新当前数据。
可选的,所述方法还包括:
若所述当前变更时间和所述最近变更时间不在同一账户周期内,且所述当前变更时间晚于所述最近变更时间,将上一结算周期更新为所述最近变更时间所在的账户周期与所述当前结算周期的前一账户周期之间的任一账户周期;
所述将所述最近变更时间更新为所述当前变更时间,包括:
在更新所述上一结算周期之后,将所述最近变更时间更新为所述当前变更时间。
可选的,在执行所述比较所述当前变更时间和最近变更时间之前,还包括:
比较所述当前变更时间和上一结算周期;
若所述当前变更时间晚于所述上一结算周期,才执行所述比较所述当前变更时间和最近变更时间;
若所述当前变更时间早于所述上一结算周期或者与所述上一结算周期在同一账户周期内,根据所述当前检测到的所述数据变更请求分别更新上一结算周期的数据和当前数据。
可选的,还包括:比较所述当前变更时间和上一结算周期;
若比较所述当前变更时间和上一结算周期的比较结果为所述当前变更时间晚于所述上一结算周期,以及比较所述当前变更时间和最近变更时间的比较结果为所述当前变更时间和所述最近变更时间不在同一账户周期内,且所述当前变更时间早于所述最近变更时间,则执行:
根据所述当前检测到的所述数据变更请求分别更新上一结算周期的数据和当前数据,并且将所述上一结算周期更新为所述当前变更时间所在的账户周期。
可选的,所述方法还包括:
检测到数据查询请求;所述数据查询请求用于查询上一账户周期的数据;
获取所述数据查询请求的请求时间,作为查询时间;
比较所述查询时间和所述最近变更时间;
若所述查询时间与所述最近变更时间在同一账户周期,将上一结算周期的数据作为上一账户周期的数据;
若所述查询时间与所述最近变更时间不在同一账户周期,且所述查询时间晚于所述最近更新时间,将当前数据作为上一账户周期的数据。
可选的,一个总账户对应至少一个分账户;
所述当前检测到数据变更请求,包括:
当前检测到所述至少一个分账户中任一分账户的数据变更请求;
所述上一账户周期的数据为该分账户在上一账户周期的数据;
所述方法还包括:
根据产生的账户明细计算所述总账户在上一账户周期的数据;
根据所述多个分账户中各个分账户在上一账户周期的数据,以及所述总账户在上一账户周期的数据,进行总分核对。
本申请还提供了一种数据更新装置,包括:
检测单元,用于当前检测到数据变更请求;
获取单元,用于获取当前检测到的所述数据变更请求的请求时间,作为当前变更时间;所述当前变更时间所在的账户周期为当前结算周期;
比较单元,用于比较所述当前变更时间和最近变更时间;所述最近变更时间为距离当前最近的数据变更请求的请求时间;
若所述当前变更时间和所述最近变更时间不在同一账户周期内,且所述当前变更时间晚于所述最近变更时间,所述比较单元将上一结算周期的数据更新为当前数据、将所述最近变更时间更新为所述当前变更时间、以及,在更新所述上一结算周期的数据之后,根据所述当前检测到的所述数据变更请求更新当前数据;
若所述当前变更时间和所述最近变更时间在同一账户周期内,所述比较单元根据所述当前检测到的所述数据变更请求更新当前数据。
可选的,所述比较单元还用于,
若所述当前变更时间和所述最近变更时间不在同一账户周期内,且所述当前变更时间晚于所述最近变更时间,将上一结算周期更新为所述最近变更时间所在的账户周期与所述当前结算周期的前一账户周期之间的任一账户周期;
所述比较单元用于将所述最近变更时间更新为所述当前变更时间,包括:
所述比较单元用于在更新所述上一结算周期之后,将所述最近变更时间更新为所述当前变更时间。
可选的,所述比较单元还用于,在执行所述比较所述当前变更时间和最近变更时间之前,比较所述当前变更时间和上一结算周期;
若所述当前变更时间晚于所述上一结算周期,所述比较单元才执行所述比较所述当前变更时间和最近变更时间;
若所述当前变更时间早于所述上一结算周期或者与所述上一结算周期在同一账户周期内,所述比较单元根据所述当前检测到的所述数据变更请求分别更新上一结算周期的数据和当前数据。
可选的,比较单元还用于,
比较所述当前变更时间和上一结算周期;
若比较所述当前变更时间和上一结算周期的比较结果为所述当前变更时间晚于所述上一结算周期,以及比较所述当前变更时间和最近变更时间的比较结果为所述当前变更时间和所述最近变更时间不在同一账户周期内,且所述当前变更时间早于所述最近变更时间,则所述比较单元执行:
根据所述当前检测到的所述数据变更请求分别更新上一结算周期的数据和当前数据,并且将所述上一结算周期更新为所述当前变更时间所在的账户周期。
可选的,所述检测单元还用于,检测到数据查询请求;所述数据查询请求用于查询上一账户周期的数据;
所述获取单元还用于,获取所述数据查询请求的请求时间,作为查询时间;
所述比较单元还用于,若所述查询时间与所述最近变更时间在同一账户周期,将上一结算周期的数据作为上一账户周期的数据;若所述查询时间与所述最近变更时间不在同一账户周期,且所述查询时间晚于所述最近更新时间,将当前数据作为上一账户周期的数据。
可选的,一个总账户对应至少一个分账户;
所述检测单元用于当前检测到数据变更请求,包括:
所述检测单元用于当前检测到所述至少一个分账户中任一分账户的数据变更请求;
所述上一账户周期的数据为该分账户在上一账户周期的数据;
所述装置还包括:
计算单元,用于根据产生的账户明细计算所述总账户在上一账户周期的数据;
核对单元,用于根据所述多个分账户中各个分账户在上一账户周期的数据,以及所述总账户在上一账户周期的数据,进行总分核对。
通过上述技术方案可知,本申请实施例中,不再是每个账户周期结束时都根据账户明细推算出数据,而是当前检测到数据变更请求,即检测到对数据的变更操作时,将当前变更时间所在的账户周期作为当前结算周期,通过对当前变更时间和最近变更时间比较,判断出当前变更时间相比于最近变更时间是否已经跨越了一个账户周期,从而根据判断结果对当前数据、上一结算周期的数据和最近变更时间进行更新。可见本申请实施例中,通过检测数据变更请求,实现了对上一结算周期的数据和当前数据的更新,以实现能够查询出查询时间对应的上一账户周期的数据(其值可能为上一结算周期的数据或者当前数据),由于数据变更请求能够真实反映数据变动情况,从而使得查询时间对应的上一账户周期的数据也能够真实反映数据情况,以提高及时发现系统BUG、恶意篡改等异常修改数据的行为的概率,进一步提高账户信息的安全性。
此外,本申请实施例由于不用每个账户周期结束时都推算数据,而是仅仅在检测到数据变更请求时后进行数据更新,因此减少了计算量,从而节约了系统开销。
具体实施方式
目前常用的数据更新方式是,在每个账户周期结束时,启动定时任务,获取在该账户周期内的所有账户明细,由于根据业务请求发生数据变动时,都会生成相应的账户明细,因此根据账户周期开始时的数据以及该账户周期内所有的账户明细,能够推算账户周期结束时的数据,根据推算出的结果定期更新数据。
然而,当系统BUG、恶意篡改等异常修改数据的行为发生时,并不会生成相应的账户明细,因此根据上述更新方式查询到的上一账户周期的数据,不能反映出数据的真实情况,也就是说不能反映出被篡改后的数据,因此导致很难及时发现系统BUG、恶意篡改等异常修改数据的行为,进一步导致账户信息的安全性很低。例如以总分核对的场景举例说明,如果恶意篡改了某一分账户的数据,此时查询到的该分账户在上一账户周期的数据,以及总账户在上一账户周期的数据,均不能反映出被篡改后的数据,因此即使通过对总账户和各个分账户的总分核对,也无法及时发现这种篡改行为。
此外,上述更新方式由于每个账户周期结束时,都会根据账户明细推算一次数据,工作量较大,造成了额外的系统开销。
在本申请实施例中,提供了一种数据更新方法及装置,以提高及时发现系统BUG、恶意篡改等异常修改数据的行为的概率,进一步提高账户信息的安全性。此外,本申请实施例还能减少计算量,以节约系统开销。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参阅图1,本申请实施例提供了数据更新方法的一种实施例,本实施例中的方法包括:
S101:当前检测到数据变更请求。
在本申请实施例中,数据变更请求指的是对数据进行变更操作的请求,而检测数据变更请求可以通过检测变更操作的指令实现。例如在SQL架构下,每检测到对数据的UPDATE等变更操作的指令,即相当于检测到数据变更请求。可见,数据变更请求能够真实反映出数据变动情况,尤其是当系统BUG、恶意篡改等异常修改数据的行为发生时,即使不会生成相应的账户明细,仍然会产生相应的数据变更请求。
S102:获取当前检测到的数据变更请求的请求时间,作为当前变更时间;当前变更时间所在的账户周期为当前结算周期。
其中,数据变更请求的请求时间,一般指的是生成或者发出数据变更请求的时间,并且将该请求时间作为当前变更时间。
在本申请实施例中,通过设置账户周期,以对数据进行定期更新。其中,设置的账户周期可以是固定时段,例如以自然日为单位,也可以是可变时段,本申请中并不加以限定。
在本申请实施例中,当前变更时间所在的账户周期,即为当前结算周期。也就是说在本申请实施例中,每当接收到一次数据变更请求,就将数据变更请求的请求时间所在的账户周期作为结算周期,假设账户周期以自然日为单位,结算周期就是每个接收到数据变更请求的自然日。例如,本月1日接收到数据变更请求,该日既为一个账户周期,也为一个结算周期,本月2日没有接收到数据变更请求,则该日仅为账户周期,并不作为结算周期。实际上,本申请中仅仅在接收到数据变更请求,即在结算周期时进行判断,是否需要对当前数据和上一结算周期的数据进行更新,而无需在每个账户周期都推算数据。
S103:比较当前变更时间和最近变更时间,最近变更时间为距离当前最近的数据变更请求的请求时间。若当前变更时间和所述最近变更时间不在同一账户周期内,且当前变更时间晚于最近变更时间,执行步骤S104;若当前变更时间和最近变更时间在同一账户周期内,执行步骤S105。
实际上本步骤中比较当前变更时间和最近变更时间,即比较当前检测到的数据变更请求的请求时间和距离当前最近的数据变更请求的请求时间,从而判断出当前变更时间相比于最近变更时间是否已经跨越了一个账户周期。其中,若比较结果表示当前变更时间相比于最近变更时间,已经跨越了一个账户周期,即当前变更时间和最近变更时间不在同一账户周期内,且当前变更时间晚于最近变更时间,则执行步骤S104;若比较结果表示当前变更时间仍属于最近变更时间所在的账户周期,即当前变更时间和最近变更时间在同一账户周期内,则执行步骤S105。
需要说明的是,本申请实施例中当前变更时间和最近变更时间,均可以与账户周期具有相同的单位,例如账户周期以自然日为单位,则当前变更时间和最近变更时间也可以均以自然日为单位,因此通过直接比较当前变更时间和最近变更时间的大小,即能判断出这两个时间是否位于同一账户周期内。下面举例说明,账户周期以自然日为单位,当前变更时间是本月17日,最近变更时间是本月14日,通过直接比较当前变更时间和最近变更时间的大小,即能判断出当前变更时间大于最近变更时间,因此当前变更时间不与最近变更时间位于同一账户周期内。
S104:将上一结算周期的数据更新为当前数据、将最近变更时间更新为当前变更时间、以及,在更新上一结算周期的数据之后,根据当前检测到的数据变更请求更新当前数据。
此时当前变更时间相比于最近变更时间,已经跨越了一个账户周期,因此需要对上一结算周期的数据进行结算,实际上,上一结算周期的数据等于当前数据,因此将上一结算周期的数据更新为当前数据。并且在对上一结算周期的数据进行结算之后,根据当前检测到的数据变更请求更新当前数据,即,根据当前检测到的数据变更请求中的变更数值,更新当前数据。例如账户周期以自然日为单位,当前变更时间是本月17日,最近变更时间是本月14日,在当前检测到数据变更请求时,当前数据为50,因此将上一结算周期的数据更新为50,之后根据数据变更请求的变更数值,比如+10,将当前数据更新为50+10。
在本步骤中除了对上一结算周期的数据和当前数据进行更新外,还会将最近变更时间更新为当前变更时间,这是因为对于下一数据变更、查询等操作来说,最近变更时间即等于当前变更时间。例如仍以上述例子说明,将最近变更时间更新从本月14日更新为本月17日。
本步骤中还可以对上一结算周期进行更新,具体地,可以将上一结算周期更新为最近变更时间所在的账户周期,而实际上在最近变更时间所在的账户周期,至当前结算周期的前一账户周期之间,数据都没有发生变化,因此实际上可以将上一结算结算周期更新为最近变更时间所在的账户周期与当前结算周期的前一账户周期之间的任一账户周期。例如仍以上述例子说明,由于最近更新时间为本月14日,当前变更时间为本月17日,因此说明从本月14日至本月16日之间,数据都没有发生变化,因此将上一结算周期更新为本月14日、15日、16日中的任一天。需要说明的是,此时上述对最近变更时间的更新,应该在更新上一结算周期之后进行。需要说明的是,在本申请实施例中所提及的数据,具体可以是与账户信息相关的任何数据,例如,数据可以具体包括账户余额,此时本申请实施例实际上是对账户余额的一种更新方式。
S105:根据当前检测到的数据变更请求更新当前数据。
此时当前变更时间仍属于最近变更时间所在的账户周期,也就是说当前变更时间还未到达上一结算周期的结束时间,因此本步骤中仍然保持上一结算周期、以及上一结算周期的数据不变,对当前数据进行更新即可。例如账户周期以自然日为单位,当前变更时间是本月14日,最近变更时间是本月14日,说明本月14日这个账户周期仍未结束,因此只需更新当前数据。
并且,本步骤中由于当前变更时间和最近变更时间在同一账户周期内,因此还可以保持最近变更时间不变,或者也可以将最近变更时间更新为当前变更时间。
通过上述技术方案可知,本实施例不再是每个账户周期结束时都根据账户明细推算出数据,而是当前检测到数据变更请求,即检测到对数据的变更操作时,将当前变更时间所在的账户周期作为当前结算周期,通过对当前变更时间和最近变更时间比较,判断出当前变更时间相比于最近变更时间是否已经跨越了一个账户周期,从而根据判断结果对当前数据、上一结算周期的数据和最近变更时间进行更新,具体地,若比较结果表示当前变更时间相比于最近变更时间,已经跨越了一个账户周期,将上一结算周期的数据更新为当前数据、将最近变更时间更新为当前变更时间、以及,在更新上一结算周期的数据之后,根据当前检测到的数据变更请求更新当前数据;若比较结果表示当前变更时间仍属于最近变更时间所在的账户周期,则根据当前检测到的数据变更请求更新当前数据。
可见本实施例通过检测数据变更请求,实现了对上一结算周期的数据和当前数据的更新,以实现能够查询出查询时间对应的上一账户周期的数据(其值可能为上一结算周期的数据或者当前数据),由于数据变更请求能够真实反映数据变动情况,从而使得查询时间对应的上一账户周期的数据也能够真实反映数据情况,以提高及时发现系统BUG、恶意篡改等异常修改数据的行为的概率,进一步提高账户信息的安全性。此外,本申请实施例由于不用每个账户周期结束时都推算数据,而是仅仅在检测到数据变更请求时后进行数据更新,因此减少了计算量,从而节约了系统开销。
本实施例中通过对上一结算周期的数据和当前数据进行更新,实际上是为了实现对上一账户周期的数据进行查询。具体的查询过程包括:检测到数据查询请求,其中数据查询请求用于查询上一账户周期的数据;获取数据查询请求的请求时间,作为查询时间;比较查询时间和最近变更时间;若查询时间与最近变更时间在同一账户周期,说明对于查询时间,上一结算周期的数据实际上即为上一账户周期的数据,故将上一结算周期的数据作为上一账户周期的数据;若查询时间与最近变更时间不在同一账户周期,且查询时间晚于最近更新时间,说明对于查询时间,当前数据实际上即为上一账户周期的数据,故将当前数据作为上一账户周期的数据。下面举例说明,账户周期以自然日为单位,上一结算周期的数据为50,当前数据是为60,最近变更时间为本月14日。因此若查询时间为本月14日,说明查询时间与最近变更时间为同一账户周期,因此上一账户周期的数据等于上一结算周期的数据,即50。若查询时间为本月15日,说明查询时间相比于最近变更时间已经跨越了一个账户周期,因此上一账户周期的数据实际上等于存储的当前数据,即60。
本申请实施例实际上可以用于总账户和分账户的总分核对中,其中通过本申请实施例的方式更新分账户的数据,通过账户明细的方式更新总账户的数据,由于本申请实施例的方式能够反映出系统BUG、恶意篡改等异常修改行为对数据的影响,而账户明细的方式并不能反映出该影响,因此若总账户和分账户的总分核对结果显示两者不匹配,则说明很有可能是出现了异常修改行为。可见本申请实施例应用在总分核对时,能够进一步提高及时发现系统BUG、恶意篡改等异常修改数据的行为的概率。下面说明其具体实现方式。一个总账户对应至少一个分账户;本实施例步骤S101中的当前检测到数据变更请求,包括:当前检测到至少一个分账户中任一分账户的数据变更请求;根据数据查询请求查询到的上一账户周期的数据为该分账户(即上述任一分账户)在上一账户周期的数据;本实施例还包括:根据产生的账户明细计算总账户在上一账户周期的数据,即根据总账户在上一账户周期开始时的数据,以及上一账户周期产生的账户明细推算出上一账户周期的数据;根据多个分账户中各个分账户在上一账户周期的数据,以及总账户在上一账户周期的数据,进行总分核对。从而根据总分核对结果判断是否出现异常修改数据的行为。
在一般情况下,检测到数据变更请求的顺序与其请求时间的顺序相一致,因此当前变更时间晚于最近变更时间,然而由于传输时延等原因,有可能会出现当前变更时间早于最近变更时间,甚至早于或属于上一结算周期的情况。
因此若仅考虑当前变更时间早于或属于上一结算周期的情况,则上述实施例在执行步骤S103之前,还可以包括比较当前变更时间和上一结算周期;若当前变更时间晚于上一结算周期,才执行步骤S103;若当前变更时间早于上一结算周期或者与上一结算周期在同一账户周期内,根据当前检测到的数据变更请求分别更新上一结算周期的数据和当前数据,此时不再执行步骤S103。若仅考虑当前变更时间晚于上一结算周期,但是早于最近变更时间且不与其在同一账户周期的情况,则上述实施例还包括比较当前变更时间和上一结算周期;其中若比较当前变更时间和上一结算周期的比较结果为当前变更时间晚于上一结算周期,以及比较当前变更时间和最近变更时间的比较结果为当前变更时间和最近变更时间不在同一账户周期内且当前变更时间早于最近变更时间,则执行:根据当前检测到的数据变更请求分别更新上一结算周期的数据和当前数据,并且将上一结算周期更新为当前变更时间所在的账户周期。
下面通过一个实施例说明在上述两种情况发生时,如何对上一结算周期的数据和当前数据进行更新。
请参阅图2,本申请实施例提供了数据更新方法的另一种实施例,本实施例中的方法包括:
S201:当前检测到数据变更请求。
S202:获取当前检测到的数据变更请求的请求时间,作为当前变更时间;当前变更时间所在的账户周期为当前结算周期。
优选地,账户周期以自然日为单位。
S203:比较当前变更时间和上一结算周期。若当前变更时间早于上一结算周期或者与上一结算周期在同一账户周期内,执行步骤S204,若当前变更时间晚于上一结算周期,执行步骤S205。
本步骤中比较当前变更时间和上一结算周期,实际上即判断当前变更时间是否应该归属到上一结算周期,若比较结果表示当前变更时间应该归属到上一结算周期,即当前变更时间早于上一结算周期或者与上一结算周期在同一账户周期内,则执行步骤S204。若比较结果表示当前变更时间不归属到上一结算周期,即当前变更时间晚于上一结算周期,则执行步骤S205。
需要补充说明的是,本申请实施例中,一个时间和一个周期进行比较时,将周期作为整体看待,也就是说该时间早于该周期时,说明该时间早于该周期的开始时间,该时间晚于该周期时,说明该时间晚于该周期的结束时间。
S204:根据当前检测到的数据变更请求分别更新上一结算周期的数据和当前数据。
此时当前变更时间应该归属到上一结算周期,例如账户周期以自然日为单位,上一结算周期为本月14日,由于传输时延等原因,当前变更时间也为本月14日甚至早于本月14日,则说明当前检测到的数据变更请求实际上是上一结算周期的请求,因此不仅更新当前数据,还需对上一结算周期的数据进行更新。这里根据数据变更请求对上一结算周期的数据和当前数据进行更新,指的是根据数据变更请求中的变更数值对上一结算周期的数据和当前数据进行更新。比如数据变更请求的变更数值为+10,因此将上一结算周期的数据和当前数据分别加10。
并且由于当前变更时间应该归属到上一结算周期,说明当前变更时间等于或者早于上一结算周期的结束时间以及最近变更时间,因此本步骤中还保持上一结算周期、以及最近变更时间不变。
S205:比较当前变更时间和最近变更时间,最近变更时间为距离当前最近的数据变更请求的请求时间。若当前变更时间和最近变更时间不在同一账户周期内,且当前变更时间晚于最近变更时间,执行步骤S206;若当前变更时间和最近变更时间在同一账户周期内,执行步骤S207。若当前变更时间和最近变更时间不在同一账户周期内,且当前变更时间早于最近变更时间,则执行S208。
此时本步骤中比较当前变更时间和最近变更时间,不仅能够判断出当前变更时间是否出现异常情况,即早于最近变更时间,还会判断出当前变更时间相比于最近变更时间是否已经跨越了一个账户周期。其中,若比较结果表示当前变更时间相比于最近变更时间,已经跨越了一个账户周期,即当前变更时间和最近变更时间不在同一账户周期内,且当前变更时间晚于最近变更时间,则执行步骤S206;若比较结果表示当前变更时间仍属于最近变更时间所在的账户周期,即当前变更时间和最近变更时间在同一账户周期内,则执行步骤S207。若比较结果表示当前变更时间出现异常,即当前变更时间和最近变更时间不在同一账户周期内,且当前变更时间早于最近变更时间,则执行步骤S208。
S206:将上一结算周期的数据更新为当前数据、将最近变更时间更新为当前变更时间、以及,在更新上一结算周期的数据之后,根据当前检测到的数据变更请求更新当前数据。
此时当前变更时间相比于最近变更时间,已经跨越了一个账户周期,因此将上一结算周期的数据更新为当前数据。并且在对上一结算周期的数据进行结算之后,根据当前检测到的数据变更请求更新当前数据,即,根据当前检测到的数据变更请求中的变更数值,更新当前数据。例如账户周期以自然日为单位,当前变更时间是本月17日,最近变更时间是本月14日,在当前检测到数据变更请求时,当前数据为50,因此将上一结算周期的数据更新为50,之后根据数据变更请求的变更数值,比如+10,将当前数据更新为50+10。
在本步骤中除了对上一结算周期的数据和当前数据进行更新外,还会将最近变更时间更新为当前变更时间,这是因为对于下一数据变更、查询等操作来说,最近变更时间即等于当前变更时间。
并且,本步骤中不仅对上一结算周期的数据进行更新,还可以对上一结算周期进行更新,具体地,可以将上一结算结算周期更新为最近变更时间所在的账户周期与当前结算周期的前一账户周期之间的任一账户周期。此时上述对最近变更时间的更新,应该在更新上一结算周期之后进行。
S207:根据当前检测到的数据变更请求更新当前数据。
此时当前变更时间仍属于最近变更时间所在的账户周期,也就是说当前变更时间还未到达上一结算周期的结束时间,因此本步骤中仍然保持上一结算周期、以及上一结算周期的数据不变,对当前数据进行更新即可。例如账户周期以自然日为单位,当前变更时间是本月14日,最近变更时间是本月14日,说明本月14日这个账户周期仍未结束,因此只需更新当前数据。
并且,本步骤中由于当前变更时间和最近变更时间在同一账户周期内,因此还可以保持最近变更时间不变,或者也可以将最近变更时间更新为当前变更时间。
S208:根据当前检测到的数据变更请求分别更新上一结算周期的数据和当前数据,并且将上一结算周期更新为当前变更时间所在的账户周期。
此时当前变更时间出现异常,不与最近变更时间位于同一账户周期并且早于最近变更时间,还由于当前变更时间晚于上一结算周期,因此实际上应该将上一结算周期更新为当前变更时间所在的账户周期,因此本步骤中不仅根据数据变更请求更新上一结算周期的数据和当前数据,还对上一结算周期进行更新。例如账户周期以自然日为单位,最近变更时间为本月14日,上一结算周期为本月12日,由于传输时延等原因,当前变更时间为本月13日,因此根据数据变更请求的变更数据,比如+10,将上一结算周期的数据和当前数据分别加10,并且将上一结算周期更新为当前变更时间,即本月13日。
通过上述技术方案可知,本申请实施例中主要说明了,当出现当前变更时间早于最近变更时间,甚至早于或属于上一结算周期时的情况,如何对上一结算周期的数据和当前数据进行更新。
下面,本申请实施例将结合一个具体的应用场景,介绍本申请的一种优选实施例,在该实施例中,以账户周期具体为自然日为单位,并且数据具体为账户余额为例进行说明。
请参阅图3,本申请实施例提供了账户余额更新方法的一种实施例,在本实施例中,设置当前变更时间为BIZ_DATE,上一结算周期为PREVIOUS_DATE,上一结算周期的账户余额为PREVIOUS_BALANCE,当前账户余额为BALANCE,最近变更时间为LAST_DATE。
本实施例中的方法包括:
S301:当前检测到余额变更请求。
S302:获取当前检测到的余额变更请求的请求时间,作为当前变更时间BIZ_DATE。其中当前变更时间BIZ_DATE以自然日为单位,并且当前变更时间也为当前结算周期。
在本实施例中为了方便比较,当前变更时间BIZ_DATE、最近变更时间LAST_DATE均以自然日为单位。并且由于本实施例中账户周期也以自然日为单位,因此当前结算周期,即当前变更时间所在的账户周期,实际上即等于当前变更时间BIZ_DATE。
S303:比较当前变更时间BIZ_DATE和上一结算周期PREVIOUS_DATE。若BIZ_DATE≤PREVIOUS_DATE,执行步骤S304,若BIZ_DATE>PREVIOUS_DATE,执行步骤S305。
由于当前变更时间BIZ_DATE和上一结算周期PREVIOUS_DATE均以自然日为单位,因此若BIZ_DATE≤PREVIOUS_DATE,说明当前变更时间BIZ_DATE早于上一结算周期或者与上一结算周期在同一账户周期内,若BIZ_DATE>PREVIOUS_DATE,说明当前变更时间BIZ_DATE晚于上一结算周期PREVIOUS_DATE。例如,当前变更时间BIZ_DATE为第14日,若上一结算周期PREVIOUS_DATE为第15日,说明当前变更时间BIZ_DATE早于上一结算周期PREVIOUS_DATE。
S304:此时当前变更时间BIZ_DATE早于上一结算周期PREVIOUS_DATE或者与上一结算周期PREVIOUS_DATE在同一账户周期内,因此根据当前检测到的余额变更请求更新上一结算周期的账户余额PREVIOUS_BALANCE。
即PREVIOUS_BALANCE=PREVIOUS_BALANCE+AMOUNT。其中,AMOUNT为当前检测到的余额变更请求中的变更金额,并且AMOUNT为矢量(即带有正负号)。
该步骤中之后执行步骤S308。
S305:此时当前变更时间BIZ_DATE晚于上一结算周期PREVIOUS_DATE,因此比较当前变更时间BIZ_DATE和最近变更时间LAST_DATE,其中最近变更时间LAST_DATE为距离当前最近的余额变更请求的请求时间。若当前变更时间BIZ_DATE>最近变更时间LAST_DATE,执行步骤S306,若当前变更时间BIZ_DATE=最近变更时间LAST_DATE,执行步骤S308,若当前变更时间BIZ_DATE<最近变更时间LAST_DATE,执行步骤S307。
S306:此时当前变更时间BIZ_DATE和最近变更时间LAST_DATE不在同一账户周期内,且当前变更时间BIZ_DATE晚于最近变更时间LAST_DATE,因此将上一结算周期的账户余额PREVIOUS_BALANCE更新为当前账户余额BALANCE、将最近变更时间LAST_DATE更新为当前变更时间BIZ_DATE、以及将上一结算周期PREVIOUS_DATE更新为最近变更时间LAST_DATE。
即PREVIOUS_BALANCE=BALANCE,LAST_DATE=BIZ_DATE,
PREVIOUS_DATE=LAST_DATE。
该步骤中之后执行步骤S308。
S307:此时当前变更时间BIZ_DATE和最近变更时间LAST_DATE不在同一账户周期内,且当前变更时间BIZ_DATE早于最近变更时间LAST_DATE,因此根据当前检测到的余额变更请求更新上一结算周期的账户余额PREVIOUS_BALANCE,并且将上一结算周期PREVIOUS_DATE更新为当前变更时间所在的账户周期,即当前变更时间BIZ_DATE。
即PREVIOUS_BALANCE=PREVIOUS_BALANCE+AMOUNT,并且PREVIOUS_DATE=BIZ_DATE。
该步骤中之后执行步骤S308。
S308:根据当前检测到的余额变更请求更新当前账户余额BALANCE。
即BALANCE=BALANCE+AMOUNT。
在本实施例中,还可以包括以下查询过程:
检测到余额查询请求,其中余额查询请求用于查询上一自然日的账户余额;获取余额查询请求的请求时间,作为查询时间QUERY_DATE;比较查询时间QUERY_DATE和最近变更时间LAST_DATE;若查询时间QUERY_DATE=最近变更时间LAST_DATE,将PREVIOUS_BALANCE作为上一账户周期的账户余额;若查询时间QUERY_DATE>LAST_DATE,将BALANCE作为上一账户周期的账户余额。
如图4所示,对应图1所示的方法实施例,本申请还提供了数据更新装置的一种实施例。本实施例的装置包括:检测单元401、获取单元402和比较单元403。
检测单元401用于,当前检测到数据变更请求。
在本申请实施例中,数据变更请求指的是对数据进行变更操作的请求,而检测数据变更请求可以通过检测变更操作的指令实现。例如在SQL架构下,每检测到对数据的UPDATE等变更操作的指令,即相当于检测到数据变更请求。可见,数据变更请求能够真实反映出数据变动情况,尤其是当系统BUG、恶意篡改等异常修改数据的行为发生时,即使不会生成相应的账户明细,仍然会产生相应的数据变更请求。
获取单元402用于,获取当前检测到的数据变更请求的请求时间,作为当前变更时间;当前变更时间所在的账户周期为当前结算周期。
其中,数据变更请求的请求时间,一般指的是生成或者发出数据变更请求的时间,并且将该请求时间作为当前变更时间。
在本申请实施例中,通过设置账户周期,以对数据进行定期更新。其中,设置的账户周期可以是固定时段,例如以自然日为单位,也可以是可变时段,本申请中并不加以限定。
在本申请实施例中,当前变更时间所在的账户周期,即为当前结算周期。也就是说在本申请实施例中,每当接收到一次数据变更请求,就将数据变更请求的请求时间所在的账户周期作为结算周期,实际上,本申请中仅仅在接收到数据变更请求,即在结算周期时进行判断,是否需要对当前数据和上一结算周期的数据进行更新,而无需在每个账户周期都推算数据。
比较单元403用于,比较当前变更时间和最近变更时间,最近变更时间为距离当前最近的数据变更请求的请求时间。实际上比较单元403比较当前变更时间和最近变更时间,即比较当前检测到的数据变更请求的请求时间和距离当前最近的数据变更请求的请求时间,从而判断出当前变更时间相比于最近变更时间是否已经跨越了一个账户周期。
若当前变更时间和所述最近变更时间不在同一账户周期内,且当前变更时间晚于最近变更时间,比较单元403将上一结算周期的数据更新为当前数据、将最近变更时间更新为当前变更时间、以及,在更新上一结算周期的数据之后,根据当前检测到的数据变更请求更新当前数据。
此时当前变更时间相比于最近变更时间,已经跨越了一个账户周期,因此需要对上一结算周期的数据进行结算,实际上,上一结算周期的数据等于当前数据,因此将上一结算周期的数据更新为当前数据。并且在对上一结算周期的数据进行结算之后,根据当前检测到的数据变更请求更新当前数据,即,根据当前检测到的数据变更请求中的变更数值,更新当前数据。此时比较单元403除了对上一结算周期的数据和当前数据进行更新外,还会将最近变更时间更新为当前变更时间,这是因为对于下一数据变更、查询等操作来说,最近变更时间即等于当前变更时间。并且,比较单元403还可以对上一结算周期进行更新,具体地,比较单元403还可以用于将上一结算周期更新为最近变更时间所在的账户周期,而实际上在最近变更时间所在的账户周期,至当前结算周期的前一账户周期之间,数据都没有发生变化,因此比较单元403实际上可以将上一结算结算周期更新为最近变更时间所在的账户周期与当前结算周期的前一账户周期之间的任一账户周期。需要说明的是,此时比较单元403对最近变更时间的更新,应该在更新上一结算周期之后进行。
若当前变更时间和最近变更时间在同一账户周期内,比较单元403根据当前检测到的数据变更请求更新当前数据。
此时当前变更时间仍属于最近变更时间所在的账户周期,也就是说当前变更时间还未到达上一结算周期的结束时间,因此比较单元403仍然保持上一结算周期、以及上一结算周期的数据不变,对当前数据进行更新即可。并且,由于当前变更时间和最近变更时间在同一账户周期内,因此比较单元403还可以保持最近变更时间不变,或者也可以将最近变更时间更新为当前变更时间。
需要说明的是,在本申请实施例中所提及的数据,可以是与账户信息相关的任何数据,例如,数据可以具体包括账户余额,此时本申请实施例实际上是对账户余额的一种更新方式。
可见本实施例通过检测数据变更请求,实现了对上一结算周期的数据和当前数据的更新,以实现能够查询出查询时间对应的上一账户周期的数据(其值可能为上一结算周期的数据或者当前数据),由于数据变更请求能够真实反映数据变动情况,从而使得查询时间对应的上一账户周期的数据也能够真实反映数据情况,以提高及时发现系统BUG、恶意篡改等异常修改数据的行为的概率,进一步提高账户信息的安全性。此外,本申请实施例由于不用每个账户周期结束时都推算数据,而是仅仅在检测到数据变更请求时后进行数据更新,因此减少了计算量,从而节约了系统开销。
本实施例中通过对上一结算周期的数据和当前数据进行更新,实际上是为了实现对上一账户周期的数据进行查询。具体在进行查询时,检测单元401还用于检测到数据查询请求,其中数据查询请求用于查询上一账户周期的数据;获取单元402还用于获取数据查询请求的请求时间,作为查询时间;比较单元403还用于比较查询时间和最近变更时间;若查询时间与最近变更时间在同一账户周期,说明对于查询时间,上一结算周期的数据实际上即为上一账户周期的数据,故将上一结算周期的数据作为上一账户周期的数据;若查询时间与最近变更时间不在同一账户周期,且查询时间晚于最近更新时间,说明对于查询时间,当前数据实际上即为上一账户周期的数据,故将当前数据作为上一账户周期的数据。
本申请实施例实际上可以用于多种涉及数据的应用场景中。例如作为一种较优的实施方式,可以用于总账户和分账户的总分核对中,其中通过本申请实施例的方式更新分账户的数据,通过账户明细的方式更新总账户的数据,由于本申请实施例的方式能够反映出系统BUG、恶意篡改等异常修改行为对数据的影响,而账户明细的方式并不能反映出该影响,因此若总账户和分账户的总分核对结果显示两者不匹配,则说明很有可能是出现了异常修改行为。可见本申请实施例应用在总分核对时,能够进一步提高及时发现系统BUG、恶意篡改等异常修改数据的行为的概率。下面说明其具体实现方式。一个总账户对应至少一个分账户;本实施例的检测单元401用于当前检测到数据变更请求,包括:检测单元401用于当前检测到至少一个分账户中任一分账户的数据变更请求;根据数据查询请求查询到的上一账户周期的数据为该分账户(即上述任一分账户)在上一账户周期的数据;本实施例的装置还包括计算单元和核对单元,其中计算单元用于根据产生的账户明细计算总账户在上一账户周期的数据,即根据总账户在上一账户周期开始时的数据,以及上一账户周期产生的账户明细推算出上一账户周期的数据;核对单元用于根据多个分账户中各个分账户在上一账户周期的数据,以及总账户在上一账户周期的数据,进行总分核对。从而根据总分核对结果判断是否出现异常修改数据的行为。
在一般情况下,检测到数据变更请求的顺序与其请求时间的顺序相一致,因此当前变更时间晚于最近变更时间,然而由于传输时延等原因,有可能会出现当前变更时间早于最近变更时间,甚至早于或属于上一结算周期的情况。
因此若仅考虑当前变更时间早于或属于上一结算周期的情况,则比较单元403还用于,在执行所述比较所述当前变更时间和最近变更时间之前,比较当前变更时间和上一结算周期;若当前变更时间晚于上一结算周期,比较单元403才执行所述比较所述当前变更时间和最近变更时间;若当前变更时间早于上一结算周期或者与上一结算周期在同一账户周期内,比较单元403根据当前检测到的数据变更请求分别更新上一结算周期的数据和当前数据,此时比较单元403不再执行比较所述当前变更时间和最近变更时间。
若仅考虑当前变更时间晚于上一结算周期,但是早于最近变更时间且不与其在同一账户周期的情况,则上述实施例中比较单元403还用于比较当前变更时间和上一结算周期;其中若比较当前变更时间和上一结算周期的比较结果为当前变更时间晚于上一结算周期,以及比较当前变更时间和最近变更时间的比较结果为当前变更时间和最近变更时间不在同一账户周期内且当前变更时间早于最近变更时间,则比较单元403执行:根据当前检测到的数据变更请求分别更新上一结算周期的数据和当前数据,并且将上一结算周期更新为当前变更时间所在的账户周期。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。