CN113296974A - 数据库访问方法、装置、电子设备及可读存储介质 - Google Patents
数据库访问方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN113296974A CN113296974A CN202010901078.6A CN202010901078A CN113296974A CN 113296974 A CN113296974 A CN 113296974A CN 202010901078 A CN202010901078 A CN 202010901078A CN 113296974 A CN113296974 A CN 113296974A
- Authority
- CN
- China
- Prior art keywords
- database
- client
- communication port
- polling
- access operation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本公开实施例公开了一种数据库访问方法、装置、电子设备及可读存储介质。所述数据库访问方法,包括:经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
Description
技术领域
本公开涉及计算机技术领域,具体涉及一种数据库访问方法、装置、电子设备及可读存储介质。
背景技术
传统的数据库访问模式是应用程序直接对数据库中存储的数据进行访问,这种模式的特点是简单方便。但是,随着目前数据量不断的增大,传统模式遇到了单个表数据量太大、单个库数据量太大、单台数据量服务器压力很大、读写速度遇到瓶颈等问题。当面临以上问题时,一种解决方式是将数据存储在不同的数据库中,应用程序通过数据库读写中间件对数据库进行访问。
目前的数据库读写中间件通常是通过内核协议栈对来自客户端和数据库的网络报文进行读取和处理,例如,当接收到网络报文时,通过操作系统中断切换到内核态,数据库读写中间件在内核态下运行,以读取并处理报文,以实现客户端对数据库的访问。然而,采用这种方式会导致较多的CPU(Central Processing Unit,中央处理单元)时间消耗在内核态的网络报文处理中,对数据库读写中间件的其他处理造成了影响,进而影响数据库读写中间件的效率和性能。
发明内容
为了解决相关技术中的问题,本公开实施例提供一种数据库访问方法、装置、电子设备及可读存储介质。
第一方面,本公开实施例中提供了一种数据库访问方法,包括:
经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
结合第一方面,本公开在第一方面的第一种实现方式中,所述方法还包括:
通过轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求,
其中,所述经由客户端通信端口建立与所述客户端的通信连接,包括:响应于所述客户端发送的通信连接建立请求,经由客户端通信端口建立与所述客户端的通信连接。
结合第一方面,本公开在第一方面的第二种实现方式中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库读取请求;和/或通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:
经由所述数据库通信端口,向所述数据库发送所述数据库读取请求;
经由所述客户端通信端口,向所述客户端发送所述读数据。
结合第一方面的第二种实现方式,本公开在第一方面的第三种实现方式中:
所述数据库端口包括用于与从数据库进行通信的从数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库读取请求,包括经由所述从数据库通信端口,向所述从数据库发送所述数据库读取请求;
所述通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据,包括通过轮询所述从数据库通信端口,获取所述从数据库发送的与所述数据库读取请求相对应的读数据。
结合第一方面,本公开在第一方面的第四种实现方式中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库写入请求和与所述数据库写入请求相对应的写数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据。
结合第一方面的第四种实现方式,本公开在第一方面的第五种实现方式中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,还包括:通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库写入请求相对应的写入结果;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,还包括:经由所述客户端通信端口,向所述客户端发送所述写入结果。
结合第一方面的第四种实现方式,本公开在第一方面的第六种实现方式中:
所述数据库端口包括用于与主数据库进行通信的主数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据,包括经由所述主数据库通信端口,向所述主数据库发送所述数据库写入请求和所述写数据。
结合第一方面,本公开在第一方面的第七种实现方式中,所述方法由数据库读写中间件执行;和/或所述轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:在用户态下轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据。
结合第一方面,本公开在第一方面的第八种实现方式中,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:
在轮询到所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,在第一事件列表中添加相应的事件;
轮询所述第一事件列表,当发现所述第一事件列表中存在未处理事件时,处理所述未处理事件以实现所述客户端对所述数据库的数据库访问操作。
结合第一方面的第八种实现方式,本公开在第一方面的第九种实现方式中:
所述客户端通信端口接收到的与所述数据库访问操作相关的数据包括:数据库读取请求,或数据库写入请求和相应的写数据;和/或
所述数据库通信端口接收到的与所述数据库访问操作相关的数据包括:与从所述客户端接收到的数据读取请求相对应的读数据,或与从所述客户端接收到的所述数据库写入请求相对应的写入结果。
结合第一方面的第八种实现方式,本公开在第一方面的第十种实现方式中:
所述轮询所述客户端通信端口和/或所述数据库通信端口,包括通过所述第一线程的第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口和/或所述数据库通信端口;
所述在第一事件列表中添加相应的事件,包括通过所述第一功能模块在所述第一事件列表中添加相应的事件。
结合第一方面的第十种实现方式,本公开在第一方面的第十一种实现方式中,所述方法还包括:通过所述第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求。
结合第一方面的第十种实现方式,本公开在第一方面的第十二种实现方式中,所述获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括通过所述第一线程获取与所述客户端对所述数据库的数据库访问操作相关的数据,所述方法还包括:
监听第一线程的消息队列中的消息数据,所述第一线程的消息队列用于所述第一线程与第二线程之间的通信;
当监听到第一线程的消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件;
轮询所述第二事件列表,当发现所述第二事件列表中存在未处理事件时,通过所述第一线程的第二功能模块获取所述待处理的消息数据。
结合第一方面的第十二种实现方式,本公开在第一方面的第十三种实现方式中:
所述轮询所述第一事件列表和所述轮询所述第二事件列表,包括通过所述第一线程在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表。
第二方面,本公开实施例中提供了一种数据库访问装置,包括:
连接建立模块,被配置为经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
第一获取模块,被配置为通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
执行模块,被配置为基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
结合第二方面,本公开在第二方面的第一种实现方式中,所述装置还包括:
第二获取模块,被配置为通过轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求,
其中,所述经由客户端通信端口建立与所述客户端的通信连接,包括:响应于所述客户端发送的通信连接建立请求,经由客户端通信端口建立与所述客户端的通信连接。
结合第二方面,本公开在第二方面的第二种实现方式中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库读取请求;和/或通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:
经由所述数据库通信端口,向所述数据库发送所述数据库读取请求;
经由所述客户端通信端口,向所述客户端发送所述读数据。
结合第二方面的第二种实现方式,本公开在第二方面的第三种实现方式中:
所述数据库端口包括用于与从数据库进行通信的从数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库读取请求,包括经由所述从数据库通信端口,向所述从数据库发送所述数据库读取请求;
所述通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据,包括通过轮询所述从数据库通信端口,获取所述从数据库发送的与所述数据库读取请求相对应的读数据。
结合第二方面,本公开在第二方面的第四种实现方式中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库写入请求和与所述数据库写入请求相对应的写数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据。
结合第二方面的第四种实现方式,本公开在第二方面的第五种实现方式中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,还包括:通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库写入请求相对应的写入结果;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,还包括:经由所述客户端通信端口,向所述客户端发送所述写入结果。
结合第二方面的第四种实现方式,本公开在第二方面的第六种实现方式中:
所述数据库端口包括用于与主数据库进行通信的主数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据,包括经由所述主数据库通信端口,向所述主数据库发送所述数据库写入请求和所述写数据。
结合第二方面,本公开在第二方面的第七种实现方式中,所述方法由数据库读写中间件执行;和/或所述轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:在用户态下轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据。
结合第二方面,本公开在第二方面的第八种实现方式中,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:
在轮询到所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,在第一事件列表中添加相应的事件;
轮询所述第一事件列表,当发现所述第一事件列表中存在未处理事件时,处理所述未处理事件以实现所述客户端对所述数据库的数据库访问操作。
结合第二方面的第八种实现方式,本公开在第二方面的第九种实现方式中:
所述客户端通信端口接收到的与所述数据库访问操作相关的数据包括:数据库读取请求,或数据库写入请求和相应的写数据;和/或
所述数据库通信端口接收到的与所述数据库访问操作相关的数据包括:与从所述客户端接收到的数据读取请求相对应的读数据,或与从所述客户端接收到的所述数据库写入请求相对应的写入结果。
结合第二方面的第八种实现方式,本公开在第二方面的第十种实现方式中:
所述轮询所述客户端通信端口和/或所述数据库通信端口,包括通过所述第一线程的第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口和/或所述数据库通信端口;
所述在第一事件列表中添加相应的事件,包括通过所述第一功能模块在所述第一事件列表中添加相应的事件。
结合第二方面的第十种实现方式,本公开在第二方面的第十一种实现方式中,所述装置还包括:第三获取模块,被配置为通过所述第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求。
结合第二方面的第十种实现方式,本公开在第二方面的第十二种实现方式中,所述获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括通过所述第一线程获取与所述客户端对所述数据库的数据库访问操作相关的数据,所述装置还包括:
监听模块,被配置为监听第一线程的消息队列中的消息数据,所述第一线程的消息队列用于所述第一线程与第二线程之间的通信;
生成模块,被配置为当监听到第一线程的消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件;
第四获取模块,被配置为轮询所述第二事件列表,当发现所述第二事件列表中存在未处理事件时,通过所述第一线程的第二功能模块获取所述待处理的消息数据。
结合第二方面的第十二种实现方式,本公开在第二方面的第十三种实现方式中:
所述轮询所述第一事件列表和所述轮询所述第二事件列表,包括通过所述第一线程在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表。
第三方面,本公开实施例提供了一种电子设备,包括存储器和处理器,其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如第一方面至第一方面的第十三种实现方式中任一项所述的方法。
第四方面,本公开实施例中提供了一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如第一方面至第一方面的第十三种实现方式中任一项所述的方法。
根据本公开实施例提供的技术方案,通过在用户态下轮询客户端通信端口和/或数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,而无需在接收到网络报文时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
图1A示出了根据本公开实施例的应用场景示意图。
图1B示出根据本公开的实施例的数据库访问方法的流程图。
图2示出根据本公开实施例的数据库访问方法的一个具体示例。
图3示出根据本公开的实施例的数据库访问装置的结构框图。
图4示出根据本公开的实施例的数据库访问装置的结构框图。
图5示出根据本公开的实施例的电子设备的结构框图。
图6示出适于用来实现根据本公开实施例的方法的计算机系统的结构示意图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施例,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施例无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
如上所述,目前的数据库读写中间件通常是通过内核协议栈对来自客户端和数据库的网络报文进行读取和处理,例如,当接收到网络报文时,通过操作系统中断切换到内核态,数据库读写中间件在内核态下运行,以读取并处理报文,以实现客户端对数据库的访问。然而,采用这种方式会导致较多的CPU(Central Processing Unit,中央处理单元)时间消耗在内核态的网络报文处理中,对数据库读写中间件的其他处理造成了影响,进而影响数据库读写中间件的性能。
根据本公开的实施例提供了一种数据库访问方法,包括:
经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,数据库读写中间件通过轮询客户端通信端口和/或数据库通信端口,实现客户端对数据库的访问,而无需在接收到网络报文时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
图1A示出了根据本公开实施例的应用场景示意图。
如图1A所示,数据库读写中间件经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接。例如,客户端通信端口包括端口1、端口2、端口3,数据库通信端口包括端口4、端口5,数据库读写中间件经由端口1建立与客户端A、客户端B的通信连接,经由端口2建立与客户端C的通信连接,经由端口3建立与客户端D、客户端E、客户端F的通信连接,经由端口4建立与数据库a的通信连接,经由端口5建立与数据库b、数据库c的通信连接。
需要注意的是,图1A所示仅为示例,用于说明本公开的原理。根据本公开的实施例,数据库读写中间件可以实现为软件、硬件,或二者的结合。客户端通信端口可以连接一个或多个客户端,数据库通信端口可以连接一个或多个数据库。
图1B示出根据本公开的实施例的数据库访问方法的流程图。如图1B所示,所述数据库访问方法包括以下步骤S101-S103:
在步骤S101中,经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
在步骤S102中,通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
在步骤S103中,基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,图1B所示的数据库访问方法可以由图1A所示的数据库读写中间件执行。。
根据本公开的实施例,所述客户端例如可以是图1A所示的客户端A~客户端F中的任意一个或多个客户端。所述数据库例如可以是图1A所示的服务器a~服务器c中的任意一个或多个数据库。所述数据库读写中间件经由数据库通信端口建立与数据库的通信连接,可以是在数据库读写中间件启动之后即建立与数据库的通信连接并保持该通信连接,也可以是在收到客户端的数据库访问请求之后,根据客户端要访问的数据库建立与相应数据库的通信连接。
根据本公开的实施例,所述轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:在用户态下轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据。例如,第一线程可以根据用户态网络协议栈,在用户态下轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据。
根据本公开的实施例,内核态与用户态是操作系统的两种运行级别。运行在用户态下的线程不能直接访问操作系统内核数据结构和程序,而运行在内核态下的线程能够直接访问操作系统内核数据结构和程序。一般而言,应用程序的线程大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。在用户态下,线程所能访问的内存空间和对象受到限制,其所处于占有的处理机(包括中央处理器、主存储器、输入-输出接口)是可被抢占的,而处于核心态执行中的线程,则能访问所有的内存空间和对象,且所占有的处理机是不允许被抢占的。
根据本公开的实施例,数据库读写中间件在用户态下,通过轮询客户端通信端口和/或数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,而无需在接收到网络报文时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
此外,数据库读写中间件在用户态下,通过轮询客户端通信端口和/或数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,此时可以采用大页(Hugepage)的内存管理机制。在内核态下,内存页的基本单位是4k,当数据存取量较大时,转译后备缓冲区(Translation Lookaside Buffer,TLB)发生错误的概率较大,而在用户态下采用大页机制,其基本单位可以为1M或更大,可以显著减小TLB发生错误的概率。
根据本公开的实施例,所述方法还包括:通过轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求,其中,所述经由客户端通信端口建立与所述客户端的通信连接,包括:响应于所述客户端发送的通信连接建立请求,经由客户端通信端口建立与所述客户端的通信连接。
根据本公开的实施例,通过轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求,无需在接收到通信连接建立请求时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:
通过轮询所述客户端通信端口,获取所述客户端发送的数据库读取请求;和/或通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:
经由所述数据库通信端口,向所述数据库发送所述数据库读取请求;
经由所述客户端通信端口,向所述客户端发送所述读数据。
根据本公开的实施例,通过轮询所述客户端通信端口,获取所述客户端发送的数据库读取请求,无需在接收到来自客户端的数据库读取请求时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据,无需在接收到来自数据库的读数据时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
根据本公开的实施例,所述数据库端口包括用于与从数据库进行通信的从数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库读取请求,包括经由所述从数据库通信端口,向所述从数据库发送所述数据库读取请求;
所述通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据,包括通过轮询所述从数据库通信端口,获取所述从数据库发送的与所述数据库读取请求相对应的读数据。
根据本公开的实施例,所述数据访问方法可以用于数据库读写分离架构。例如,如图1A所示,数据库a可以是主数据库,用于处理数据库写入请求,相应地,端口4是主数据库端口,数据库b和数据库c可以是从数据库,用于处理数据库读取请求,相应地,端口5是从数据库端口。在主数据库的数据发生更新之后,从数据库的数据相应地进行更新。
例如,如图1A所示,客户端A经由端口1发送数据库读取请求,数据库读写中间件轮询端口1获取该数据库读取请求,根据负载均衡策略,将该数据库读取请求经由端口5发送到数据库b。然后,数据库读写中间件轮询端口5,以获取数据库b发送的与所述数据库读取请求相对应的读数据。然后,数据库读写中间件可以经由端口1向客户端A发送与所述数据库读取请求相对应的读数据。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:
通过轮询所述客户端通信端口,获取所述客户端发送的数据库写入请求和与所述数据库写入请求相对应的写数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据。
根据本公开的实施例,通过轮询所述客户端通信端口,获取所述客户端发送的数据库写入请求,无需在接收到来自客户端的数据库写入请求时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,还包括:通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库写入请求相对应的写入结果;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,还包括:经由所述客户端通信端口,向所述客户端发送所述写入结果。
根据本公开的实施例,通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库写入请求相对应的写入结果,无需在接收到来自数据库的写入结果时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
根据本公开的实施例,所述数据库端口包括用于与主数据库进行通信的主数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据,包括经由所述主数据库通信端口,向所述主数据库发送所述数据库写入请求和所述写数据。
例如,如图1A所示,客户端C经由端口2发送数据库写入请求和相应的写数据,数据库读写中间件轮询端口2获取该数据库写入请求,将该数据库写入请求经由端口4发送到数据库a。然后,数据库读写中间件轮询端口4,以获取数据库a发送的与所述数据库写入请求相对应的写入结果。然后,数据库读写中间件可以经由端口2向客户端C发送与所述数据库写入请求相对应的写入结果。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:
在轮询到所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,在第一事件列表中添加相应的事件;
轮询所述第一事件列表,当发现所述第一事件列表中存在未处理事件时,处理所述未处理事件以实现所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,在轮询到所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,在第一事件列表中添加相应的事件,无需在所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
根据本公开的实施例,所述客户端通信端口接收到的与所述数据库访问操作相关的数据包括:数据库读取请求,或数据库写入请求和相应的写数据;和/或
所述数据库通信端口接收到的与所述数据库访问操作相关的数据包括:与从所述客户端接收到的数据读取请求相对应的读数据,或与从所述客户端接收到的所述数据库写入请求相对应的写入结果。
根据本公开的实施例,
所述轮询所述客户端通信端口和/或所述数据库通信端口,包括通过所述第一线程的第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口和/或所述数据库通信端口;
所述在第一事件列表中添加相应的事件,包括通过所述第一功能模块在所述第一事件列表中添加相应的事件。
根据本公开的实施例,通过所述第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求。
例如,数据库读写中间件可以运行第一线程,所述第一线程例如可以是用于数据库读写中间件与客户端和服务器的通信的线程。第一线程可以创建用于与客户端和/或服务器通信的第一功能模块,由第一功能模块,根据用户态网络协议栈实现上述相应操作。
根据本公开的实施例,所述获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括通过第一线程获取与所述客户端对所述数据库的数据库访问操作相关的数据,所述方法还包括:
监听第一线程的消息队列中的消息数据,所述第一线程的消息队列用于所述第一线程与第二线程之间的通信;
当监听到第一线程的消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件;
轮询所述第二事件列表,当发现所述第二事件列表中存在未处理事件时,通过所述第一线程的第二功能模块获取所述待处理的消息数据。
根据本公开的实施例,第一线程还可以与其他线程,例如第二线程通信。第一线程可以创建用于与其他线程之间的通信的第二功能模块。当监听到第一线程的消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件,轮询所述第二事件列表,当发现所述第二事件列表中存在未处理事件时,通过所述第一线程的第二功能模块获取所述待处理的消息数据。
根据本公开的实施例,第一线程创建用于与客户端和/或服务器通信的第一功能模块,该第一功能模块根据用户态网络协议栈在用户态下处理与客户端和/或服务器的通信。第一线程还创建用于第一线程与其他线程之间的通信的第二功能模块,第一线程与其他线程之间的通信在内核态下运行,通过第二功能模块获取第一线程与其他线程之间的通信的消息数据。以此方式,在同一线程下同时实现了用户态功能模块与内核态功能模块,以执行其各自的相应功能,在不显著增加应用程序复杂度的情况下,将先前需要在内核态下完成的部分操作改为在用户态下执行,以减少内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
根据本公开的实施例,所述轮询所述第一事件列表和所述轮询所述第二事件列表,包括通过所述第一线程在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表。通过在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表,可以实现对事件列表中的事件的及时处理。
图2示出根据本公开实施例的数据库访问方法的一个具体示例。
如图2所示,根据本公开实施例,数据库读写中间件运行第一线程。在第一线程运行时,第一线程创建第一功能模块,例如用于与客户端和/或数据库通信的第一实例。第一功能模块在用户态下运行,根据用户态网络协议栈轮询网卡中的客户端通信端口是否有针对自己的数据,例如,客户端发送的通信连接建立请求。此外,在第一线程初始化时,第一线程创建第二功能模块,例如用于第一线程与其他线程(例如,第二线程)通信的第二实例,并初始化用于第一线程与其他线程(例如,第二线程)通信的消息队列,将消息队列的文件描述符加入第一线程的监听列表。
根据本公开的实施例,网卡具有数据接收队列R1、R2和数据发送队列T1、T2。接收队列R1用于存放网卡接收到的针对第一功能模块的数据,发送队列T1用于存放第一功能模块要经由网卡发送的数据。接收队列R2用于存放网卡接收到的针对第二功能模块的数据,发送队列T2用于存放第二功能模块要经由网卡发送的数据。根据本公开的实施例,接收队列R1、R2可以合并实现为同一个队列,和/或发送队列T1、T2可以合并实现为同一个队列。
根据本公开的实施例,第二功能模块可以根据内核协议栈实现经由网卡接收来自客户端或数据库的数据和/或经由网卡向客户端或数据库发送数据。该功能可以作为第一功能模块经由网卡与客户端或数据库之间的数据收发的补充或备用功能,以便在第一功能模块负荷过重或出现故障时补充或替代第一功能模块实现数据收发功能。
根据本公开的实施例,第一功能模块还具有缓冲区,用于存放来自或去往网卡的数据和第一功能模块处理过程中使用的其他数据。
当轮询到客户端发送的通信连接建立请求之后,数据库读写中间件建立与客户端的通信连接,并且将对应于该客户端的文件描述符加入第一功能模块的轮询列表。根据本公开的实施例,建立与客户端的通信连接的操作可以由第一线程执行,也可以由其他线程执行。将对应于该客户端的文件描述符加入第一功能模块的轮询列表的操作可以由第一线程执行,也可以由其他线程执行。第一功能模块轮询客户端通信端口是否有来自该客户端的与数据库访问操作相关的数据,例如轮询客户端通信端口是否有与该客户端的文件描述符相关的与数据库访问操作相关的数据。当轮询到来自该客户端的与数据库访问操作相关的数据时,在第一事件列表中添加相应的事件。
第一功能模块还建立与数据库的连接,并将对应于数据库的文件描述符加入第一功能模块的轮询列表。根据本公开的实施例,建立与数据库的通信连接的操作可以由第一线程执行,也可以由其他线程执行。将对应于该数据库的文件描述符加入第一功能模块的轮询列表的操作可以由第一线程执行,也可以由其他线程执行。第一功能模块根据用户态网络协议栈,在用户态下轮询数据库通信端口是否有来自该数据库的与数据库访问操作相关的数据,例如轮询数据库通信端口是否有与该数据库的文件描述符相关的与数据库访问操作相关的数据。当轮询到来自该数据库的与数据库访问操作相关的数据时,在第一事件列表中添加相应的事件。
第一线程轮询第一事件列表,当发现第一事件列表中存在未处理事件时,第一功能模块从客户端通信端口获取与该事件相关的数据,第一线程调用相应的处理功能来处理与所述未处理事件相关的数据,例如根据数据库读取请求从数据库获取读数据,或根据数据库写入请求向数据库写入数据,以实现所述客户端对所述数据库的数据库访问操作。
第一功能模块在用户态下运行,通过轮询客户端通信端口和/或数据库通信端口,实现客户端对数据库的访问,而无需在接收到网络报文时通过操作系统中断切换到内核态,避免了用户态和内核态之间切换所需的系统调用,减少了内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。此外,在用户态可以采用大页(Hugepage)的内存管理机制。在内核态下,内存页的基本单位是4k,当数据存取量较大时,转译后备缓冲区(Translation Lookaside Buffer,TLB)发生错误的概率较大,而采用大页机制,其基本单位可以为1M或更大,TLB发生错误的概率可以明显减小。
第一线程的消息队列用于第一线程与其他线程(例如,第二线程)的通信。当消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件。第一线程轮询第二事件列表,当发现第二事件列表中存在未处理事件时,第二功能模块从消息队列获取与该事件相关的数据,第一线程调用相应的处理功能来处理与所述未处理事件相关的数据,以实现第一线程与第二线程之间的通信。
通过第一线程创建第一功能模块和第二功能模块,在同一线程下同时实现了用户态功能模块与内核态功能模块,以执行其各自的相应功能,在不显著增加应用程序复杂度的情况下,将先前需要在内核态下完成的部分操作改为在用户态下执行,以减少内核开销,从而可以将更多的CPU时间用于数据库读写中间件的其他处理,提升了数据库读写中间件的效率和性能。
所述轮询所述第一事件列表和所述轮询所述第二事件列表,包括通过所述第一线程在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表。通过在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表,可以实现对事件列表中的事件的及时处理。
图3示出根据本公开的实施例的数据库访问装置的结构框图。其中,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。
如图3所示,根据本公开实施例的数据库访问装置300包括:
连接建立模块301,被配置为经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
第一获取模块302,被配置为通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
执行模块303,被配置为基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,数据库访问装置300还包括:
第二获取模块304,被配置为通过轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求,
其中,所述经由客户端通信端口建立与所述客户端的通信连接,包括:响应于所述客户端发送的通信连接建立请求,经由客户端通信端口建立与所述客户端的通信连接。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库读取请求;和/或通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据。
根据本公开的实施例,所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:
经由所述数据库通信端口,向所述数据库发送所述数据库读取请求;
经由所述客户端通信端口,向所述客户端发送所述读数据。
根据本公开的实施例,所述数据库端口包括用于与从数据库进行通信的从数据库通信端口;所述经由所述数据库通信端口,向所述数据库发送所述数据库读取请求,包括经由所述从数据库通信端口,向所述从数据库发送所述数据库读取请求;所述通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据,包括通过轮询所述从数据库通信端口,获取所述从数据库发送的与所述数据库读取请求相对应的读数据。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库写入请求和与所述数据库写入请求相对应的写数据;所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,还包括:通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库写入请求相对应的写入结果;所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,还包括:经由所述客户端通信端口,向所述客户端发送所述写入结果。
根据本公开的实施例,所述数据库端口包括用于与主数据库进行通信的主数据库通信端口;所述经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据,包括经由所述主数据库通信端口,向所述主数据库发送所述数据库写入请求和所述写数据。
图4示出根据本公开的实施例的数据库访问装置的结构框图。其中,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。
如图4所示,根据本公开实施例的数据库访问装置400包括:
连接建立模块301,被配置为经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
第一获取模块302,被配置为通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
执行模块303,被配置为基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:在轮询到所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,在第一事件列表中添加相应的事件;轮询所述第一事件列表,当发现所述第一事件列表中存在未处理事件时,处理所述未处理事件以实现所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,所述客户端通信端口接收到的与所述数据库访问操作相关的数据包括:数据库读取请求,或数据库写入请求和相应的写数据;和/或所述数据库通信端口接收到的与所述数据库访问操作相关的数据包括:与从所述客户端接收到的数据读取请求相对应的读数据,或与从所述客户端接收到的所述数据库写入请求相对应的写入结果。
根据本公开的实施例,所述装置设置在数据库读写中间件中;和/或所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过在用户态下轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据。
根据本公开的实施例,所述轮询所述客户端通信端口和/或所述数据库通信端口,包括通过所述第一线程的第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口和/或所述数据库通信端口;所述在第一事件列表中添加相应的事件,包括通过所述第一功能模块在所述第一事件列表中添加相应的事件。
根据本公开的实施例,所述数据库访问装置400还包括第三获取模块401,被配置为通过所述第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求。
根据本公开的实施例,所述获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括通过第一线程获取与所述客户端对所述数据库的数据库访问操作相关的数据,所述数据库访问装置400还包括:
监听模块402,被配置为监听第一线程的消息队列中的消息数据,所述第一线程的消息队列用于所述第一线程与第二线程之间的通信;
生成模块403,被配置为当监听到第一线程的消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件;
第四获取模块404,被配置为轮询所述第二事件列表,当发现所述第二事件列表中存在未处理事件时,通过所述第一线程的第二功能模块获取所述待处理的消息数据。
根据本公开的实施例,所述轮询所述第一事件列表和所述轮询所述第二事件列表,包括通过所述第一线程在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表。
本公开还公开了一种电子设备,图5示出根据本公开的实施例的电子设备的结构框图。
如图5所示,所述电子设备500包括存储器501和处理器502,其中,存储器501用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器502执行以实现根据本公开的实施例的数据库访问方法。
根据本公开的实施例,一种数据库访问方法,包括:
经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,所述方法还包括:
通过轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求,
其中,所述经由客户端通信端口建立与所述客户端的通信连接,包括:响应于所述客户端发送的通信连接建立请求,经由客户端通信端口建立与所述客户端的通信连接。
根据本公开的实施例,其中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库读取请求;和/或通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:
经由所述数据库通信端口,向所述数据库发送所述数据库读取请求;
经由所述客户端通信端口,向所述客户端发送所述读数据。
根据本公开的实施例,其中:
所述数据库端口包括用于与从数据库进行通信的从数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库读取请求,包括经由所述从数据库通信端口,向所述从数据库发送所述数据库读取请求;
所述通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据,包括通过轮询所述从数据库通信端口,获取所述从数据库发送的与所述数据库读取请求相对应的读数据。
根据本公开的实施例,其中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库写入请求和与所述数据库写入请求相对应的写数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据。
根据本公开的实施例,其中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,还包括:通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库写入请求相对应的写入结果;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,还包括:经由所述客户端通信端口,向所述客户端发送所述写入结果。
根据本公开的实施例,其中:
所述数据库端口包括用于与主数据库进行通信的主数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据,包括经由所述主数据库通信端口,向所述主数据库发送所述数据库写入请求和所述写数据。
根据本公开的实施例,其中,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:
在轮询到所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,在第一事件列表中添加相应的事件;
轮询所述第一事件列表,当发现所述第一事件列表中存在未处理事件时,处理所述未处理事件以实现所述客户端对所述数据库的数据库访问操作。
根据本公开的实施例,其中:
所述客户端通信端口接收到的与所述数据库访问操作相关的数据包括:数据库读取请求,或数据库写入请求和相应的写数据;和/或
所述数据库通信端口接收到的与所述数据库访问操作相关的数据包括:与从所述客户端接收到的数据读取请求相对应的读数据,或与从所述客户端接收到的所述数据库写入请求相对应的写入结果。
根据本公开的实施例,其中:
所述方法由数据库读写中间件执行;和/或
所述轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:在用户态下轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据。
根据本公开的实施例,其中:
所述轮询所述客户端通信端口和/或所述数据库通信端口,包括通过所述第一线程的第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口和/或所述数据库通信端口;
所述在第一事件列表中添加相应的事件,包括通过所述第一功能模块在所述第一事件列表中添加相应的事件。
根据本公开的实施例,所述方法还包括:通过所述第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求。
根据本公开的实施例,其中,所述获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括通过第一线程获取与所述客户端对所述数据库的数据库访问操作相关的数据,所述方法还包括:
监听第一线程的消息队列中的消息数据,所述第一线程的消息队列用于所述第一线程与第二线程之间的通信;
当监听到第一线程的消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件;
轮询所述第二事件列表,当发现所述第二事件列表中存在未处理事件时,通过所述第一线程的第二功能模块获取所述待处理的消息数据。
根据本公开的实施例,其中:
所述轮询所述第一事件列表和所述轮询所述第二事件列表,包括通过所述第一线程在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表。
图6示出适于用来实现根据本公开实施例的方法的计算机系统的结构示意图。
如图6所示,计算机系统600包括处理单元601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行上述实施例中的各种处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。处理单元601、ROM602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。其中,所述处理单元601可实现为CPU、GPU、TPU、FPGA、NPU等处理单元。
特别地,根据本公开的实施例,上文描述的方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行上述方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过可编程硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中电子设备或计算机系统中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (17)
1.一种数据库访问方法,包括:
经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
2.根据权利要求1所述的方法,还包括:
通过轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求,
其中,所述经由客户端通信端口建立与所述客户端的通信连接,包括:响应于所述客户端发送的通信连接建立请求,经由客户端通信端口建立与所述客户端的通信连接。
3.根据权利要求1所述的方法,其中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库读取请求;和/或通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:
经由所述数据库通信端口,向所述数据库发送所述数据库读取请求;
经由所述客户端通信端口,向所述客户端发送所述读数据。
4.根据权利要求3所述的方法,其中:
所述数据库端口包括用于与从数据库进行通信的从数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库读取请求,包括经由所述从数据库通信端口,向所述从数据库发送所述数据库读取请求;
所述通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库读取请求相对应的读数据,包括通过轮询所述从数据库通信端口,获取所述从数据库发送的与所述数据库读取请求相对应的读数据。
5.根据权利要求1所述的方法,其中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:通过轮询所述客户端通信端口,获取所述客户端发送的数据库写入请求和与所述数据库写入请求相对应的写数据;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,包括:经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据。
6.根据权利要求5所述的方法,其中:
所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,还包括:通过轮询所述数据库通信端口,获取所述数据库发送的与所述数据库写入请求相对应的写入结果;
所述基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作,还包括:经由所述客户端通信端口,向所述客户端发送所述写入结果。
7.根据权利要求5所述的方法,其中:
所述数据库端口包括用于与主数据库进行通信的主数据库通信端口;
所述经由所述数据库通信端口,向所述数据库发送所述数据库写入请求和所述写数据,包括经由所述主数据库通信端口,向所述主数据库发送所述数据库写入请求和所述写数据。
8.根据权利要求1所述的方法,其中:
所述方法由数据库读写中间件执行;和/或
所述轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:在用户态下轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据。
9.根据权利要求1所述的方法,其中,所述通过轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括:
在轮询到所述客户端通信端口和/或所述数据库通信端口接收到与所述数据库访问操作相关的数据时,在第一事件列表中添加相应的事件;
轮询所述第一事件列表,当发现所述第一事件列表中存在未处理事件时,处理所述未处理事件以实现所述客户端对所述数据库的数据库访问操作。
10.根据权利要求9所述的方法,其中:
所述客户端通信端口接收到的与所述数据库访问操作相关的数据包括:数据库读取请求,或数据库写入请求和相应的写数据;和/或
所述数据库通信端口接收到的与所述数据库访问操作相关的数据包括:与从所述客户端接收到的数据读取请求相对应的读数据,或与从所述客户端接收到的所述数据库写入请求相对应的写入结果。
11.根据权利要求9所述的方法,其中:
所述轮询所述客户端通信端口和/或所述数据库通信端口,包括通过所述第一线程的第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口和/或所述数据库通信端口;
所述在第一事件列表中添加相应的事件,包括通过所述第一功能模块在所述第一事件列表中添加相应的事件。
12.根据权利要求11所述的方法,还包括:通过所述第一功能模块,根据用户态网络协议栈轮询所述客户端通信端口,获取所述客户端发送的通信连接建立请求。
13.根据权利要求11所述的方法,其中,所述获取与所述客户端对所述数据库的数据库访问操作相关的数据,包括通过所述第一线程获取与所述客户端对所述数据库的数据库访问操作相关的数据,所述方法还包括:
监听第一线程的消息队列中的消息数据,所述第一线程的消息队列用于所述第一线程与第二线程之间的通信;
当监听到第一线程的消息队列中存在待处理的消息数据时,生成操作系统中断,通过操作系统在第二事件列表中添加相应的事件;
轮询所述第二事件列表,当发现所述第二事件列表中存在未处理事件时,通过所述第一线程的第二功能模块获取所述待处理的消息数据。
14.根据权利要求13所述的方法,其中:
所述轮询所述第一事件列表和所述轮询所述第二事件列表,包括通过所述第一线程在同一轮次中轮询所述第一事件列表和轮询所述第二事件列表。
15.一种数据库访问装置,包括:
连接建立模块,被配置为经由客户端通信端口建立与客户端的通信连接,经由数据库通信端口建立与数据库的通信连接;
第一获取模块,被配置为通过在用户态下运行的第一线程轮询所述客户端通信端口和/或所述数据库通信端口,获取与所述客户端对所述数据库的数据库访问操作相关的数据;
执行模块,被配置为基于与所述客户端对所述数据库的数据库访问操作相关的数据,执行所述客户端对所述数据库的数据库访问操作。
16.一种电子设备,其特征在于,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1~14中任一项所述的方法步骤。
17.一种可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现权利要求1~14中任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010901078.6A CN113296974B (zh) | 2020-08-31 | 2020-08-31 | 数据库访问方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010901078.6A CN113296974B (zh) | 2020-08-31 | 2020-08-31 | 数据库访问方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113296974A true CN113296974A (zh) | 2021-08-24 |
CN113296974B CN113296974B (zh) | 2022-04-26 |
Family
ID=77318624
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010901078.6A Active CN113296974B (zh) | 2020-08-31 | 2020-08-31 | 数据库访问方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113296974B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023046141A1 (zh) * | 2021-09-27 | 2023-03-30 | 华为技术有限公司 | 一种数据库网络负载性能的加速框架、加速方法及设备 |
CN116820801A (zh) * | 2023-06-15 | 2023-09-29 | 中科驭数(北京)科技有限公司 | Io多路复用机制的优化方法、装置及设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2265158A1 (en) * | 1998-04-07 | 1999-10-07 | Lucent Technologies Inc. | Method and apparatus for correct and complete transactions in a fault tolerant distributed database system |
US20100132024A1 (en) * | 2006-12-20 | 2010-05-27 | Ron Ben-Natan | Identifying attribute propagation for multi-tier processing |
CN102426594A (zh) * | 2011-10-31 | 2012-04-25 | 沈文策 | 对数据库进行操作的方法和系统 |
CN103544324A (zh) * | 2013-11-11 | 2014-01-29 | 北京搜狐新媒体信息技术有限公司 | 一种内核态的数据访问方法、装置及系统 |
WO2016029790A1 (zh) * | 2014-08-28 | 2016-03-03 | 北京奇虎科技有限公司 | 数据传输方法及装置 |
WO2016091067A1 (zh) * | 2014-12-11 | 2016-06-16 | 北京奇虎科技有限公司 | 一种数据操作方法及装置 |
CN110413676A (zh) * | 2019-07-25 | 2019-11-05 | 中国工商银行股份有限公司 | 数据库的访问方法及其装置、电子设备和介质 |
CN110837482A (zh) * | 2019-10-21 | 2020-02-25 | 苏州元核云技术有限公司 | 分布式块存储低延迟控制方法、系统及设备 |
CN111367983A (zh) * | 2020-03-10 | 2020-07-03 | 中国联合网络通信集团有限公司 | 数据库访问方法、系统、设备和存储介质 |
CN111538605A (zh) * | 2020-04-24 | 2020-08-14 | 北京思特奇信息技术股份有限公司 | 一种分布式数据访问层中间件及命令执行方法和装置 |
-
2020
- 2020-08-31 CN CN202010901078.6A patent/CN113296974B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2265158A1 (en) * | 1998-04-07 | 1999-10-07 | Lucent Technologies Inc. | Method and apparatus for correct and complete transactions in a fault tolerant distributed database system |
US20100132024A1 (en) * | 2006-12-20 | 2010-05-27 | Ron Ben-Natan | Identifying attribute propagation for multi-tier processing |
CN102426594A (zh) * | 2011-10-31 | 2012-04-25 | 沈文策 | 对数据库进行操作的方法和系统 |
CN103544324A (zh) * | 2013-11-11 | 2014-01-29 | 北京搜狐新媒体信息技术有限公司 | 一种内核态的数据访问方法、装置及系统 |
WO2016029790A1 (zh) * | 2014-08-28 | 2016-03-03 | 北京奇虎科技有限公司 | 数据传输方法及装置 |
WO2016091067A1 (zh) * | 2014-12-11 | 2016-06-16 | 北京奇虎科技有限公司 | 一种数据操作方法及装置 |
CN110413676A (zh) * | 2019-07-25 | 2019-11-05 | 中国工商银行股份有限公司 | 数据库的访问方法及其装置、电子设备和介质 |
CN110837482A (zh) * | 2019-10-21 | 2020-02-25 | 苏州元核云技术有限公司 | 分布式块存储低延迟控制方法、系统及设备 |
CN111367983A (zh) * | 2020-03-10 | 2020-07-03 | 中国联合网络通信集团有限公司 | 数据库访问方法、系统、设备和存储介质 |
CN111538605A (zh) * | 2020-04-24 | 2020-08-14 | 北京思特奇信息技术股份有限公司 | 一种分布式数据访问层中间件及命令执行方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023046141A1 (zh) * | 2021-09-27 | 2023-03-30 | 华为技术有限公司 | 一种数据库网络负载性能的加速框架、加速方法及设备 |
CN116820801A (zh) * | 2023-06-15 | 2023-09-29 | 中科驭数(北京)科技有限公司 | Io多路复用机制的优化方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113296974B (zh) | 2022-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10241830B2 (en) | Data processing method and a computer using distribution service module | |
CN108647104B (zh) | 请求处理方法、服务器及计算机可读存储介质 | |
US10671458B2 (en) | Epoll optimisations | |
US5784617A (en) | Resource-capability-based method and system for handling service processor requests | |
CN110677277B (zh) | 数据处理方法、装置、服务器和计算机可读存储介质 | |
US7085805B1 (en) | Remote device management in grouped server environment | |
CN113296974B (zh) | 数据库访问方法、装置、电子设备及可读存储介质 | |
US20070133434A1 (en) | Network router failover mechanism | |
US20110145318A1 (en) | Interactive analytics processing | |
US8458702B1 (en) | Method for implementing user space up-calls on java virtual machine before/after garbage collection | |
CN115878301A (zh) | 一种数据库网络负载性能的加速框架、加速方法及设备 | |
CN114265753A (zh) | 消息队列的管理方法、管理系统和电子设备 | |
CN115686836A (zh) | 一种安装有加速器的卸载卡 | |
CN105373563B (zh) | 数据库切换方法及装置 | |
CN115904761A (zh) | 片上系统、车辆及视频处理单元虚拟化方法 | |
CN117370046A (zh) | 进程间通信方法、系统、设备和存储介质 | |
US20230153153A1 (en) | Task processing method and apparatus | |
CN116450554A (zh) | 中断处理方法、根复合体设备及电子设备 | |
CN116319303A (zh) | 基于dpu跨卡链路聚合的网卡虚拟化方法 | |
CN115549858A (zh) | 数据传输方法以及装置 | |
US20090182927A1 (en) | Direct Memory Move of Multiple Buffers Between Logical Partitions | |
CN115098272A (zh) | Gpu资源调度方法、调度器、电子设备和存储介质 | |
CN114595080A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN117041147B (zh) | 智能网卡设备、主机设备和方法及系统 | |
CN114945023B (zh) | 一种网络连接复用方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40058644 Country of ref document: HK |