一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据查询方法、装置、设备及介质与流程

2022-03-23 03:15:45 来源:中国专利 TAG:


1.本技术涉及数据处理技术领域,特别涉及一种数据查询方法、装置、设备及介质。


背景技术:

2.提供数据查询的软件服务作为上游服务,在向获取数据的软件服务也即下游服务提供大数据量查询时,目前通常使用分页拉取或者一次性全量拉取所需数据两种方式。在分页拉取方式中,分页查询会发起多次网络请求,同时在下一次分页查询请求时,上游服务还需要重新和数据库层建立新的连接进行数据读取,数据库也需要重复上一次查询请求的一系列操作执行数据查询,如果是通过skip或者offset的方式分页查询,且随着分页的页码增加可能还会引起数据库的性能问题,同时获取全部数据的总时长也会很长,随着下游服务的增多也会增长。而一次全量拉取所有需要的数据意味上游服务需要从数据库中拉取全量数据,全量数据读取到内存当中可能会引起应用服务内存溢出等异常,且拉取的时间可能会很长或随下游服务的增加而成倍增长。


技术实现要素:

3.有鉴于此,本技术的目的在于提供能够提升数据查询效率,且避免内存溢出。其具体方案如下:
4.第一方面,本技术提供了一种数据查询方法,应用于第一软件服务,包括:
5.获取第二软件服务发送的第一数据查询请求;
6.建立与所述第二软件服务之间的第一连接;
7.创建新的线程以得到第一线程;
8.利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求,并获取所述数据库返回的所述第二数据查询请求对应的游标;
9.利用所述第一线程遍历所述游标以从所述数据库中获取相应的目标数据;
10.在遍历的过程中,每当获取到的所述目标数据的数量达到数量阈值,则将所述目标数据通过所述第一连接发送至所述第二软件服务,直到遍历结束。
11.可选的,所述利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求,包括:
12.利用所述第一线程向数据库发起所述第一数据查询请求对应的携带禁止游标超时信息的第二数据查询请求。
13.可选的,所述将所述目标数据通过所述第一连接发送至所述第二软件服务,包括:
14.创建新的线程以得到第二线程,并利用所述第二线程将所述目标数据通过所述第一连接发送至所述第二软件服务;
15.或,利用线程池将所述目标数据通过所述第一连接发送至所述第二软件服务。
16.可选的,所述游标为基于所述第二数据查询请求先从所述数据库的内部缓存中查找,若从所述内部缓存中查找到,则从所述内部缓存中读取并返回的游标。
17.可选的,所述建立与所述第二软件服务之间的第一连接,包括:
18.基于http sse技术建立与所述第二软件服务之间的第一连接。
19.可选的,所述利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求之前,还包括:
20.确定所述第一软件服务与所述数据库的第二连接;
21.相应的,所述利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求,包括:
22.利用所述第一线程,通过所述第二连接向数据库发起所述第一数据查询请求对应的第二数据查询请求。
23.可选的,所述确定所述第一软件服务与所述数据库的第二连接,包括:
24.从所述第一软件服务与所述数据库之间的已有连接中查找可用连接;
25.若查找到可用连接,则将可用连接确定为第二连接;
26.否则,判断与所述数据库的已有连接的数量是否达到预设连接数阈值,若未达到,则创建新的连接以得到第二连接。
27.第二方面,本技术公开了一种数据查询装置,应用于第一软件服务,包括:
28.查询请求获取模块,用于获取第二软件服务发送的第一数据查询请求;
29.第一连接建立模块,用于建立与所述第二软件服务之间的第一连接;
30.第一线程创建模块,用于创建新的线程以得到第一线程;
31.查询请求发送模块,用于利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求;
32.游标获取模块,用于获取所述数据库返回的所述第二数据查询请求对应的游标;
33.目标数据获取模块,用于利用所述第一线程遍历所述游标以从所述数据库中获取相应的目标数据;
34.目标数据发送模块,用于在遍历的过程中,每当获取到的所述目标数据的数量达到数量阈值,则将所述目标数据通过所述第一连接发送至所述第二软件服务,直到遍历结束。
35.第三方面,本技术公开了一种电子设备,包括:
36.存储器,用于保存计算机程序;
37.处理器,用于执行所述计算机程序,以实现前述的数据查询方法。
38.第四方面,本技术公开了一种计算机可读存储介质,用于保存计算机程序,所述计算机程序被处理器执行时实现前述的数据查询方法。
39.第五方面,本技术公开了一种计算机程序产品,所述计算机程序产品被执行时实现前述的数据查询方法。
40.可见,本技术先获取第二软件服务发送的第一数据查询请求,建立与所述第二软件服务之间的第一连接以及创建新的线程以得到第一线程,之后利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求,并获取所述数据库返回的所述第二数据查询请求对应的游标,然后利用所述第一线程遍历所述游标以从所述数据库中获取相应的目标数据,在遍历的过程中,每当获取到的所述目标数据的数量达到数量阈值,则将所述目标数据通过所述第一连接发送至所述第二软件服务,直到遍历结束。也即,本技术
中,第一软件服务获取数据库返回的游标,遍历游标从数据库获取相应的数据,获取到的数据满足一定量时通过与第二软件服务之间的连接发送至第二软件服务,这样,能够实现只向数据库发送一次数据查询请求便可以查询到数据,避免数据库执行多次重复任务,避免随着请求数据的服务增多导致的响应时间成倍增长的问题,提升数据查询效率,且避免了将数据全量拉取所导致的内存溢出的问题。
附图说明
41.为了更清楚地说明本技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
42.图1为本技术提供的数据查询方案所适用的系统框架示意图;
43.图2为本技术公开的一种数据查询方法流程图;
44.图3为本技术提供的一种具体的以分页方式进行数据查询的流程图;
45.图4为本技术提供的一种具体的以全量方式进行数据查询的流程图;
46.图5为本技术公开的一种具体的数据查询流程图;
47.图6为本技术公开的一种数据查询装置结构示意图;
48.图7为本技术公开的一种电子设备结构图。
具体实施方式
49.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
50.提供数据查询的软件服务作为上游服务,在向获取数据的软件服务也即下游服务提供大数据量查询时,目前通常使用分页拉取或者一次性全量拉取所需数据两种方式。在分页拉取方式中,分页查询会发起多次网络请求,同时在下一次分页查询请求时,上游服务还需要重新和数据库层建立新的连接进行数据读取,数据库也需要重复上一次查询请求的一系列操作执行数据查询,且随着分页的页码增加可能还会引起数据库的性能问题,同时获取全部数据的总时长也会很长,随着下游服务的增多也会增长。而一次全量拉取所有需要的数据意味上游服务需要从数据库中拉取全量数据,全量数据读取到内存当中可能会引起应用服务内存溢出等异常,且拉取的时间可能会很长或随下游服务的增加而成倍增长。为此,本技术提供了一种数据查询方法,能够提升数据查询效率,且避免内存溢出。
51.本技术的数据查询方案中,采用的系统框架具体可以参见图1所示,具体可以包括:第二电子设备101、第一电子设备102、第二电子设备101与第一电子设备102之间通过网络103实现通信连接。其中,第一电子设备和第二电子设备均可以为终端设备或者服务器等。例如,第一电子设备可以为服务器,运行有第一软件服务,第二电子设备可以为终端设备,运行有第二软件服务。如图1所示,第二电子设备通过网络向第一电子设备发送数据查询请求,第一电子设备将查询到的目标数据返回给第二电子设备。
52.在一些实施例中,通过第一软件服务和第二软件服务的协同可以实现saas应用,该saas应用可以用于提供办公、聊天等功能。
53.参见图2所示,本技术实施例公开了一种数据查询方法,应用于第一软件服务,包括:
54.步骤s11:获取第二软件服务发送的第一数据查询请求。
55.可以理解的是,本技术实施例中,第一软件服务为提供数据查询的上游服务,第二服务为需要查询数据的下游服务。
56.其中,第一数据查询请求中携带查询条件。
57.步骤s12:建立与所述第二软件服务之间的第一连接。
58.在一些实施方式中,本技术实施例可以基于http(即hyper text transfer protocol,超文本传输协议)sse(即server-sent events,服务器发送事件)技术建立与所述第二软件服务之间的第一连接。也即,基于http sse技术建立第一软件服务与第二软件服务之间的数据通道,以便在查询到数据后,利用该数据通道传输数据。
59.其中,http协议用于从万维网服务器传输超文本到本地浏览器的传送协议。sse是websocket的一种轻量代替方案,使用http协议。严格地说,http协议是没有办法做服务器推送的,但是当服务器向客户端声明接下来要发送流信息时,客户端就会保持连接打开,sse使用的就是这种原理。
60.步骤s13:创建新的线程以得到第一线程。
61.也即,本技术实施例创建一个新的线程进行数据查询,从而提升响应效率。
62.步骤s14:利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求,并获取所述数据库返回的所述第二数据查询请求对应的游标。
63.其中,第一数据查询请求为第二软件服务向第一软件服务发送的数据查询请求,可以基于http sse技术,或者tcp协议,第二数据查询请求为第一软件服务向数据库发起的请求,可以基于tcp协议。
64.在一些实施方式中,本技术实施例可以利用所述第一线程向数据库发起所述第一数据查询请求对应的携带禁止游标超时信息的第二数据查询请求。例如,禁止游标超时信息为十分钟,这样,在从数据库中获取数据时不能超过10分钟。
65.这样的操作使得,在遍历游标从数据库中获取相应目标数据时,能够避免游标超时,以及时的获取到相应的目标数据。
66.其中,所述游标为所述数据库基于所述第二数据查询请求先从缓存(内部缓存)中查找,若从所述缓存中查找到,则从所述缓存中读取并返回的游标。
67.也即,本技术实施例中,数据库在获取到第二数据查询请求时,是先从内部缓存中查找是否有第二数据查询请求对应的游标,也即,满足查询条件的游标,如果有,则从内部缓存中读取,这样,利用缓存可以进一步的提升查询效率。若从内部缓存中没有查找到游标,则在数据库内的区别于内部缓存的数据中进行查找,进行第二数据查询请求对应的查询语句分析,优化以及执行。
68.并且,本技术实施例中,在利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求之前,确定所述第一软件服务与所述数据库的第二连接,然后利用所述第一线程,通过所述第二连接向数据库发起所述第一数据查询请求对应的第二数
据查询请求。
69.其中,确定所述第一软件服务与所述数据库的第二连接的步骤具体包括:从所述第一软件服务与所述数据库之间的已有连接中查找可用连接;若查找到可用连接,则将可用连接确定为第二连接;否则,判断与所述数据库已有的连接的数量是否达到预设连接数阈值。若未达到,则创建新的连接以得到第二连接;若达到,则等待连接释放。
70.也即,本技术实施例在确定与数据库之间的通信连接时,优先考虑已有的可用连接,以节约连接资源,如果已有连接没有可用连接,则判断第一服务与所述数据库的连接的数量是否达到数量阈值,如果没有达到,则创建新连接。
71.需要指出的是,游标是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。
72.步骤s15:利用所述第一线程遍历所述游标以从所述数据库中获取相应的目标数据。
73.步骤s16:在遍历的过程中,每当获取到的所述目标数据的数量达到数量阈值,则将所述目标数据通过所述第一连接发送至所述第二软件服务,直到遍历结束。
74.在一种实施方式中,可以创建新的线程以得到第二线程,并利用所述第二线程将所述目标数据通过所述第一连接发送至所述第二软件服务。
75.在另一种实施方式中,利用线程池将所述目标数据通过所述第一连接发送至所述第二软件服务。
76.其中,所述线程池可以在预先建立,避免频繁创建线程以浪费资源。
77.需要指出的是,本技术实施例利用不同的线程分别进行游标遍历和数据发送,能够实时的将数据发送给第二软件服务,避免游标超时,进一步提升数据查询效率。同时,通过不同线程的分工工作,也可以提升数据查询的成功率。
78.在一些实施方式中,数量阈值可以根据实际需求进行配置,比如,可以为1条数据,也即获取到1条数据即发送给第二软件服务,也可以为多条数据,当获取到多条数据则一起发送给第二软件服务。数量阈值可以预设,也可以根据实际情况进行变化,例如数量阈值可以与第一数据查询请求的紧急程度(相关业务的紧急程度)负相关,即在第一数据查询请求的紧急程度越高时,证明对于数据的实时性需求更高,则数量阈值越小,从而提升数据传输的实时性。
79.可见,本技术实施例先获取第二软件服务发送的第一数据查询请求,建立与所述第二软件服务之间的第一连接以及创建新的线程以得到第一线程,之后利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求,并获取所述数据库返回的所述第二数据查询请求对应的游标,然后利用所述第一线程遍历所述游标以从所述数据库中获取相应的目标数据,在遍历的过程中,每当获取到的所述目标数据的数量达到数量阈值,则将所述目标数据通过所述第一连接发送至所述第二软件服务,直到遍历结束。也即,本技术中,第一软件服务获取数据库返回的游标,遍历游标从数据库获取相应的数据,获取到的数据满足一定量时通过与第二软件服务之间的连接发送至第二软件服务,这样,能够实现只向数据库发送一次数据查询请求便可以查询到数据,避免数据库执行多次重复任务,避免随着请求数据的服务增多导致的响应时间成倍增长的问题,提升数据查询效率,且避免了将数据全量拉取所导致的内存溢出的问题。
80.下面,为了进一步说明本技术方案相对于现有技术带来的有益效果,对现有技术和本技术方案进行进一步的对比描述。参见图3所示,图3为本技术实施例提供的一种具体的以分页方式进行数据查询的流程图。第二软件服务发起第n页查询请求,第一软件服务向数据库发起第n页查询请求,数据库向第一软件服务返回第n页的数据,耗费时间为m,第一软件服务想第二软件服务返回第n页数据,耗时可能为2m,这样,根据查询的总页数n,重复执行上述步骤n次。可见,分页查询会发起多次查询请求,同时在下一次分页查询请求时,第一软件服务还需要重新和数据库层建立新的连接进行数据读取,数据库也需要重复上一次查询请求的一系列操作执行数据查询,且随着分页的页码增加而可能还会引起数据库的性能问题,同时获取全部数据的总时长也会很长,随着请求数据的软件服务的增多也会增长。参见图4所示,图4为本技术实施例提供的一种具体的以全量方式进行数据查询的流程图。执行一次全量拉取,第二软件服务向第一软件服务发送全量查询请求,第一软件服务向数据库发送全量查询请求,数据库返回全量数据,耗时为k,第一软件服务向第二软件服务返回全量数据,耗费时间可能为2k。一次全量拉取所有需要的数据意味第一软件服务方也需要从数据库中拉取全量数据,全量数据读取到内存当中可能会引起应用服务内存溢出等异常,且拉取的时间可能会很长或随请求数据的服务的增加而成倍增长。参见图5所示,图5为本技术实施例公开的一种具体的数据查询流程图。第二软件服务向第一软件服务发起请求时,第一软件服务服务基于http sse技术向第二软件服务传输数据。请求达到第一软件服务后,第一软件服务开辟一个新的线程通过游标的方式从数据库中获取数据,通过获取到的游标遍历获取所有需要的数据,遍历的同时向第二软件服务写数据。由于读游标的数据和向第二软件服务发送数据都是同时进行的,相当于一条流水线循环的工作。只需要发起一次请求就可以查询所需要的数据。避免数据传输的过程中服务读取数据时引起的内存溢出等异常,避免随着请求数据的下游服务的增加而导致接口的响应时间成倍增长的问题。
81.可以理解的是,无论是分页查询方式还是全量请求查询方式,请求数据的服务增加的话,逐级请求数据,最后一级的第二软件服务与第一软件服务交互,通过第一软件服务从数据库中取数据,这样数据查询时间随着请求数据的下游服务的增加而成倍增长。而本技术提供的方案,通过http sse技术建立第一软件服务和第二软件服务之间的数据通道,第一软件服务通过游标的方式从数据库中获取数据,通过获取到的游标遍历获取所有需要的数据,遍历的同时向第二软件服务写数据,没有一次全量拉取,而是形成数据流,如果n个请求数据的下游服务进行分页或全量查询消耗时间是n*t,那么使用基于sse和数据库游标的方式给请求数据的下游服务提供数据查询所消耗的时间只需要1*t。
82.参见图6所示,本技术实施例公开了一种数据查询装置,应用于第一软件服务,包括:
83.查询请求获取模块11,用于获取第二软件服务发送的第一数据查询请求;
84.第一连接建立模块12,用于建立与所述第二软件服务之间的第一连接;
85.第一线程创建模块13,用于创建新的线程以得到第一线程;
86.查询请求发送模块14,用于利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求;
87.游标获取模块15,用于获取所述数据库返回的所述第二数据查询请求对应的游标;
88.目标数据获取模块16,用于利用所述第一线程遍历所述游标以从所述数据库中获取相应的目标数据;
89.目标数据发送模块17,用于在遍历的过程中,每当获取到的所述目标数据的数量达到数量阈值,则将所述目标数据通过所述第一连接发送至所述第二软件服务,直到遍历结束。
90.可见,本技术实施例先获取第二软件服务发送的第一数据查询请求,建立与所述第二软件服务之间的第一连接以及创建新的线程以得到第一线程,之后利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求,并获取所述数据库返回的所述第二数据查询请求对应的游标,然后利用所述第一线程遍历所述游标以从所述数据库中获取相应的目标数据,在遍历的过程中,每当获取到的所述目标数据的数量达到数量阈值,则将所述目标数据通过所述第一连接发送至所述第二软件服务,直到遍历结束。也即,本技术中,第一软件服务获取数据库返回的游标,遍历游标从数据库获取相应的数据,获取到的数据满足一定量时通过与第二软件服务之间的连接发送至第二软件服务,这样,能够实现只向数据库发送一次数据查询请求便可以查询到数据,避免数据库执行多次重复任务,避免随着请求数据的服务增多导致的响应时间成倍增长的问题,提升数据查询效率,且避免了将数据全量拉取所导致的内存溢出的问题。
91.其中,第一连接建立模块12,具体用于基于http sse技术建立与所述第二软件服务之间的第一连接。
92.并且,查询请求发送模块14,具体用于利用所述第一线程向数据库发起所述第一数据查询请求对应的携带禁止游标超时信息的第二数据查询请求。
93.在一种实施方式中,目标数据发送模块17,具体用于创建新的线程以得到第二线程,并利用所述第二线程将所述目标数据通过所述第一连接发送至所述第二软件服务。
94.在另一种实施方式中,目标数据发送模块17,具体用于利用线程池将所述目标数据通过所述第一连接发送至所述第二软件服务。
95.另外,所述游标为基于所述第二数据查询请求先从所述数据库的内部缓存中查找,若从所述内部缓存中查找到,则从所述内部缓存中读取并返回的游标。
96.进一步的,所述装置还包括第二连接确定模块,用于所述利用所述第一线程向数据库发起所述第一数据查询请求对应的第二数据查询请求之前,确定所述第一软件服务与所述数据库的第二连接;
97.相应的,查询请求发送模块14,具体用于利用所述第一线程,通过所述第二连接向数据库发起所述第一数据查询请求对应的第二数据查询请求。
98.进一步的,第二连接确定模块,具体用于从所述第一软件服务与所述数据库之间的已有连接中查找可用连接;若查找到可用连接,则将可用连接确定为第二连接;否则,判断与所述数据库的已有连接的数量是否达到预设连接数阈值,若未达到,则创建新的连接以得到第二连接。
99.参见图7所示,本技术实施例公开了一种电子设备20,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,前述实施例公开的数据查询方法。
100.关于上述数据查询方法的具体过程可以参考前述实施例中公开的相应内容,在此
不再进行赘述。
101.并且,所述存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,存储方式可以是短暂存储或者永久存储。
102.另外,所述电子设备20还包括电源23、通信接口24、输入输出接口25和通信总线26;其中,所述电源23用于为所述电子设备20上的各硬件设备提供工作电压;所述通信接口24能够为所述电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;所述输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
103.进一步的,本技术实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的数据查询方法。
104.关于上述数据查询方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
105.本技术实施例还公开了一种计算机程序产品,计算机程序产品被执行时实现前述实施例公开的数据查询方法。
106.关于上述数据查询方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
107.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
108.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
109.以上对本技术所提供的一种数据查询方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献