数据处理方法、装置、设备及计算机可读存储介质与流程

文档序号:30890300发布日期:2022-07-26 22:24阅读:65来源:国知局
数据处理方法、装置、设备及计算机可读存储介质与流程

1.本技术涉及计算机存储技术,尤其涉及一种数据处理方法、装置、设备及计算机可读存储介质。


背景技术:

2.在高并发场景下进行数据查询时,为减少对数据库或下级数据服务等数据源的访问压力,通常需要对查询的数据进行缓存。相关技术中,为了减少网络带宽的访问压力,通常根据待查询数据的查询频率是否达到预设的频率阈值,来判断待查询数据是否需要缓存,并将需要缓存的数据以键值对的形式缓存在服务端本地内存中。但是,随着缓存数据量的增加,服务端本地内存的占用率将越来越大,从而会影响数据查询的性能,甚至导致服务端系统崩溃。此外,相关技术中通过预设的频率阈值判断待查询数据是否需要缓存的方案,不能很好地适用于具有不同业务场景和不同缓存能力的系统,不具有通用性。


技术实现要素:

3.本技术实施例提供一种数据处理方法、装置、设备及计算机可读存储介质,一方面能够自动将数据吞吐量较大的键值名对应的数据缓存至本地共享内存中,从而可以减少服务端本地内存的占用,提高服务端性能,并能减少数据库和网络的压力,提高数据查询性能;另一方面针对不同业务场景及不同缓存能力的系统,均能提供合适的数据缓存服务,具有更好的通用性。
4.本技术实施例的技术方案是这样实现的:
5.本技术实施例提供一种数据处理方法,包括:
6.获取待查询的目标键值名;
7.确定所述目标键值名在当前统计周期内对应的数据吞吐量;
8.基于所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值;所述特定分位数是基于本地共享内存中当前已缓存的数据量动态调整的;
9.在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至所述本地共享内存中。
10.在一些实施例中,所述基于所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值,包括:确定在所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量;将所述每一键值名对应的数据吞吐量由小到大的排序结果中,与特定分位数对应的数据吞吐量确定为吞吐量阈值。
11.在一些实施例中,在所述将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中之后,所述方法还包括:向至少一个从代理端发送数据缓存通知,以使所述
至少一个从代理端将所述目标键值名和所述目标键值名对应的键值缓存至所述至少一个从代理端的本地共享内存中。
12.在一些实施例中,所述确定所述目标键值名在所述当前统计周期内对应的数据吞吐量,包括:查询所述本地共享内存,得到所述目标键值名在所述当前统计周期内的总查询次数和所述目标键值名对应的键值的平均数据量;基于所述总查询次数与所述平均数据量,确定所述目标键值名在所述当前统计周期内对应的数据吞吐量。
13.在一些实施例中,所述方法还包括:获取至少一个从代理端按照上报周期上报的被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量;获取当前统计周期内主代理端被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量;对所述当前统计周期内所述主代理端被查询的各键值名和各从代理端上报的各键值名的单机查询次数以及每一键值名对应的键值的单机平均数据量进行汇总,得到在所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量;将所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量存储至所述本地共享内存。
14.在一些实施例中,所述在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中,包括:确定所述本地共享内存中当前已缓存的数据量;基于所述当前已缓存的数据量与所述本地共享内存的总内存大小,确定当前缓存使用率;在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值,且所述当前缓存使用率小于使用率阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
15.在一些实施例中,所述在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值,且所述当前缓存使用率小于使用率阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中,包括:查询所述本地共享内存,得到所述当前统计周期内被查询的每一键值名在所述当前统计周期内的总查询次数;对所述每一键值名在所述当前统计周期内的总查询次数求和,得到在所述当前统计周期内的总请求次数;在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值、所述当前缓存使用率小于使用率阈值且所述总请求次数达到次数阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
16.在一些实施例中,所述方法还包括:将所述目标键值名添加至已缓存键值名列表;针对所述已缓存键值名列表中的每一键值名,在确定所述键值名对应的键值在数据源中有更新的情况下,将更新后的所述键值更新至所述本地共享内存中。
17.在一些实施例中,所述在确定所述键值名对应的键值在数据源中有更新的情况下,将更新后的所述键值更新至所述本地共享内存中,包括:通过定时查询所述数据源,确定所述键值名对应的键值有更新的情况下,获取更新后的所述键值;将更新后的所述键值更新至所述本地共享内存中;向至少一个从代理端发送数据更新通知,使得所述至少一个从代理端接收到所述数据更新通知后从主代理端获取所述已缓存键值名列表中每一键值名对应的更新后的键值。
18.在一些实施例中,所述方法还包括:按照特定的监测周期,监测所述本地共享内存
中当前已缓存的数据量;基于所述已缓存的数据量,动态调整所述特定分位数的大小。
19.在一些实施例中,所述已缓存的数据量包括已缓存键值名的数量,所述基于所述已缓存的数据量,动态调整所述特定分位数的大小,包括以下至少之一:在监测到所述已缓存键值名的数量小于第一数量阈值的情况下,将所述特定分位数减小第一调整步长;在监测到所述已缓存键值名的数量大于第二数量阈值的情况下,将所述特定分位数增大第二调整步长。
20.在一些实施例中,所述将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中,包括:基于所述目标键值名在所述当前统计周期内对应的数据吞吐量,确定所述目标键值名对应的时长调整参数;基于所述时长调整参数和预设的缓存时长范围,确定所述目标键值名的缓存失效时长;按照所述缓存失效时长,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
21.本技术实施例提供一种数据处理装置,包括:
22.第一获取模块,用于获取待查询的目标键值名;
23.第一确定模块,用于确定所述目标键值名在当前统计周期内对应的数据吞吐量;
24.第二确定模块,用于基于所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值;所述特定分位数是基于本地共享内存中当前已缓存的数据量动态确定的;
25.缓存模块,用于在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至所述本地共享内存中。
26.在一些实施例中,所述第二确定模块还用于:确定在所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量;将所述每一键值名对应的数据吞吐量由小到大的排序结果中,与特定分位数对应的数据吞吐量确定为吞吐量阈值。
27.在一些实施例中,所述装置还包括:第一通知模块,用于向至少一个从代理端发送数据缓存通知,以使所述至少一个从代理端将所述目标键值名和所述目标键值名对应的键值缓存至所述至少一个从代理端的本地共享内存中。
28.在一些实施例中,所述第一确定模块还用于:查询所述本地共享内存,得到所述目标键值名在所述当前统计周期内的总查询次数和所述目标键值名对应的键值的平均数据量;基于所述总查询次数与所述平均数据量,确定所述目标键值名在所述当前统计周期内对应的数据吞吐量。
29.在一些实施例中,所述装置还包括:第二获取模块,用于获取至少一个从代理端按照上报周期上报的被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量;第三获取模块,用于获取当前统计周期内主代理端被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量;汇总模块,用于对所述当前统计周期内所述主代理端被查询的各键值名和各从代理端上报的各键值名的单机查询次数以及每一键值名对应的键值的单机平均数据量进行汇总,得到在所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量;存储模块,用于将所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量存储至所述本地共享内存。
30.在一些实施例中,所述缓存模块,还用于:确定所述本地共享内存中当前已缓存的数据量;基于所述当前已缓存的数据量与所述本地共享内存的总内存大小,确定当前缓存使用率;在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值,且所述当前缓存使用率小于使用率阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
31.在一些实施例中,所述缓存模块,还用于:查询所述本地共享内存,得到所述当前统计周期内被查询的每一键值名在所述当前统计周期内的总查询次数;对所述每一键值名在所述当前统计周期内的总查询次数求和,得到在所述当前统计周期内的总请求次数;在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值、所述当前缓存使用率小于使用率阈值且所述总请求次数达到次数阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
32.在一些实施例中,所述装置还包括:添加模块,用于将所述目标键值名添加至已缓存键值名列表;更新模块,用于针对所述已缓存键值名列表中的每一键值名,在确定所述键值名对应的键值在数据源中有更新的情况下,将更新后的所述键值更新至所述本地共享内存中。
33.在一些实施例中,所述更新模块还用于:通过定时查询所述数据源,确定所述键值名对应的键值有更新的情况下,获取更新后的所述键值;将更新后的所述键值更新至所述本地共享内存中;向至少一个从代理端发送数据更新通知,使得所述至少一个从代理端接收到所述数据更新通知后从主代理端获取所述已缓存键值名列表中每一键值名对应的更新后的键值。
34.在一些实施例中,所述装置还包括:监测模块,用于按照特定的监测周期,监测所述本地共享内存中当前已缓存的数据量;调整模块,用于基于所述已缓存的数据量,动态调整所述特定分位数的大小。
35.在一些实施例中,所述已缓存的数据量包括已缓存键值名的数量,所述调整模块还用于执行以下至少之一:在监测到所述已缓存键值名的数量小于第一数量阈值的情况下,将所述特定分位数减小第一调整步长;在监测到所述已缓存键值名的数量大于第二数量阈值的情况下,将所述特定分位数增大第二调整步长。
36.在一些实施例中,所述缓存模块,还用于:基于所述目标键值名在所述当前统计周期内对应的数据吞吐量,确定所述目标键值名对应的时长调整参数;基于所述时长调整参数和预设的缓存时长范围,确定所述目标键值名的缓存失效时长;按照所述缓存失效时长,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
37.本技术实施例提供一种数据处理设备,包括:存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现本技术实施例提供的方法。
38.本技术实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本技术实施例提供的方法。
39.本技术实施例具有以下有益效果:
40.通过当前服务的历史访问数据,基于本地共享内存中当前已缓存的数据量动态调整特定分位数,并通过统计当前统计周期内被查询的每一键值名在当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值,在确定目标键值名在当前统计周期内
对应的数据吞吐量达到吞吐量阈值的情况下,将目标键值名和目标键值名对应的键值缓存至本地共享内存中。这样,一方面可以自动将数据吞吐量较大的键值名对应的数据缓存至本地共享内存中,从而可以减少服务端本地内存的占用,提高服务端性能,并能减少数据库和网络的压力,提高数据查询性能;另一方面由于能够根据当前统计周期内被查询的各键值名对应的吞吐量的分布情况和本地共享内存的当前使用情况动态调整吞吐量阈值,从而针对不同业务场景及不同缓存能力的系统,均能提供合适的数据缓存服务,具有更好的通用性。
附图说明
41.图1a是本技术实施例提供的数据查询系统的一个可选的架构示意图;
42.图1b是本技术实施例提供的数据查询系统应用于区块链系统的一个可选的结构示意图;
43.图1c是本技术实施例提供的区块结构的一个可选的示意图;
44.图2是本技术实施例提供的数据处理设备的一个可选的结构示意图;
45.图3是本技术实施例提供的数据处理方法的一个可选的流程示意图;
46.图4是本技术实施例提供的数据处理方法的一个可选的流程示意图;
47.图5是本技术实施例提供的数据处理方法的一个可选的流程示意图;
48.图6是本技术实施例提供的数据处理方法的一个可选的流程示意图;
49.图7是本技术实施例提供的数据处理方法的一个可选的流程示意图;
50.图8是本技术实施例提供的数据处理方法的一个可选的流程示意图;
51.图9为本技术实施例提供的数据查询方法的一个可选的实现架构示意图。
具体实施方式
52.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,所描述的实施例不应视为对本技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
53.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
54.如果申请文件中出现“第一/第二”的类似描述则增加以下的说明,在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本技术实施例能够以除了在这里图示或描述的以外的顺序实施。
55.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
56.对本技术实施例进行进一步详细说明之前,对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。
57.1)大键值名(key)数据:指在键值对(key-value,kv)格式中,键值(value)数据量
较大的数据,比如键值数据量为100kb、200kb、1mb或2mb等的数据。
58.2)热key数据:指在高并发场景下,并发请求量较大的key对应的数据。
59.为了更好地理解本技术实施例提供的数据处理方法,下面先对相关技术中的数据缓存方案进行说明。
60.相关技术中,在高并发场景下,一般的key-value数据,集中存放在远程字典服务(remote dictionary server,redis)/腾讯云kv(cloud key value,ckv)/dcache/memcached等内存缓存中,并尽量组织为小key数据,且尽量避免热key数据出现。如果key对应的数据量较大则在数据传输时会占用较多io带宽。不论大key数据或者热key数据,都需要在服务端做内存缓存。在服务端做内存缓存一方面会导致服务端本地内存占用较高,另一方面在分布式环境下,会存在多台机器间数据不一致性的问题,且会引入缓存集中失效导致请求击穿的问题,对于大key数据或者热key数据在缓存失效击穿时影响更为严重。
61.此外,相关技术中通过预设的阈值确定需要缓存的key,由于不同业务场景下数据的查询频率会有较大差别,并且不同系统的缓存能力不同也会导致能够支持的缓存数据量不同,因此,上述相关技术中的数据缓存方案不能很好地适应于不同的系统,不具有通用性。
62.本技术实施例提供一种数据处理方法、装置、设备和计算机可读存储介质,一方面能够自动将数据吞吐量较大的键值名对应的数据缓存至本地共享内存中,从而可以减少服务端本地内存的占用,提高服务端性能,并能减少数据库和网络的压力,提高数据查询性能;另一方面针对不同业务场景及不同缓存能力的系统,均能提供合适的数据缓存服务,具有更好的通用性。下面说明本技术实施例提供的数据处理设备的示例性应用,本技术实施例提供的数据处理设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的用户终端,也可以实施为服务器。下面,将说明设备实施为服务器时的示例性应用。
63.参见图1a,图1a是本技术实施例提供的数据查询系统100的一个可选的架构示意图,可以实现高并发场景下的数据查询,终端(示例性示出了终端400-1和终端400-2)通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
64.终端用于:在图形界面(示例性示出了图形界面410-1和图形界面410-2)显示用户进行数据查询的交互界面,接收用户的数据查询操作,并向服务器200中的数据查询服务201发送数据查询请求。
65.服务器200用于:运行数据查询服务201和数据处理服务202。数据查询服务201用于:接收数据查询请求;从本地共享内存中查询数据查询请求中待查询的目标键值名对应的键值;在本地共享内存中未查询到目标键值名对应的键值的情况下,从数据源500中查询目标键值名对应的键值;返回查询到的键值。数据处理服务202用于:获取待查询的目标键值名;确定所述目标键值名在当前统计周期内对应的数据吞吐量;基于所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值;所述特定分位数是基于本地共享内存中当前已缓存的数据量动态调整的;在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至所述本地共享内存中。
66.在一些实施例中,服务器200可以是独立的物理服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。服务器200中运行的数据查询服务201和数据处理服务202可以是互相独立的两个进程或线程,也可以是同一个进程中的不同线程,还可以是同一线程执行的两个任务。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本发明实施例中不做限制。
67.本技术实施例涉及的数据查询系统100也可以是区块链系统的分布式系统101,参见图1b,图1b是本技术实施例提供的数据查询系统100应用于区块链系统的一个可选的结构示意图,其中,所述分布式系统101可以是由多个节点102(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端103形成的分布式节点,节点之间形成组成的点对点(p2p,peer to peer)网络,p2p协议是一个运行在传输控制协议(tcp,transmission control protocol)之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
68.参见图1b示出的区块链系统中各节点的功能,涉及的功能包括:
69.1)路由,节点具有的基本功能,用于支持节点之间的通信。
70.节点除具有路由功能外,还可以具有以下功能:
71.2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
72.例如,应用实现的业务包括:
73.2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币。
74.2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
75.2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
76.3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
77.4)共识(consensus),是区块链网络中的一个过程,用于在涉及的多个节点之间对区块中的交易达成一致,达成一致的区块将被追加到区块链的尾部,实现共识的机制包括工作量证明(pow,proof of work)、权益证明(pos,proof of stake)、股份授权证明(dpos,
delegated proof-of-stake)、消逝时间量证明(poet,proof of elapsed time)等。
78.参见图1c,图1c是本技术实施例提供的区块结构(block structure)的一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
79.参见图2,图2是本技术实施例提供的数据处理设备200的结构示意图,图2所示的数据处理设备200包括:至少一个处理器210、存储器250、至少一个网络接口220和用户接口230。数据处理设备200中的各个组件通过总线系统240耦合在一起。可理解,总线系统240用于实现这些组件之间的连接通信。总线系统240除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统240。
80.处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
81.用户接口230包括使得能够呈现媒体内容的一个或多个输出装置231,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口230还包括一个或多个输入装置232,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
82.存储器250可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器250可选地包括在物理位置上远离处理器210的一个或多个存储设备。
83.存储器250包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom,read only memory),易失性存储器可以是随机存取存储器(ram,random access memory)。本技术实施例描述的存储器250旨在包括任意适合类型的存储器。
84.在一些实施例中,存储器250能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
85.操作系统251,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
86.网络通信模块252,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(wifi)、和通用串行总线(usb,universal serial bus)等;
87.呈现模块253,用于经由一个或多个与用户接口230相关联的输出装置231(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
88.输入处理模块254,用于对一个或多个来自一个或多个输入装置232之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
89.在一些实施例中,本技术实施例提供的数据处理装置可以采用软件方式实现,图2示出了存储在存储器250中的数据处理装置255,其可以是程序和插件等形式的软件,包括以下软件模块:第一获取模块2551、第一确定模块2552、第二确定模块2553和缓存模块2554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。
90.将在下文中说明各个模块的功能。
91.在另一些实施例中,本技术实施例提供的数据处理装置可以采用硬件方式实现,作为示例,本技术实施例提供的数据处理装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本技术实施例提供的那件存储方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(asic,application specific integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field-programmable gate array)或其他电子元件。
92.下面将结合本技术实施例提供的终端或服务器的示例性应用和实施,说明本技术实施例提供的数据处理方法。
93.参见图3,图3是本技术实施例提供的数据处理方法的一个可选的流程示意图,下面将结合图3示出的步骤进行说明,下述步骤的执行主体可以是前文的终端或服务器。
94.在步骤s101中,获取待查询的目标键值名;
95.这里,待查询的目标键值名是指数据查询的请求方要查询的键值名。在实施时,可以根据实际情况采用合适的方式获取待查询的目标键值名。例如,当前服务器或终端可以在接收到数据查询请求后,从该数据查询请求中获取待查询的目标键值名;其他服务器或其他终端也可以在接收到数据查询请求后,获取该数据查询请求中待查询的目标键值名,并将该目标键值名上报给当前服务器或终端;当前服务器或终端还可以从数据库或历史访问数据中读取待查询的目标键值名。
96.在步骤s102中,确定所述目标键值名在当前统计周期内对应的数据吞吐量;
97.这里,键值名在特定的时间周期内被查询到的键值对应的数据的总量也就是该键值名在该时间周期内对应的数据吞吐量,特定的时间周期可以是用户预设的,也可以是系统默认的,这里并不限定。可以按照特定的时间周期统计键值名的数据吞吐量,当前统计周期可以是目标键值名的当前查询时间所在的时间周期。目标键值名在当前统计周期内对应的数据吞吐量可以是在当前统计周期内,目标键值名每次被查询到的数据量的总和。
98.在实施时,可以通过查询历史访问数据确定目标键值名在当前统计周期内对应的数据吞吐量,也可以在每次接收到查询请求时,根据每一查询请求查询的目标键值名对应的键值的数据量,更新用于统计当前统计周期内各键值名对应的数据吞吐量的统计信息,通过查询目标键值名对应的统计信息,可以确定目标键值名在当前统计周期内对应的数据吞吐量。键值名对应的统计信息可以根据实际情况确定,例如,键值名对应的统计信息可以直接包括当前统计周期内键值名的数据吞吐量,获取键值名对应的统计信息即可直接得到当前统计周期内键值名的数据吞吐量;键值名对应的统计信息也可以包括当前统计周期内键值名的查询次数和每次查询得到的键值名对应的键值的数据量,可以将当前统计周期内每次查询得到的键值名对应的键值的数据量之和确定为当前统计周期内键值名的数据吞吐量;键值名对应的统计信息还可以包括当前统计周期内键值名的查询次数和键值名对应
的键值的平均数据量,基于该查询次数和平均数据量可以确定当前统计周期内键值名的数据吞吐量。键值名对应的统计信息可以存储在任意合适的地方,包括但不限于本地磁盘、本地内存、本地共享内存或数据库等。
99.在一些实施例中,提供数据查询服务的服务器为独立的服务器的情况下,目标键值名在当前统计周期内对应的数据吞吐量可以是在当前统计周期内在该独立服务器上统计的数据吞吐量。
100.在一些实施例中,提供数据查询服务的服务器为服务器集群的情况下,目标键值名在当前统计周期内对应的数据吞吐量可以是在当前统计周期内在该服务器集群的各单机服务器上统计的数据吞吐量的总和。
101.在步骤s103中,基于所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值;所述特定分位数是基于本地共享内存中当前已缓存的数据量动态调整的;
102.这里,可以通过统计当前统计周期内被查询的各键值名在当前统计周期内对应的数据吞吐量的分布情况,确定与特定分位数对应的吞吐量阈值。特定的分位数可以是百分比分位数,如80%分位数、90%分位数等;也可以是十分位数、四分位数等。
103.本地共享内存可以是前述终端或服务器中的共享内存,本地共享内存中存储的数据可以包括但不限于缓存的各键值名和每一键值名对应键值、键值名对应的统计信息等。本地共享内存中当前已缓存的数据量可以是本地共享内存中已经存储的数据的数据量。基于本地共享内存中当前已缓存的数据量可以动态调整特定分位数。在实施时,本领域技术人员可以根据实际情况采用合适的方式动态调整特定分位数,这里并不限定。例如,可以预先设定特定分位数的初始值,随着本地共享内存中当前已缓存的数据量的增大而将特定分位数的值调大,随着本地共享内存中当前已缓存的数据量的减少而将特定分位数的值减小;也可以在每次获取到待查询的目标键值名后,确定本地共享内存中当前已缓存的数据量大于预设的数据量阈值的情况下将特定分位数的值调大,确定本地共享内存中当前已缓存的数据量小于预设的数据量阈值的情况下将特定分位数的值调大。
104.在步骤s104中,在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至所述本地共享内存中。
105.这里,目标键值名在当前统计周期内对应的数据吞吐量达到吞吐量阈值的情况下,需要对该目标键值名进行查询数据缓存,可以将目标键值名和目标键值名对应的键值缓存至本地共享内存中。当前服务或服务器中运行的其他服务可以通过访问本地共享内存得到缓存的目标键值名对应的键值,从而减少直接向数据源发送的数据查询请求。
106.在一些实施例中,上述步骤s102可以通过如下步骤s121至步骤s122实现:在步骤s121中,查询所述本地共享内存,得到所述目标键值名在所述当前统计周期内的总查询次数和所述目标键值名对应的键值的平均数据量;在步骤s122中,基于所述总查询次数与所述平均数据量,确定所述目标键值名在所述当前统计周期内对应的数据吞吐量。这里,在本地共享内存中可以存储当前统计周期内被查询的每一键值名在当前统计周期内的总查询次数和每一键值名对应的键值的平均数据量。查询本地共享内存,可以得到目标键值名在当前统计周期内的总查询次数和目标键值名对应的键值的平均数据量。通过将目标键值名
在当前统计周期内的总查询次数和目标键值名对应的键值的平均数据量相乘可以得到目标键值名在当前统计周期内对应的数据吞吐量。这样,可以简单快捷地确定目标键值名在当前统计周期内对应的数据吞吐量。
107.在一些实施例中,上述步骤s103中基于所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值时,可以通过如下步骤s131至步骤s132实现:在步骤s131中,确定在所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量;在步骤s132中,将所述每一键值名对应的数据吞吐量由小到大的排序结果中,与特定分位数对应的数据吞吐量确定为吞吐量阈值。
108.在一些实施例中,上述步骤s104中将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中时,可以通过如下步骤s141至步骤s143实现:
109.在步骤s141中,基于所述目标键值名在所述当前统计周期内对应的数据吞吐量,确定所述目标键值名对应的时长调整参数;
110.这里,可以根据目标键值名在当前统计周期内对应的数据吞吐量对待缓存的目标键值名的缓存失效时长进行调整。时长调整参数可以包括但不限于缓存失效时长延长或缩短的调整比例、缓存失效时长递增或递减的步长等。在实施时,可以利用目标键值名在当前统计周期内对应的数据吞吐量,查询特定的映射关系,确定目标键值名对应的时长调整参数,也可以按照特定的算法,基于目标键值名在当前统计周期内对应的数据吞吐量计算得到目标键值名对应的时长调整参数。本领域技术人员可以根据实际情况采用合适的方式确定目标键值名对应的时长调整参数,这里并不限定。
111.在步骤s142中,基于所述时长调整参数和预设的缓存时长范围,确定所述目标键值名的缓存失效时长;
112.这里,缓存时长范围为缓存失效时长的取值范围,可以包括缓存失效时长的最小值和最大值。可以根据时长调整参数,按照特定的取值策略从预设的缓存时长范围内确定目标键值名的缓存失效时长。例如,时长调整参数可以是一个百分比分位数,可以将预设的缓存时长范围内与该百分比分位数对应的取值确定为目标键值名的缓存失效时长;时长调整参数也可以是一个偏移量,可以将缓存时长范围内与缓存失效时长的最小取值或最大取值之间的偏移为该偏移量的取值确定为目标键值名的缓存失效时长。
113.在步骤s143中,按照所述缓存失效时长,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
114.这里,在将目标键值名和目标键值名对应的键值缓存至本地共享内存中时,可以为缓存的目标键值名和目标键值名对应的键值设置缓存失效时长,在缓存时长达到该缓存失效时长时,缓存的目标键值名和目标键值名对应的键值会失效。系统可以按照特定的失效缓存清理策略将失效后的缓存数据从本地共享内存中清除。
115.通过上述步骤s141至步骤s143,可以基于目标键值名在当前统计周期内对应的数据吞吐量,确定目标键值名的缓存失效时长,并按照确定的缓存失效时长,将目标键值名和目标键值名对应的键值缓存至本地共享内存中。这样,可以针对数据吞吐量不同的键值名设置不同的缓存失效时长,从而在通过缓存提高数据查询服务的性能时能够充分利用本地共享内存,提高本地共享内存的利用率。
116.本技术实施例中,基于本地共享内存中当前已缓存的数据量动态调整特定分位数,并通过统计当前统计周期内被查询的每一键值名在当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值,在确定目标键值名在当前统计周期内对应的数据吞吐量达到吞吐量阈值的情况下,将目标键值名和目标键值名对应的键值缓存至本地共享内存中。这样,一方面可以自动将数据吞吐量较大的键值名对应的数据缓存至本地共享内存中,从而可以减少服务端本地内存的占用,提高服务端性能,并能减少数据库和网络的压力,提高数据查询性能;另一方面由于能够根据当前统计周期内被查询的各键值名对应的吞吐量的分布情况和本地共享内存的当前使用情况动态调整吞吐量阈值,从而针对不同业务场景及不同缓存能力的系统,均能提供合适的数据缓存服务,具有更好地通用性。
117.在一些实施例中,参见图4,图4是本技术实施例提供的数据处理方法的一个可选的流程示意图,基于图3,在步骤s104之后还可以执行步骤s401。下面将结合各步骤进行说明,下述步骤的执行主体可以是前文的终端或服务器。
118.在步骤s401中,向至少一个从代理端发送数据缓存通知,以使所述至少一个从代理端将所述目标键值名和所述目标键值名对应的键值缓存至所述至少一个从代理端的本地共享内存中。
119.这里,在分布式场景下,提供数据查询服务的可以是集群,集群中可以包括主代理端以及注册在主代理端的至少一个从代理端,可以通过主从代理的方式实现数据查询服务。当前终端或服务器可以作为主代理端,从代理端接收到数据查询请求后,可以将数据查询请求中待查询的目标键值名上报给主代理端,主代理端在将目标键值名和目标键值名对应的键值缓存至本地共享内存中之后,可以通过发送数据缓存通知的方式通知注册的从代理端将目标键值名和目标键值名对应的键值缓存至各从代理端的本地共享内存中。
120.本技术实施例中,在将目标键值名和目标键值名对应的键值缓存至本地共享内存中之后,可以通过发送数据缓存通知的方式通知从代理端将目标键值名和目标键值名对应的键值缓存至各从代理端的本地共享内存中。这样,从代理端不需要执行判断目标键值名是否需要缓存的处理,可以减少从代理端计算资源的消耗,进而提高数据查询服务的性能。
121.在一些实施例中,参见图5,图5是本技术实施例提供的数据处理方法的一个可选的流程示意图,基于图3,该方法还可以执行如下步骤s501至步骤s504。下面将结合各步骤进行说明,下述步骤的执行主体可以是前文的终端或服务器。
122.在步骤s501中,获取至少一个从代理端按照上报周期上报的被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量。
123.这里,从代理端上报的键值名的单机查询次数指的是在上报周期内该从代理端接收到的与该键值名对应的数据查询请求的次数,键值名对应的键值的单机平均数据量指的是该从代理端在上报周期内查询到的该键值名对应的键值的平均数据量。每一从代理端可以按照上报周期向主代理端上报在该上报周期内接收到的数据查询请求中被查询的每一键值名的单机查询次数和每一键值名对应的键值的单机平均数据量。上报周期可以是预设的值,也可以是系统默认的值,还可以是各从代理端根据接收到的数据查询请求的频率动态确定的值。不同从代理端对应的上报周期可以是相同的,也可以不同,这里并不限定。
124.在步骤s502中,获取当前统计周期内主代理端被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量。
125.这里,主代理端也可以接收数据查询请求,当前统计周期内主代理端被查询的键值名的单机查询次数指的是在当前统计周期内主代理端接收到的与该键值名对应的数据查询请求的次数,键值名对应的键值的单机平均数据量指的是主代理端在当前统计周期内查询到的该键值名对应的键值的平均数据量。
126.在实施时,可以基于主代理端的历史访问数据,实时统计当前统计周期内主代理端被查询的每一键值名的单机查询次数和每一键值名对应的键值的单机平均数据量,也可以在当前统计周期内每接收到一次数据查询请求后,更新并存储该数据查询请求对应的键值名的单机查询次数和该键值名对应的键值的单机平均数据量,通过简单的数据查询即可获取当前统计周期内主代理端被查询的每一键值名的单机查询次数和每一键值名对应的键值的单机平均数据量。
127.在步骤s503中,对所述当前统计周期内所述主代理端被查询的各键值名和各从代理端上报的各键值名的单机查询次数以及每一键值名对应的键值的单机平均数据量进行汇总,得到在所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量。
128.这里,在当前统计周期内被查询的每一键值名的总查询次数指的是当前统计周期内被查询的每一键值名在主代理端被查询的单机查询次数及在各从代理端被查询的单机查询次数的总和。可以将当前统计周期内主代理端被查询的各键值名的单机查询次数和各从代理端上报的各键值名的单机查询次数按键值名进行汇总,得到在当前统计周期内被查询的每一键值名的总查询次数。
129.针对当前统计周期内被查询的每一键值名,该键值名对应的键值的平均数据量指的是当前统计周期内在主代理端以及在各从代理端每一次查询到的该键值名对应的键值的数据量的平均值。可以将当前统计周期内在主代理端每一次查询到的该键值名对应的键值的数据量和在各从代理端每一次查询到的该键值名对应的键值的数据量求平均得到在当前统计周期内该键值名对应的键值的平均数据量。在实施时,可以对当前统计周期内主代理端被查询的各键值名对应的键值的单机平均数据量和各从代理端上报的各键值名对应的键值的单机平均数据量按键值名进行汇总,得到在当前统计周期内每一键值名对应的键值的平均数据量。
130.在步骤s504中,将所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量存储至所述本地共享内存。
131.这里,可以在本地共享内存中存储当前统计周期内被查询的每一键值名的总查询次数和每一键值名对应的键值的平均数据量。
132.需要说明的是,上述步骤s501至步骤s504在实施时,并不限于如图5所示的执行顺序,例如,还可以在步骤s101之后执行上述步骤s501至步骤s504。
133.本技术实施例中,通过汇总当前统计周期内主代理端被查询的各键值名和各从代理端按照上报周期上报的各键值名的单机查询次数以及每一键值名对应的键值的单机平均数据量,得到在当前统计周期内被查询的每一键值名的总查询次数和每一键值名对应的键值的平均数据量,并将当前统计周期内被查询的每一键值名的总查询次数和每一键值名对应的键值的平均数据量存储至本地共享内存。这样,可以直接从本地共享内存中获取当前统计周期内被查询的每一键值名的总查询次数和每一键值名对应的键值的平均数据量,
从而可以简单快捷地获取当前统计周期内被查询的每一键值名在当前统计周期内对应的数据吞吐量。
134.在一些实施例中,参见图6,图6是本技术实施例提供的数据处理方法的一个可选的流程示意图,基于图3,上述步骤s104可以通过如下步骤s601至步骤s603实现。下面将结合各步骤进行说明,下述步骤的执行主体可以是前文的终端或服务器。
135.在步骤s601中,确定所述本地共享内存中当前已缓存的数据量;
136.这里,本地共享内存中当前已缓存的数据量为本地共享内存中当前已存储的数据的总量。本地共享内存中当前已缓存的数据可以包括但不限于缓存的每一键值名、每一键值名对应的键值、用于统计当前统计周期内各键值名对应的数据吞吐量的统计信息等。
137.在步骤s602中,基于所述当前已缓存的数据量与所述本地共享内存的总内存大小,确定当前缓存使用率;
138.这里,当前缓存使用率可以为本地共享内存的当前使用率。基于当前已缓存的数据量和本地共享内存的总内存大小,可以确定当前缓存使用率。例如,可以将当前已缓存的数据量与本地共享内存的总内存大小之比确定为当前缓存使用率,也可以基于当前已缓存的数据量和本地共享内存的总内存大小,确定本地共享内存中当前空闲的内存大小,基于当前空闲的内存大小和本地共享内存的总内存大小,确定当前缓存使用率。
139.在步骤s603中,在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值,且所述当前缓存使用率小于使用率阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
140.这里,使用率阈值可以是用户根据实际情况预先设定的值,也可以是默认值,还可以是根据目标键值名对应的键值的数据量大小动态调整的,这里并不限定。
141.在一些实施例中,上述步骤s603可以通过如下步骤s631至步骤s633实现:
142.在步骤s631中,查询所述本地共享内存,得到所述当前统计周期内被查询的每一键值名在所述当前统计周期内的总查询次数;
143.这里,本地共享内存中可以存储当前统计周期内被查询的每一键值名在当前统计周期内的总查询次数。
144.在步骤s632中,对所述每一键值名在所述当前统计周期内的总查询次数求和,得到在所述当前统计周期内的总请求次数;
145.这里,当前统计周期内的总请求次数可以是当前统计周期内数据查询服务接收到的数据查询请求的总次数。
146.在步骤s633中,在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值、所述当前缓存使用率小于使用率阈值且所述总请求次数达到次数阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
147.这里,使用率阈值可以是用户根据实际情况预先设定的值,也可以是默认值,还可以是根据总请求次数动态调整的,这里并不限定。
148.本技术实施例中,在确定目标键值名在当前统计周期内对应的数据吞吐量达到吞吐量阈值,且当前缓存使用率小于使用率阈值的情况下,将目标键值名和目标键值名对应的键值缓存至本地共享内存中。这样,在进行数据缓存时,可以综合考虑键值名在当前统计周期内对应的数据吞吐量和当前缓存使用率,来判断是否对键值名进行缓存,从而可以保
证系统的稳定运行,避免缓存数据过多影响数据查询服务的性能。进一步地,在进行数据缓存时,可以综合考虑键值名在当前统计周期内对应的数据吞吐量、当前缓存使用率、当前统计周期内数据查询服务接收到的数据查询请求的总次数来判断是否对键值名进行缓存,从而可以避免对键值较大但查询频率较低的键值名进行缓存,以提高本地共享内存的利用率,进而进一步提高数据查询服务的性能。
149.在一些实施例中,参见图7,图7是本技术实施例提供的数据处理方法的一个可选的流程示意图,基于图3,该方法还可以执行如下步骤s701至步骤s702。下面将结合各步骤进行说明,下述步骤的执行主体可以是前文的终端或服务器。
150.在步骤s701中,将所述目标键值名添加至已缓存键值名列表;
151.这里,已缓存键值名列表中可以包括当前已经缓存的全部键值名。在将目标键值名和目标键值名对应的键值缓存至本地共享内存中后,可以将目标键值名添加至已缓存键值名列表。
152.在步骤s702中,针对所述已缓存键值名列表中的每一键值名,在确定所述键值名对应的键值在数据源中有更新的情况下,将更新后的所述键值更新至所述本地共享内存中。
153.这里,数据源可以是数据库、提供数据查询的数据仓库或服务等任意合适的数据提供方。当前终端或服务器可以直接查询数据源获取目标键值名对应的键值,也可以通过其他进程或服务间接获取数据源中目标键值名对应的键值。
154.在实施时,可以通过轮询或监听等任意合适的方式,确定已缓存键值名列表中的每一键值名在数据源中是否有更新。例如,可以定期查询已缓存键值名列表中的每一键值名在数据源中的键值,通过比对数据源中的键值与本地共享内存中的键值,确定键值是否有更新;也可以为每一键值名对应的键值设置版本号,通过查询数据源中各键值名是否有新版本的键值来确定键值是否有更新;还可以接收数据源端执行键值名对应的键值更新操作时发送的通知,确定键值是否有更新。
155.在一些实施例中,上述步骤s702可以通过如下步骤s721至步骤s723实现:在步骤s721中,通过定时查询所述数据源,确定所述键值名对应的键值有更新的情况下,获取更新后的所述键值;在步骤s722中,将更新后的所述键值更新至所述本地共享内存中;在步骤s723中,向至少一个从代理端发送数据更新通知,使得所述至少一个从代理端接收到所述数据更新通知后从主代理端获取所述已缓存键值名列表中每一键值名对应的更新后的键值。这里,在获取到更新后的键值后,可以通过发送数据更新通知的方式通知注册的从代理端进行数据同步更新。从代理端在接收到数据更新通知后,可以向主代理端发送数据获取请求,从主代理端获取已缓存键值名列表中每一键值名对应的更新后的键值。
156.在一些实施例中,可以在从代理端注册至少一个下一级的从代理端,通过主从级联的方式对分布式场景下各机器中本地共享内存中缓存的数据进行同步更新,从而可以减少从代理端对主代理端的访问压力,提高分布式场景下整体服务的稳定性。
157.本技术实施例中,针对已缓存的每一键值名,在确定数据源中该键值名对应的键值有更新的情况下,获取更新后的键值,并将更新后的键值更新至本地共享内存中。这样,可以保证本地共享内存中缓存的数据得到及时更新,从而可以保持缓存数据的有效性,避免缓存失效击穿问题,进而提高数据查询的可靠性。进一步地,在获取到已缓存的每一键值
名更新后的键值后,向至少一个从代理端发送数据更新通知,使得至少一个从代理端接收到数据更新通知后从主代理端获取已缓存键值名列表中每一键值名对应的更新后的键值。这样,可以保证分布式场景下不同机器的本地共享内存中缓存的数据的一致性,且采用主从同步的方式可以提高数据更新传播的速度,从而可以提升数据同步的效率。
158.在一些实施例中,参见图8,图8是本技术实施例提供的数据处理方法的一个可选的流程示意图,基于图3,该方法还可以执行如下步骤s801至步骤s802。下面将结合各步骤进行说明,下述步骤的执行主体可以是前文的终端或服务器。
159.在步骤s801中,按照特定的监测周期,监测所述本地共享内存中当前已缓存的数据量;
160.这里,监测周期可以是用户预设的值,也可以是默认值,还可以是根据本地共享内存中当前已缓存的数据量动态确定的值,这里并不限定。
161.在步骤s802中,基于所述已缓存的数据量,动态调整所述特定分位数的大小。
162.这里,基于本地共享内存中当前已缓存的数据量可以动态调整特定分位数的大小。在实施时,本领域技术人员可以根据实际情况采用合适的方式动态调整特定分位数,这里并不限定。例如,可以预先设定特定分位数的初始值,随着本地共享内存中当前已缓存的数据量的增大而将特定分位数的值调大,随着本地共享内存中当前已缓存的数据量的减少而将特定分位数的值减小;也可以在每次获取到待查询的目标键值名后,确定本地共享内存中当前已缓存的数据量大于预设的数据量阈值的情况下将特定分位数的值调大,确定本地共享内存中当前已缓存的数据量小于预设的数据量阈值的情况下将特定分位数的值调大。
163.需要说明的是,上述步骤s801至步骤s802在实施时,并不限于如图8所示的执行顺序,例如,还可以在步骤s101之前执行上述步骤s801至步骤s802。
164.在一些实施例中,所述已缓存的数据量包括已缓存键值名的数量,上述步骤s802可以包括以下步骤s821、步骤s822中的至少之一:
165.在步骤s821中,在监测到所述已缓存键值名的数量小于第一数量阈值的情况下,将所述特定分位数减小第一调整步长;
166.这里,已缓存的数据量可以包括已缓存键值名的数量,第一数量阈值可以是用户预设的值,也可以是默认值,还可以是根据本地共享内存中当前已缓存的数据量动态确定的值。第一调整步长可以是用户预设的值,也可以是默认值,还可以是根据本地共享内存中当前已缓存的数据量动态确定的值。在监测到已缓存键值名的数量小于第一数量阈值的情况下,可以将特定分位数减小第一调整步长。例如,假设第一数量阈值为50,第一调整步长为5%,在监测到已缓存键值名的数量小于50的情况下,可以将特定分位数减小5%。
167.在步骤s822中,在监测到所述已缓存键值名的数量大于第二数量阈值的情况下,将所述特定分位数增大第二调整步长。
168.这里,第二数量阈值可以是用户预设的值,也可以是默认值,还可以是根据本地共享内存中当前已缓存的数据量动态确定的值。第二调整步长可以是用户预设的值,也可以是默认值,还可以是根据本地共享内存中当前已缓存的数据量动态确定的值。在监测到已缓存键值名的数量大于第二数量阈值的情况下,可以将特定分位数增大第二调整步长。例如,假设第二数量阈值为1000,第二调整步长为3%,在监测到已缓存键值名的数量大于
1000的情况下,可以将特定分位数增大3%。
169.本技术实施例中,按照特定的监测周期,监测本地共享内存中当前已缓存的数据量,并基于已缓存的数据量,动态调整特定分位数的大小。这样,可以将本地共享内存中缓存的数据量控制在合适的范围内,从而充分利用本地共享内存进行数据缓存,并能考虑到本地共享内存的使用上限,进而能够为不同缓存能力的系统提供合适的数据缓存服务,具有更好地通用性。
170.下面,将说明本技术实施例在一个实际的应用场景中的示例性应用。以高并发场景下的数据缓存为例,本技术实施例提供一种数据查询方法,可以自动判断热key数据和大key数据,将热key数据和大key数据对应的数据缓存至本地共享内存中,并能在高并发场景下,实现大key数据或热key数据同步,保证数据一致性。该方法可以应用于后台数据中单个key对应一个整体的提交内容,需要保证整体数据一致性,不方便拆分得更细小,并且value的数据大小较大或者较热的高并发场景。在该场景下,每次都去数据提供方读取数据会影响系统性能,将数据缓存在分布式服务的各机器上又难以保证数据一致性。该方法还可以应用于通用的数据配置、内容管理后台等数据提供和维护方与高并发服务之间数据同步的场景。
171.参见图9,图9为本技术实施例提供的数据查询方法的实现架构示意图。该方法通过同步模块920与数据提供方910交互,获得原始kv数据,并将原始kv数据携带版本号保存到数据库930中。主代理端940和从代理端(示例性示出了941、942和943)分别是运行在分布式服务中不同服务器(示例性示出了950、951、952和953)上的单独的进程服务,可以作为服务端(示例性示出了960、961、962和963)的代理。主代理端940会轮询或定时查询数据库930,通过数据版本判断是否有数据更新,如果有数据更新,则更新本地数据并保存在本地共享内存970中,而后主代理端940通知各个从代理端去拉取最新的数据并更新。从代理可以在接收到主代理端940发送的通知后,通过接口拉取主代理端940更新的数据,并更新本地共享内存(示例性示出了971、972和973)中的缓存数据。此外,从代理也可以定时拉取最新数据,保证各机器上数据的最终一致性。新加入的从代理端需要注册到主代理端中,主代理端定期检查各个从代理端的可用性。主代理端和从代理端可以提供类似get型的kv数据查询接口,服务端可以调用该数据查询接口获取本地共享内存中缓存的数据。此外,服务端还包括内存缓存(示例性示出了980、981、982和983),可以实现查询数据在服务端内存中的缓存,内存缓存的失效规则可以通过其他配置平台来配置。该数据查询接口自带回源策略,当内存缓存和共享内存缓存失效时,会回退到直连数据库的方式,并对从数据库获取的数据进行缓存。其中,主代理端940与从代理端、从代理端与本地共享内存、服务端与本地共享内存的交互信息,如缓存调用次数、缓存失效次数、回源次数等,都可以通过监控平台990(如腾讯云monitor平台等)进行监控。
172.在一些实施方式中,可以为数据查询接口增加访问统计信息,可以按照单台机器进行统计,也可以对各台机器进行整体统计,统计数据查询时各key对应的数据量大小以及查询频率,当发现key对应的数据在一定时间间隔内是大key数据时,或者key的访问频率到达一定的频率阈值时,从代理端将该key上报到主代理端,让主代理端来更新同步该key的值,主代理端收到请求后,将该key加入到更新列表中,下次更新的时候会更新该key的值,并下发给从代理端。主代理端同样会统计更新列表中各key的值的大小。此外,对于更新列
表中每一个key,主代理端在一段时间内没有收到从代理端上报的该key的消息,也会自动将该key从更新列表中删除。对于,小key数据或非热key数据,可以不缓存或只进行本地内存缓存,而不进入全局缓存同步。其中,在从代理端中还可以注册下一级代理端,这样可以形成树状的主从代理结构。
173.在一些实施方式中,考虑到不同系统中各key的查询频率、系统缓存能力不同,传统的通过设定的频率阈值确定需要缓存的key的方案不能有效适应不同系统,不具有通用性。因此,可以从统计的角度,通过检查实际缓存的数据量大小与系统承受能力的关系,综合考虑热key/大key的情况,自适应判断当前请求查询的key是否需要缓存。假设系统的内存大小是m,则缓存的所有数据量c,统计信息的数据量d应满足如下公式1-1:
[0174][0175]
其中,n为当前已缓存的key的数量,ci为缓存的第i个key对应的键值对的大小;a为一个系数,用于表征本地共享内存不应该超过的使用上限比例,比如80%、90%等;di为统计的第i个key的统计信息在共享内存中所占的数据量,统计信息可以包括第i个key的查询次数、数据量等。
[0176]
设定一个时间窗口t,例如最近5分钟内,在该时间窗口t中,统计各key的访问量si,i=0,1,n,以及计算时间窗口t内被查询的各key的数据吞吐量大小的分位数。设第i个key大小是xi,在时间窗口t内的查询次数是fi,则第i个key在时间窗口t内从开始到当前需要的系统输入输出(input/output,io)数据吞吐量为xi*fi,记为si,在时间窗口t内被查询的各key的总查询次数为记为f。对于当前的一个key的请求,判断是否需要缓存的条件可以包括:当时间窗口t内各key的总查询次数达到一定的阈值,也即当f》b时,其中b为查询次数阈值,才考虑进行缓存。
[0177]
此外,假设时间窗口t内,被查询的每个key在当前时间窗口t内的数据吞吐量服从一个经验分布函数p,可以计算该分布函数的q分位数为sq,例如80%、90%等。当第i个key的数据吞吐量si满足如下公式1-2时,则对当前key对应的数据进行缓存,并将当前已缓存的key的数量加1:
[0178][0179]
为了防止缓存的个数太少,这里可以定期监测已缓存的key的数量,动态调整分位数q。当n《n时,则可以调整q=q

step,其中step为步长,可以是预先设定的,如设定step=5%。
[0180]
在对每一key进行缓存时,可以根据各key在时间窗口t内的数据吞吐量动态调整相应的缓存失效时间。
[0181]
本技术实施例中,对于高并发且有大key/热key的场景,可以减少数据库和/或网络带宽的压力,同时,对于多线程/多进程的服务,每台机器只有本地的一个缓存数据副本,放在共享内存中,可以保证数据的一致性。此外,通过从统计的角度,检查实际缓存的数据
量大小与系统承受能力的关系,综合考虑热key/大key的情况,自适应判断当前请求查询的key是否需要缓存,可以较好地适应具有不同业务场景和缓存能力的系统,具有更好的通用性。
[0182]
下面继续说明本技术实施例提供的数据处理装置255的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器250的数据处理装置255中的软件模块可以包括:
[0183]
第一获取模块2551,用于获取待查询的目标键值名;
[0184]
第一确定模块2552,用于确定所述目标键值名在当前统计周期内对应的数据吞吐量;
[0185]
第二确定模块2553,用于基于所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量,确定与特定分位数对应的吞吐量阈值;所述特定分位数是基于本地共享内存中当前已缓存的数据量动态确定的;
[0186]
缓存模块2554,用于在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至所述本地共享内存中。
[0187]
在一些实施例中,所述第二确定模块还用于:确定在所述当前统计周期内被查询的每一键值名在所述当前统计周期内对应的数据吞吐量;将所述每一键值名对应的数据吞吐量由小到大的排序结果中,与特定分位数对应的数据吞吐量确定为吞吐量阈值。
[0188]
在一些实施例中,所述装置还包括:第一通知模块,用于向至少一个从代理端发送数据缓存通知,以使所述至少一个从代理端将所述目标键值名和所述目标键值名对应的键值缓存至所述至少一个从代理端的本地共享内存中。
[0189]
在一些实施例中,所述第一确定模块还用于:查询所述本地共享内存,得到所述目标键值名在所述当前统计周期内的总查询次数和所述目标键值名对应的键值的平均数据量;基于所述总查询次数与所述平均数据量,确定所述目标键值名在所述当前统计周期内对应的数据吞吐量。
[0190]
在一些实施例中,所述装置还包括:第二获取模块,用于获取至少一个从代理端按照上报周期上报的被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量;第三获取模块,用于获取当前统计周期内主代理端被查询的每一键值名的单机查询次数和所述每一键值名对应的键值的单机平均数据量;汇总模块,用于对所述当前统计周期内所述主代理端被查询的各键值名和各从代理端上报的各键值名的单机查询次数以及每一键值名对应的键值的单机平均数据量进行汇总,得到在所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量;存储模块,用于将所述当前统计周期内被查询的每一键值名的总查询次数和所述每一键值名对应的键值的平均数据量存储至所述本地共享内存。
[0191]
在一些实施例中,所述缓存模块,还用于:确定所述本地共享内存中当前已缓存的数据量;基于所述当前已缓存的数据量与所述本地共享内存的总内存大小,确定当前缓存使用率;在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值,且所述当前缓存使用率小于使用率阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
[0192]
在一些实施例中,所述缓存模块,还用于:查询所述本地共享内存,得到所述当前统计周期内被查询的每一键值名在所述当前统计周期内的总查询次数;对所述每一键值名在所述当前统计周期内的总查询次数求和,得到在所述当前统计周期内的总请求次数;在确定所述目标键值名在所述当前统计周期内对应的数据吞吐量达到所述吞吐量阈值、所述当前缓存使用率小于使用率阈值且所述总请求次数达到次数阈值的情况下,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
[0193]
在一些实施例中,所述装置还包括:添加模块,用于将所述目标键值名添加至已缓存键值名列表;更新模块,用于针对所述已缓存键值名列表中的每一键值名,在确定所述键值名对应的键值在数据源中有更新的情况下,将更新后的所述键值更新至所述本地共享内存中。
[0194]
在一些实施例中,所述更新模块还用于:通过定时查询所述数据源,确定所述键值名对应的键值有更新的情况下,获取更新后的所述键值;将更新后的所述键值更新至所述本地共享内存中;向至少一个从代理端发送数据更新通知,使得所述至少一个从代理端接收到所述数据更新通知后从主代理端获取所述已缓存键值名列表中每一键值名对应的更新后的键值。
[0195]
在一些实施例中,所述装置还包括:监测模块,用于按照特定的监测周期,监测所述本地共享内存中当前已缓存的数据量;调整模块,用于基于所述已缓存的数据量,动态调整所述特定分位数的大小。
[0196]
在一些实施例中,所述已缓存的数据量包括已缓存键值名的数量,所述调整模块还用于执行以下至少之一:在监测到所述已缓存键值名的数量小于第一数量阈值的情况下,将所述特定分位数减小第一调整步长;在监测到所述已缓存键值名的数量大于第二数量阈值的情况下,将所述特定分位数增大第二调整步长。
[0197]
在一些实施例中,所述缓存模块,还用于:基于所述目标键值名在所述当前统计周期内对应的数据吞吐量,确定所述目标键值名对应的时长调整参数;基于所述时长调整参数和预设的缓存时长范围,确定所述目标键值名的缓存失效时长;按照所述缓存失效时长,将所述目标键值名和所述目标键值名对应的键值缓存至本地共享内存中。
[0198]
本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术实施例上述的数据处理方法。
[0199]
本技术实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本技术实施例提供的数据处理方法,例如,如图3示出的方法。
[0200]
在一些实施例中,计算机可读存储介质可以是fram、rom、prom、ep-rom、eeprom、闪存、磁表面存储器、光盘、或cd-rom等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
[0201]
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在
计算环境中使用的其它单元。
[0202]
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(html,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
[0203]
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
[0204]
综上所述,通过本技术实施例一方面能够自动将数据吞吐量较大的键值名对应的数据缓存至本地共享内存中,从而可以减少服务端本地内存的占用,提高服务端性能,并能减少数据库和网络的压力,提高数据查询性能;另一方面针对不同业务场景及不同缓存能力的系统,均能提供合适的数据缓存服务,具有更好的通用性。
[0205]
以上所述,仅为本技术的实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1