数据库的存储过程游标结果集缓存的方法、介质及产品与流程
- 国知局
- 2024-08-05 11:42:45
本发明涉及数据库,特别是涉及一种数据库的存储过程游标结果集缓存的方法、介质及产品。
背景技术:
1、dataset作为ado.net核心的成员之一,是基于.net平台程序语言的数据库应用程序最常接触的类,其最大的优点是既可以以离线的方式,也可以以实时连接的方式来操作数据库中的数据。
2、在.net中操作的数据集并不是直接与数据库建立联系,而是会经历如下步骤:1.客户端首先与数据库服务建立连接;2.客户端向数据库服务器发出调用存储过程的请求,请求获取存储过程中的out参数;3.数据库服务器接收到请求后,经检索选择符合条件的数据,发送到客户端的dataset中;4.dataset以数据绑定控件或直接引用等形式将数据传递给客户端应用程序,如果应用程序在运行过程中有数据发生变化,它会修改dataset中的数据;5.当应用程序端需要保存数据时,再次建立客户端到数据库服务器端的连接,将dataset中被修改的数据提交给数据库服务器,而后便可以断开连接。
3、dataset主要的功能为将数据库服务器中请求的数据全部一次性读出,缓存到内存中。dataset不会关心数据库服务器端所返回的数据量的大小,无论是一条或是大量的数据(如上亿条数据),其都是将数据进行一次性的读取并写入到缓存中。在这一过程中,游标的作用主要是根据存储过程中条件对的数据进行筛选,并将符合条件的数据都发送到dataset中。
4、在这一过程中,若是请求的数据量过大,对于数据库服务器所需的资源的要求会很高。并且一次性地请求大量的数据,如果超过客户端所支持的最大缓存内存,可能会造成客户端的机器死机等问题,也可能会将所请求的数据遗失。在从数据库中读入以及写入dataset的过程中,是将查询到的数据以串行的方式进行操作的,没有充分使用到系统的多核处理能力。
技术实现思路
1、本发明的一个目的是要提供一种能够解决上述任一问题的数据库的存储过程游标结果集缓存的方法、介质及产品。
2、本发明一个进一步的目的是将数据库端查询的数据批量返回,避免一次性返回导致系统崩溃的情况,极大地利用客户端的资源。
3、本发明另一个进一步的目的是通过建立多个子线程实现读取速度与写入速度的匹配,从而极大地缩减了读写时长。
4、特别地,本发明提供了一种数据库的存储过程游标结果集缓存的方法,包括:在存储过程包含查询并通过out参数返回结果集的情况下,解析存储过程中的表名;在主线程中进行预查询,以获取表的总行数以及表所占的内存大小;获取调用存储过程的客户端当前可用的内存空间;判断内存大小是否大于内存空间;以及若是,进行分页读写。
5、可选地,在解析存储过程中的表名的步骤之后还包括:开启第一子线程,读取表的一行数据并统计读取时间;写入到数据集dataset中并统计写入时间;计算读取时间与写入时间的比值并向上取整作为读写比n;以及关闭第一子线程。
6、可选地,进行分页读写的步骤包括:通过内存大小和内存空间获取分页页数;等待获取读写比;开启n个第二子线程;操作数据库端游标;每个第二子线程读取1/2n页数据到共享内存。
7、可选地,在等待获取读写比的步骤之后还包括:等待第二子线程读取数据;将共享内存中的数据写入到dataset。
8、可选地,在每个第二子线程读取1/2n页数据到共享内存和将共享内存中的数据写入到dataset的步骤之后还包括:判断是否读写完成一页;以及若否,返回执行操作数据库端游标和等待第二子线程读取数据的步骤。
9、可选地,在读写完成一页的情况下,判断是否读取完成最后半页数据;以及若是,关闭第二子线程,释放相关资源,若否,返回执行获取调用存储过程的客户端当前可用的内存空间的步骤。
10、可选地,在内存大小小于等于内存空间的情况下,等待获取读写比;开启n个第二子线程;操作数据库端游标;每个第二子线程读取1/2n页数据到共享内存。
11、可选地,在内存大小小于等于内存空间的情况下,在等待获取读写比的步骤之后还包括:等待第二子线程读取数据;将共享内存中的数据写入到dataset。
12、可选地,在每个第二子线程读取1/2n页数据到共享内存和将共享内存中的数据写入到dataset的步骤之后还包括:判断是否读写完成一页;以及若否,返回执行操作数据库端游标和等待第二子线程读取数据的步骤,若是,执行关闭第二子线程,释放相关资源的步骤。
13、可选地,数据库的存储过程游标结果集缓存的方法还包括:开启主线程;根据所调用的存储过程名,反向获取存储过程的定义语句;根据定义语句判断存储过程是否包含查询并通过out参数返回结果集;以及若否,不进行额外操作。
14、可选地,通过内存大小和内存空间获取分页页数的步骤包括:计算内存大小与内存空间的比值并向上取整作为分页页数。
15、根据本发明的另一个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任一项的数据库的存储过程游标结果集缓存的方法。
16、根据本发明的又一个方面,还提供了一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现上述任一项的数据库的存储过程游标结果集缓存的方法。
17、本发明的数据库的存储过程游标结果集缓存的方法,在存储过程包含查询并通过out参数返回结果集的情况下,解析存储过程中的表名,在主线程中进行预查询,以获取表的总行数以及表所占的内存大小,获取调用存储过程的客户端当前可用的内存空间,判断内存大小是否大于内存空间,并在结果为是时,进行分页读写,能够依据客户端可用的资源的自动分页返回的思想,将数据库端查询的数据批量返回,避免了因将查询的所有数据一次性返回到客户端缓存中而导致系统崩溃的情况,又能够极大地利用客户端的资源;因采用的是批量返回的方法,比单次返回一条数据的方式极大减少了与数据库的交互。
18、进一步地,本发明的数据库的存储过程游标结果集缓存的方法,在解析存储过程中的表名之后开启第一子线程,读取表的一行数据并统计读取时间,写入到数据集dataset中并统计写入时间,计算读取时间与写入时间的比值并向上取整作为读写比n,在表所占的内存大小大于客户端当前可用的内存空间时,通过内存大小和内存空间获取分页页数,等待获取读写比,开启n个第二子线程,通过计算从数据库到dataset的读写比,建立n个第二子线程,能够实现读取速度与写入速度的匹配,从而极大地缩减了读写时长。
19、根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
技术特征:1.一种数据库的存储过程游标结果集缓存的方法,包括:
2.根据权利要求1所述的方法,其中在解析所述存储过程中的表名的步骤之后还包括:
3.根据权利要求2所述的方法,其中进行分页读写的步骤包括:
4.根据权利要求3所述的方法,其中在等待获取所述读写比的步骤之后还包括:
5.根据权利要求4所述的方法,其中在每个所述第二子线程读取1/2n页数据到共享内存和将所述共享内存中的数据写入到所述dataset的步骤之后还包括:
6.根据权利要求5所述的方法,其中,
7.根据权利要求6所述的方法,其中,
8.根据权利要求7所述的方法,其中,
9.根据权利要求8所述的方法,其中在每个所述第二子线程读取1/2n页数据到所述共享内存和将所述共享内存中的数据写入到所述dataset的步骤之后还包括:
10.根据权利要求1所述的方法,还包括:
11.根据权利要求3所述的方法,其中通过所述内存大小和所述内存空间获取分页页数的步骤包括:
12.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至11任一项所述的数据库的存储过程游标结果集缓存的方法。
13.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至11中任一项所述的数据库的存储过程游标结果集缓存的方法。
技术总结本发明提供了一种数据库的存储过程游标结果集缓存的方法、介质及产品。其中,数据库的存储过程游标结果集缓存的方法包括:在存储过程包含查询并通过out参数返回结果集的情况下,解析存储过程中的表名;在主线程中进行预查询,以获取表的总行数以及表所占的内存大小;获取调用存储过程的客户端当前可用的内存空间;判断内存大小是否大于内存空间;以及若是,进行分页读写,能够依据客户端可用的资源的自动分页返回的思想,将数据库端查询的数据批量返回,避免了因将查询的所有数据一次性返回到客户端缓存中而导致系统崩溃的情况,又能够极大地利用客户端的资源;因采用的是批量返回的方法,比单次返回一条数据的方式极大减少了与数据库的交互。技术研发人员:黄胃建,李楠受保护的技术使用者:北京人大金仓信息技术股份有限公司技术研发日:技术公布日:2024/8/1本文地址:https://www.jishuxx.com/zhuanli/20240802/258960.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。