一种数据库读写方法及系统与流程

文档序号:31334920发布日期:2022-08-31 08:29阅读:80来源:国知局
一种数据库读写方法及系统与流程

1.本发明涉及计算机技术领域,特别是一种数据库读写方法及系统。


背景技术:

2.目前大部分数据库并发读写需要每个操作占用一个独立的连接来保存会话,占用大量tcp传输控制协议连接,消耗性能,占用连接资源;如果中间有nat转发,连接数会受到限制。


技术实现要素:

3.为克服上述问题,本发明的目的是提供一种能够减少服务器之间的连接数,实现数据库读写的方法。
4.本发明采用以下方案实现:一种数据库读写方法,所述方法包括以下步骤:
5.步骤s1、将服务端进程和客户端代理进程建立进程共享内存;
6.步骤s2、通过对服务端进程访问数据库方式进行动态替换,将原有创建tcp传输控制协议连接的方法重定向为创建内存虚拟连接;
7.步骤s3、客户端代理进程将内存虚拟连接进行编号,数据库代理进程接收到客户端编号的数据,将不同编号的数据建立独立unixsock连接与数据库通信;
8.步骤s4、数据库返回数据给数据库代理进程,数据库代理进程将数据加上原有的客户端编号,返回给客户端代理进程;
9.步骤s5、客户端代理进程将对应客户端编号的数据写入共享内存内,服务端进程访问数据库方式动态替换为从共享内存读取虚拟连接数据,从而实现减少了服务器之间的连接数。
10.进一步的,所述步骤s1进一步具体为:服务端进程启动时建立共享内存,通过tcp传输控制协议连接把内存地址范围发送给客户端代理进程;客户端代理进程通过tcp传输控制协议连接接收共享内存地址范围,将内存地址范围附加到自己的进程空间中,从而实现进程共享内存。
11.进一步的,所述步骤s2进一步具体为:通过对服务端进程访问数据库方式运行时,修改创建tcp传输控制协议连接的函数method1进行替换,替换为method2函数。
12.进一步的,所述步骤s2进一步具体为:所述步骤s3进一步具体为:客户端代理进程将虚拟连接进行编号,客户端代理进程与数据库代理进程建立固定数量连接,客户端代理进程将编号后的通过固定的连接发送;数据库代理进程接收到客户端编号的数据,将不同编号建立独立unixsock连接与数据库通信。
13.进一步的,所述步骤s2进一步具体为:所述步骤s5进一步具体为:服务端进程访问数据库方式在运行时替换读取函数,实现从共享内存读取虚拟连接数据。
14.本发明还提供了一种数据库读写系统,包括建立模块、动态替换模块、编号模块、返回模块和写入模块,所述建立模块,即将服务端进程和客户端代理进程建立进程共享内
存;所述动态替换模块,即通过对服务端进程访问数据库方式进行动态替换,将原有创建tcp传输控制协议连接的方法重定向为创建内存虚拟连接;所述编号模块,即客户端代理进程将内存虚拟连接进行编号,数据库代理进程接收到客户端编号的数据,将不同编号的数据建立独立unixsock连接与数据库通信;所述返回模块,即数据库返回数据给数据库代理进程,数据库代理进程将数据加上原有的客户端编号,返回给客户端代理进程;所述写入模块,即客户端代理进程将对应客户端编号的数据写入共享内存内,服务端进程访问数据库方式动态替换为从共享内存读取虚拟连接数据,从而实现减少了服务器之间的连接数。
15.进一步的,所述建立模块进一步具体为:服务端进程启动时建立共享内存,通过tcp传输控制协议连接把内存地址范围发送给客户端代理进程;客户端代理进程通过tcp传输控制协议连接接收共享内存地址范围,将内存地址范围附加到自己的进程空间中,从而实现进程共享内存。
16.进一步的,所述动态替换模块进一步具体为:通过对服务端进程访问数据库方式运行时,修改创建tcp传输控制协议连接的函数method1进行替换,替换为method2函数。
17.进一步的,所述编号模块进一步具体为:客户端代理进程将虚拟连接进行编号,客户端代理进程与数据库代理进程建立固定数量连接,客户端代理进程将编号后的通过固定的连接发送;数据库代理进程接收到客户端编号的数据,将不同编号建立独立unixsock连接与数据库通信。
18.进一步的,所述写入模块进一步具体为:服务端进程访问数据库方式在运行时替换读取函数,实现从共享内存读取虚拟连接数据。
19.本发明的有益效果在于:本发明大大减少了服务器之间的连接数,使得程序可以同时处理更多并发,不受操作系统配置的连接数限制;中间有经过nat转发也不会因为连接数限制减少并发。
附图说明
20.图1是本发明的方法流程示意图。
21.图2是本发明的系统原理框图。
具体实施方式
22.下面结合附图对本发明做进一步说明。
23.请参阅图1所示,本发明的一种数据库读写方法,所述方法包括以下步骤:
24.步骤s1、将服务端进程和客户端代理进程建立进程共享内存;
25.步骤s2、通过对服务端进程访问数据库方式进行动态替换,将原有创建tcp传输控制协议连接的方法重定向为创建内存虚拟连接;
26.步骤s3、客户端代理进程将内存虚拟连接进行编号,数据库代理进程接收到客户端编号的数据,将不同编号的数据建立独立unixsock连接与数据库通信;
27.步骤s4、数据库返回数据给数据库代理进程,数据库代理进程将数据加上原有的客户端编号,返回给客户端代理进程;
28.步骤s5、客户端代理进程将对应客户端编号的数据写入共享内存内,服务端进程访问数据库方式动态替换为从共享内存读取虚拟连接数据,从而实现减少了服务器之间的
连接数。
29.下面通过一具体实施例对本发明作进一步说明:
30.本方案包含a.服务进程b.客户端代理进程c.数据库代理进程d.数据库。其中a,b在同一台服务器,c,d在同一台服务器
31.1.服务进程与客户端代理进程,建立进程共享内存。服务端进程启动时建立共享内存,通过tcp传输控制协议把内存地址范围发送给客户端代理进程;客户端代理进程通过tcp传输控制协议连接接收共享内存地址范围,将内存地址范围附加到自己的进程空间中。
32.2.通过对服务进程访问数据库方法进行动态替换,原来创建tcp传输控制协议连接的方法重定向为创建内存虚拟连接。服务进程发起调用建立100个tcp传输控制协议链接方法,每个tcp传输控制协议链接发送select 1语句,由于tcp传输控制协议链接方法被重定向,所以select 1语句(这个语句可以是各种sql,这边用一个最简单的sql语句举例,每个链接发送的也可以是不同的)被写入内存虚拟链接1~100中。
33.通过对服务端进程访问数据库方式运行时,修改创建tcp传输控制协议连接的函数method1进行替换,替换为method2函数;method1是指代原函数,是创建tcp连接;method2是指代新函数,是通过内存共享方式虚拟连接的函数。
34.3.客户端代理进程将虚拟连接进行编号。客户端代理进程与数据库代理进程建立固定数量连接。客户端代理进程将编号后的通过固定的连接发送,所述固定数量可以根据机器配置调整,一般可以是cpu核数*2。
35.客户端进程分别从共享内存中读取链接1~100中读取到select 1,通过固定的10个链接发送给数据库代理(可以理解成原来要100条路每条路一辆车,现在只要10条路,一条路可以开多辆车)。
36.例如原来建立的连接是ip1:port1,ip2:port2、ip1:port2,ip2:port2、ip1:port3,ip2:port2
37.需要对其进行映射编号1:ip1:port1,ip2:port2、编号2:ip1:port2,ip2:port2、编号3:ip1:port3,ip2:port2。
38.4.数据库代理进程接收到客户端编号的数据,将不同编号建立独立unixsock与数据库通信。
39.unix domain socket是在socket架构上发展起来的用于同一台主机的进程间通讯(ipc)。它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序列号应答等。只是将应用层数据从一个进程拷贝到另一个进程;
40.编号1:unixsock连接1
41.编号2:unixsock连接2
42.....
43.5.数据库代理接通过10个固定的链接,接收到链接编号,还原出链接1~100。通过建立1~100的unixsock给数据库发送select 1。
44.6.数据库返回数据给数据库代理进程,数据库代理进程将数据加上原有的客户端编号,返回给客户端代理进程。
45.数据库返回查询结果select 1语句执行结果就是1,所以通过unixsock返回给客户端代理。
46.客户端代理进程将对应客户端编号的数据写入共享内存,服务进程访问数据库方法动态替换为从共享内存读取虚拟连接数据;所述动态替换的是读取函数,比如把method3函数替换为method4函数,method3是指代原函数,是创建tcp连接连到数据库的函数;method4是指代新函数,是通过unixsock方式连接数据库的函数。
47.客户端代理把各个链接编号和查询结果写入到共享内存。比如:编号1结果是1,编号2结果也是1。服务进程原来调用读取tcp传输控制协议读取结果方法被替换为读取内存结果,这时候就读取到各个链接需要的结果1。
48.请参阅图2所示,本发明还提供了一种数据库读写系统,包括建立模块、动态替换模块、编号模块、返回模块和写入模块,所述建立模块,即将服务端进程和客户端代理进程建立进程共享内存;所述动态替换模块,即通过对服务端进程访问数据库方式进行动态替换,将原有创建tcp传输控制协议连接的方法重定向为创建内存虚拟连接;所述编号模块,即客户端代理进程将内存虚拟连接进行编号,数据库代理进程接收到客户端编号的数据,将不同编号的数据建立独立unixsock连接与数据库通信;所述返回模块,即数据库返回数据给数据库代理进程,数据库代理进程将数据加上原有的客户端编号,返回给客户端代理进程;所述写入模块,即客户端代理进程将对应客户端编号的数据写入共享内存内,服务端进程访问数据库方式动态替换为从共享内存读取虚拟连接数据,从而实现减少了服务器之间的连接数。
49.所述建立模块进一步具体为:服务端进程启动时建立共享内存,通过tcp传输控制协议连接把内存地址范围发送给客户端代理进程;客户端代理进程通过tcp传输控制协议连接接收共享内存地址范围,将内存地址范围附加到自己的进程空间中,从而实现进程共享内存。
50.所述动态替换模块进一步具体为:通过对服务端进程访问数据库方式运行时,修改创建tcp传输控制协议连接的函数method1进行替换,替换为method2函数。
51.所述编号模块进一步具体为:客户端代理进程将虚拟连接进行编号,客户端代理进程与数据库代理进程建立固定数量连接,客户端代理进程将编号后的通过固定的连接发送;数据库代理进程接收到客户端编号的数据,将不同编号建立独立unixsock连接与数据库通信。
52.所述写入模块进一步具体为:服务端进程访问数据库方式在运行时替换读取函数,实现从共享内存读取虚拟连接数据。
53.以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1