CN103226598B - 访问数据库的方法和装置以及数据库管理系统 - Google Patents
访问数据库的方法和装置以及数据库管理系统 Download PDFInfo
- Publication number
- CN103226598B CN103226598B CN201310140523.1A CN201310140523A CN103226598B CN 103226598 B CN103226598 B CN 103226598B CN 201310140523 A CN201310140523 A CN 201310140523A CN 103226598 B CN103226598 B CN 103226598B
- Authority
- CN
- China
- Prior art keywords
- data
- business process
- request
- shared drive
- access request
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种访问数据库的方法和装置以及数据库管理系统。本发明访问数据库的方法,包括:通过数据库管理系统DBMS的客户端库的接口接收业务进程发起的数据访问请求,客户端库用于提供DBMS的客户端和服务器之间的数据访问接口,业务进程运行在DBMS的客户端上,识别数据访问请求的类型,根据数据访问请求的类型确定由DBMS的客户端库响应数据访问请求或由DBMS的服务器响应数据访问请求。本发明实施例通过根据数据访问请求的类型,能够确定由客户端库来响应访问请求或由服务器来响应访问请求,避免了全部由服务器来响应访问请求的瓶颈问题,实现简单,成本低。
Description
技术领域
本发明实施例涉及数据处理技术,尤其涉及一种访问数据库的方法和装置以及数据库管理系统。
背景技术
数据访问是目前广泛存在的数据处理需求,通常是应用程序对数据库中的数据进行访问。例如可基于数据库管理系统(DatabaseManagementSystem,DBMS)来实现数据访问。DBMS一般包括客户端和服务器,通过客户端/服务器(Client/Server,C/S)的模式对数据库进行管理。
应用程序访问数据库最常用的方法是,客户端将应用程序的请求通过通信通道发送给服务器,服务器处理客户端发送的请求,对数据库进行查询、读、写等操作,然后将处理结果通过通信通道返回给客户端,从而完成一次典型的服务流程。C/S访问模式,通过通信通道的方式,有效的隔离了应用程序和DBMS,保证了DBMS的健壮性。但C/S访问模式下产生了额外的网络通信和进程切换等开销,限制了DBMS的实时性和吞吐量。特别是在高速的内存DBMS中,数据本身的访问和修改都是在微秒级下,但当前局域网的网络时延一般是在毫秒级以上。即使是本机访问,也存在协议栈的处理和进程切换的开销。这些都使得C/S模式成为内存DBMS的一种访问瓶颈。即应用程序通过通信通道访问数据库,优点是保证了DBMS的健壮性,因为客户端出现异常不会影响到DBMS,缺点是通信开销和进程切换开销大。
当DBMS采用共享内存访问的方式时,将所有数据存放在共享内存中,共享数据包括各管理功能模块的管理数据和数据库中实际存在的数据,应用程序直接访问共享内存中的数据,应用程序访问共享内存后需要保证能够回到最初状态,否则当应用程序修改共享内存数据发生异常时会导致共享数据破坏,造成DBMS不能使用。ORACLE的Timesten产品当前采用对所有对共享内存的写操作都通过日志管理,一旦有进程崩溃,该进程产生的日志就可用作恢复,对共享内存操作前必须进入临界区,每个修改操作对应一条操作日志记录。由专门的监控进程来监控应用进程的状态,一旦发现崩溃,立即启动操作日志清理进程,根据操作日志来恢复共享内存数据。
应用程序访问共享内存后需要保证能够回到最初状态,否则当应用程序修改共享内存数据发生异常时会导致共享数据破坏,造成DBMS不能使用,而现有技术中采用日志管理技术解决应用程序修改共享内存数据发生异常时导致共享内存数据破坏的问题,使整个系统的复杂度大大的提高,实现成本较大,同时,引入日志也带来了额外的开销。。
发明内容
本发明实施例提供一种访问数据库的方法和装置以及数据库管理系统,以优化应用程序对数据库的访问方案,提高访问效率,且降低实现复杂度。
第一方面,本发明实施例提供一种访问数据库的方法,包括:
通过数据库管理系统DBMS的客户端库接收业务进程发起的数据访问请求,所述客户端库用于为所述业务进程和所述DBMS的服务器提供数据访问的接口;
识别所述数据访问请求的类型,并根据所述数据访问请求的类型响应所述数据访问请求。
在第一方面的第一种可能的实现方式中,所述数据请求的类型包括:读请求和写请求;所述根据所述数据访问请求的类型响应所述数据访问请求,包括:
若所述数据访问请求的类型为读请求,则触发所述DBMS的客户端库响应所述数据访问请求。
若所述数据访问请求的类型为写请求,则由所述DBMS的服务器响应所述数据访问请求。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述若所述数据访问请求的类型为读请求,则触发所述DBMS的客户端库响应所述数据访问请求,包括:
若所述数据访问请求为请求读取第一数据的数据读请求时,生成与所述数据读请求相应的执行计划,存储在共享内存中,并将所述执行计划在所述共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息访问所述共享内存,以获取所述第一数据,并将获取的所述第一数据返回给所述业务进程;
所述若所述数据访问请求的类型为写请求,则由所述DBMS的服务器响应所述数据访问请求,包括:
若所述数据访问请求为请求写入第二数据的数据写请求时,所述DBMS的服务器访问所述共享内存,根据所述数据写请求向所述共享内存中写入所述第二数据,并将写入结果发送给所述DBMS的客户端库,以使所述DBMS的客户端库将所述写入结果返回给所述业务进程。
根据第一方面、第一方面的第一种至第二种可能的实现方式的任意一种,在第三种可能的实现方式中,对接收的所述SQL语句进行解析,以得到所述数据访问请求的类型。
根据第一方面的第三种可能的实现方式,在第四种可能的实现方式中,还包括:
在所述客户端库根据所述位置信息访问所述共享内存之前,将所述共享内存映射至所述业务进程的进程空间。
根据第一方面、第一方面的第一种至第四种可能的实现方式的任意一种,在第五种可能的实现方式中,在所述通过数据库管理系统DBMS的客户端库接收业务进程发起的数据访问请求之前,还包括:
初始化所述共享内存;
将所述DBMS管理的数据库中存储的所有数据加载到所述共享内存中。
根据第一方面、第一方面的第一种至第五种可能的实现方式的任意一种,在第六种可能的实现方式中,还包括:
周期性扫描所述业务进程的连接上下文;
当根据所述业务进程的连接上下文确定所述业务进程异常退出时,释放所述业务进程占用的所述DBMS的资源。
根据第一方面、第一方面的第一种至第六种可能的实现方式的任意一种,在第七种可能的实现方式中,还包括:
对所述业务进程请求访问的数据进行加锁;
当数据访问请求结束后,对所述业务进程请求访问的数据进行解锁。
第二方面,本发明实施例提供一种访问数据库的装置,包括:
接收模块,用于通过数据库管理系统DBMS的客户端库的接口接收业务进程发起的数据访问请求,所述客户端库用于为所述业务进程和所述DBMS的服务器提供数据访问的接口;
识别模块,用于识别所述数据访问请求的类型;
响应模块,用于根据所述识别模块识别出的所述数据访问请求的类型响应所述数据访问请求。
在第二方面的第一种可能的实现方式中,所述数据请求的类型包括:读请求和写请求;所述响应模块,具体用于在所述数据访问请求的类型为写请求时,响应所述数据访问请求;在所述数据访问请求的类型为读请求时,触发所述DBMS的客户端库响应所述数据访问请求。
根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,当所述数据访问请求为请求读取第一数据的数据读请求时,所述响应模块,具体用于生成与所述数据读请求相应的执行计划,存储在共享内存中,并将所述执行计划在所述共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息访问所述共享内存,以获取所述第一数据,并将获取的所述第一数据返回给所述业务进程;
当所述数据访问请求为请求写入第二数据的数据写请求时,所述响应模块,具体用于访问所述共享内存,根据所述数据写请求向所述共享内存中写入所述第二数据,并将写入结果发送给所述DBMS的客户端库,以使所述DBMS的客户端库将所述写入结果返回给所述业务进程。
根据第二方面、第二方面的第一种至第二种可能的实现方式的任意一种,在第三种可能的实现方式中,所述数据访问请求为结构化查询语言SQL语句,所述识别模块,具体用于对接收的所述SQL语句进行解析,以识别所述数据访问请求的类型。
根据第二方面、第二方面的第一种至第三种可能的实现方式的任意一种,在第四种可能的实现方式中,该访问数据库的装置还包括:映射模块,用于在所述客户端库根据所述位置信息访问所述共享内存之前,将所述共享内存映射至所述业务进程的业务进程空间。
根据第二方面、第二方面的第一种至第三种可能的实现方式的任意一种,在第五种可能的实现方式中,共享内存初始化模块,用于初始化共享内存;
数据加载模块,用于将所述DBMS管理的数据库中存储的所有数据加载到所述共享内存中。
根据第二方面、第二方面的第一种至第三种可能的实现方式的任意一种,在第六种可能的实现方式中,监控模块,用于启动业务进程监控任务,以周期性扫描存在的业务进程的连接上下文;
资源释放模块,用于当根据所述业务进程的连接上下文确定所述业务进程异常退出时,释放所述业务进程占用的所述DBMS的资源。
第三方面,本发明实施例提供一种数据库管理系统,包括:户端、客户端库和服务器;其中:所述客户端,用于运行业务进程;所述客户端库,用于为所述客户端上运行的业务进程和所述服务器提供数据访问的接口;所述服务器,用于通过所述客户端库接收所述业务进程发起的数据访问请求,识别接收到的所述数据访问请求的类型,并根据所述数据访问请求的类型响应所述数据访问请求。
在第三方面的第一种可能的实现方式中,所述数据访问请求的类型包括:读请求和写请求;所述服务器具体用于:
当所述数据访问请求的类型为读请求时,触发所述客户端库响应所述数据访问请求;当所述数据访问请求的类型为写请求时,则响应所述数据访问请求。
根据第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述数据库管理系统还包括共享内存,用于存放所述数据库管理系统的数据;
当所述数据访问请求为请求读取第一数据的数据读请求时,所述服务器具体用于,生成与所述数据读请求相应的执行计划,存储在所述共享内存中,并将所述执行计划在所述共享内存中的位置信息发送给所述客户端库;所述客户端库,还用于根据所述位置信息访问所述共享内存,以获取所述第一数据,并将获取的所述第一数据返回给所述业务进程;当所述数据访问请求为请求写入第二数据的数据写请求时,述服务器具体用于,访问所述共享内存,根据所述数据写请求向所述共享内存中写入所述第二数据,并将写入结果发送给所述客户端库;所述客户端库,还用于将所述写入结果返回给所述业务进程。
本发明实施例提供的访问数据库的方法和装置及数据库管理系统,根据访问类型,能够确定由客户端库来响应访问请求或由服务器来响应访问请求,能够保证多进程直连的数据一致性,避免业务进程异常时对DBMS的正常服务产生影响,同时,通过读写分离,可以降低多进程访问数据库管理系统时的开销,提升查询的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一所提供的访问数据库的方法的流程图;
图2为本发明实施例二所提供的数据库管理系统示意图;
图3为本发明实施例二所提供的访问数据库的方法的流程图;
图4为本发明实施例三所提供的访问数据库的方法的流程图;
图5为本发明实施例四所提供的访问数据库的方法的流程图;
图6为本发明实施例五所提供的访问数据库的方法的流程图;
图7为本发明实施例六所提供的访问数据库的装置600的结构示意图;
图8为本发明实施例七所提供的访问数据库的装置700的结构示意图;
图9为本发明实施例八所提供的访问数据库的装置800的结构示意图;
图10为本发明实施例所提供的数据库管理系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
图1为本发明实施例一所提供的访问数据库的方法的流程图。本实施例的方法适用于包括客户端库和服务器的数据库管理系统(DatabaseManagementSystem,DBMS),如图2所示,DBMS包括服务器(DBMSServer)、客户端库(DBclientlib)和共享内存(sharememory);其中:DBMSServer是为应用程序提供数据读写服务的实体,DBMS的客户端库(DBclientlib)是提供数据访问的接口和只读查询的服务实体,共享内存用于存放DBMS的所有配置数据(Configdata)、控制数据(Controldata)、数据表(Table)及索引数据(indexdata),以及其它共享数据。在本发明实施例提供的访问数据库的方法中,业务进程可以通过DBclientlib提供的接口访问DBMS中的数据,对于数据查询请求(read),因为DBclientlib包含查询访问的逻辑处理功能,故查询时DBclientlib可以直接访问共享内存,获取所需的数据;而对于数据写请求(Write),DBclientlib通过通讯通道,将请求发送给DBMSserver,由DBMSserver处理请求,访问或修改共享内存的数据,并将结果通过通讯通道返回给DBclientlib,由DBclientlib最终将结果返回给业务进程。如图2所示,业务进程1对于读和写共用一个连接上下文,我们称之为一个连接,每一个连接都由DBMSserver的一个会话线程(Sessionthread)来管理。对于一个业务进程,允许同时有多个连接,每个连接都支持读与写。
具体地,本发明实施例提供的访问数据库的方法包括如下步骤:
步骤110、通过DBMS的客户端库的接口接收业务进程发起的数据访问请求,其中,客户端库用于为业务进程和DBMS的服务器提供数据访问的接口,业务进程运行在DBMS的客户端上。
在步骤110中,数据访问请求是DBMS的客户端上运行的业务进程发起的,客户端库在DBMS的客户端和DBMS的服务器之间起了桥梁的作用,通过所述客户端库的接口,DBMS的服务器可以接收业务进程发起的数据访问请求。
步骤120、识别所述数据访问请求的类型,并根据所述数据访问请求的类型响应所述数据访问请求。
具体而言,数据访问请求的类型一般可分为读请求和写请求,对于无需更改数据的读请求,可以直接由配置在应用程序所在主机的客户端库来响应数据访问请求,而对于需要更改数据的写请求,则将数据访问请求经由客户端库发送至DBMS的服务器,由配置在数据库所在主机的服务器响应该数据访问请求,以对DBMS所管理的数据库内的数据进行操作。
在一个实施例中,如果数据访问请求为结构化查询语言(StructuredQueryLanguage,简称SQL)语句,则可以采用两种方式处理该数据访问请求:
A.DBMS的客户端直接对该SQL语句进行解析,发现该SQL语句为只读查询语句后,进行进一步的校验和优化,并生成相关的执行计划;
B.通过通信通道将该SQL语句发送给DBMS服务器,由服务器进行解析、校验和优化,并生成相关的执行计划,并将执行计划放在共享内存中,如果发现该SQL语句为只读查询,则将执行计划在共享内存中的位置返回给客户端,并告诉客户端后续执行可以直接通过本地读逻辑处理进行处理。
本发明实施例的方法步骤可以由DBMS服务器来执行,也可以由独立的第三方实体来执行,本发明实施例根据访问类型,能够根据数据访问请求的类型确定由客户端库来响应数据访问请求或由服务器来响应数据访问请求,避免了全部由服务器来响应数据访问请求的瓶颈问题,而且实现简单,成本低。
实施例二
图3为本发明实施例二所提供的访问数据库的方法的流程图。在上述实施例技术方案的基础上,进一步进行了优化。参照图3,本发明实施例根据所述数据访问请求的类型确定由DBMS的客户端库响应所述数据访问请求或由DBMS的服务器响应所述数据访问请求的操作具体包括如下步骤:
步骤121、若所述数据访问请求为请求读取第一数据的数据读请求,则生成与该数据读请求相应的执行计划,存储在共享内存中,并将该执行计划在所述共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息直接访问所述共享内存,以获取所述业务进程请求读取的第一数据,并将获取的第一数据返回给所述业务进程。
上述步骤中,数据访问请求的类型可以根据在共享内存中生成的与数据访问请求相应的执行计划对接收的数据访问请求进行解析,以识别所述数据访问请求的类型。数据访问请求的类型包括:读请求和写请求。对于DBMS的服务器通过DBMS的客户端库的接口接收到业务进程发送的数据访问请求为读请求时,DBMS的服务器将在共享内存中生成的与数据读请求相应的执行计划在共享内存中的位置信息发送给DBMS的客户端库,DBMS的客户端库可以根据执行计划在共享内存中的位置信息获取到与读请求相应的执行计划,以便客户端库能够根据获取的执行计划,调用与读请求相关的处理逻辑,直接访问共享内存获取业务进程请求读的数据,并将获取的数据发送给业务进程。
步骤122、若所述数据访问请求为请求写入第二数据的数据写请求,则直接访问所述共享内存,根据所述数据访问请求向所述共享内存中写入数据,并将写入结果发送给DBMS的客户端库,以使所述DBMS的客户端库将所述写入结果返回给所述业务进程。
在步骤122中,对于DBMS的服务器通过DBMS的客户端库的接口接收到业务进程发送的数据访问请求为请求写入第二数据的数据写请求时,DBMS的客户端库将该写请求发送给DBMS的服务器,DBMS的服务器根据接收的写请求向共享内存中写入第二数据,并将写入结果发送给DBMS的客户端库,DBMS的客户端库将写入结果返回给业务进程。
进一步的,如果所述数据访问请求的格式为结构化查询语言(StructuredQueryLanguage,简称SQL),则在根据所述数据访问请求的类型确定由DBMS的客户端库响应所述数据访问请求或由DBMS的服务器响应所述数据访问请求之前,还包括:通过所述DBMS的客户端库的接口或所述DBMS的服务器对所述结构化查询语言格式的数据访问请求进行预处理,以在所述共享内存中生成与所述数据访问请求相应的执行计划。并且,在根据所述数据访问请求的类型,在共享内存中响应所述数据访问请求之前,还可以对访问数据进行加锁,当数据访问请求结束后,对所述访问数据进行解锁。
本发明实施例通过在由DBMS的客户端库响应所述数据访问请求或DBMS的服务器库响应所述数据访问请求过程中,对所访问数据进行加锁和解锁操作,保证了在DBMS的客户端库或DBMS的服务器响应所述数据访问时共享内存数据的一致性。同时可以保证在业务进程发生异常时,不影响DBMS的服务器的正常使用,提高了DBMS的可靠性。加解锁的操作具体可以:锁也放在共享内存中,通过共享内存的偏移量获取锁的实际地址,在访问前将锁偏移量和加锁的类型压到连接的上下文中,执行实际的加锁操作。解锁与加锁一样,需要通过偏移量计算出锁的实际地址,实际的解锁过程,将锁偏移量从连接的上下文中出栈。
实施例三
图4为本发明实施例三所提供的访问数据库的方法的流程图,本发明实施例以上述实施例为基础,进一步进行了优化,参照图4,在本实施例中,若所述数据访问请求的类型为读请求,则在共享内存中生成相应的执行计划,并将所述执行计划在共享内存中的位置返回给客户端库,通过所述客户端库访问共享内存,以读取数据具体包括如下步骤:
步骤310、若所述数据访问请求的类型为读请求,则根据所述数据访问请求检查所述共享内存是否映射至所述业务进程的业务进程空间,若是,执行步骤320,若否,执行步骤330。
上述步骤中,可以在DBMS的客户端初始化、业务进程与DBMS的服务器建立连接时或DBMS的服务器增加共享内存块时,将共享内存映射至业务进程空间。在进行读请求之前,可以首先检查是否进行了此映射。
步骤320、将在所述共享内存中生成与所述读请求相应的执行计划在共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息直接访问共享内存,以获取所述业务进程请求读的数据。
步骤330、将所述共享内存映射至所述业务进程的业务进程空间,将在共享内存中生成的与所述读请求相应的执行计划在共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息直接访问所述共享内存,以获取所述业务进程请求读的数据。
步骤330的具体执行操作为:当访问的数据的逻辑地址所对应的共享内存没有被映射至业务进程空间时,根据逻辑地址计算出要访问的共享内存空间,并获取该共享内存空间的相关信息,如共享内存空间的关键值和大小等,将此块共享内存的空间映射至业务进程空间,再通过访问共享内存获取数据。
本发明实施例通过在客户端库访问共享内存,以读取数据时,判断共享内存是否映射至业务进程空间,以满足在DBMS的客户端初始化、业务进程与DBMS的服务器建立连接时或DBMS的服务器在增加新的共享内存块(如增大数据库的大小,增加模块的管理数据的大小)时,将共享内存映射至业务进程空间,保证客户端库仍然可以通过访问共享内存获取数据。
实施例四
图5为本发明实施例四所提供的访问数据库的方法的流程图,参照图5,本实施例以上述实施例为基础,具体描述了DBMS服务器的初始化过程。本实施例的方法包括如下步骤:
步骤410、启动DBMS的服务器,初始化共享内存。
在启动DBMS的服务器时,要对共享内存进行初始化,用于存放各管理功能模块的管理数据和数据库中存放的实际数据。
步骤420、将数据库中所有存储的数据加载到共享内存中。
加载数据库数据到共享内存中,这一步骤对于内存数据库是特有的,将所有的数据库数据加载至共享内存中,而磁盘数据库不需要执行这一步骤,对数据的读写请求可以直接对磁盘数据库来执行。
在上述方案基础上,本实施例还优选包括如下监控异常的操作:
步骤430、启动业务进程监控任务,所述业务进程监控任务周期性扫描存在的业务进程的连接上下文。
步骤430的具体执行操作为:启动业务进程监控任务,周期性扫描存在的业务进程的连接上下文;当根据连接上下文包含的连接所在业务进程的ID确定业务进程不存在时,释放该业务进程占用的DBMS的资源。
进一步的,具体可以为根据连接上下文包含的连接所在进程的ID,判断该进程是否已不存在;若是已不存在,查看连接上下文的锁栈中是否存在未释放的共享锁;若存在未释放的共享锁,清理锁栈上保存的所有未释放的共享锁;清理连接上下文的信息;若不存在未释放的共享锁,则直接清理连接上下文的信息。
本发明实施例通过在DBMS的服务器启动时,把各管理功能模块的管理数据和数据库中实际存放的数据加载至共享内存,并启动业务进程监控任务,以监控业务进程在修改共享内存数据时异常退出的情况,并在业务进程发生异常时,释放异常进程占用的DBMS的资源,以提供给其他新的业务进程使用。
实施例五
图6为本发明实施例五所提供的访问数据库的方法的流程图,参照图6,以上述各实施例为基础,本实施例的方法还包括如下步骤:
步骤510、为DBMS的各管理功能模块分配共享内存,并初始化各管理功能模块的管理数据到共享内存中。
各管理功能模块包括锁模块、日志管理模块等存储内部数据的模块。
步骤520、在监测到业务进程初始化产生的触发条件时,或在接收到业务进程发起的数据访问请求时,初始化DBMS的客户端库;
步骤530、将各管理功能模块的共享内存映射至业务进程空间,并将数据库数据的共享内存映射至业务进程空间。
步骤530的具体执行操作为:是否将共享内存映射至业务进程空间;若是,则不需要将共享内存再映射至业务进程空间,以避免重复映射;若否,将各管理功能模块的共享内存映射至业务进程空间,并将数据库数据的共享内存映射至业务进程空间。
本发明实施例通过在初始化DBMS的客户端库时,首先判断共享内存是否映射至业务进程空间,若已映射,则不必进行重复映射,若未映射,则将各管理功能模块的共享内存和数据库数据的共享内存映射至业务进程空间,为后续业务进程通过DBMS的客户端库直接访问数据库数据提供了管理和控制。
实施例六
图7为本发明实施例六所提供的访问数据库的装置600的结构示意图,本实施例的装置适用于包括客户端库和服务器的DBMS,以实现对数据库数据进行读写请求操作的情况。参照图7,本发明实施例的访问数据库的装置600包括如下模块:接收模块610、识别模块620和响应模块630。
其中,接收模块610用于通过数据库管理系统DBMS的客户端库的接口接收业务进程发起的数据访问请求,所述客户端库用于为所述业务进程和所述DBMS的服务器提供数据访问的接口,所述业务进程运行在所述DBMS的客户端上;识别模块620用于识别所述数据访问请求的类型;响应模块630,用于根据识别模块620识别出的所述数据访问请求的类型响应所述数据访问请求。
其中,具体而言,数据访问请求的类型一般可分为读请求和写请求,识别模块620,具体用于对接收的所述数据访问请求进行解析,以识别所述数据访问请求的类型。响应模块630,具体用于在所述数据访问请求的类型为写请求时,响应所述数据访问请求;在所述数据访问请求的类型为读请求时,触发所述DBMS的客户端库响应所述数据访问请求。
在一个具体的实施例中,当所述数据访问请求为请求读取第一数据的数据读请求时,响应模块630具体用于生成与所述数据读请求相应的执行计划,存储在共享内存中,并将所述执行计划在所述共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息访问所述共享内存,以获取所述第一数据,并将获取的所述第一数据返回给所述业务进程;
当所述数据访问请求为请求写入第二数据的数据写请求时,响应模块630具体用于访问所述共享内存,根据所述数据写请求向所述共享内存中写入所述第二数据,并将写入结果发送给所述DBMS的客户端库,以使所述DBMS的客户端库将所述写入结果返回给所述业务进程。
进一步地,在一个实施例中,访问数据库的装置600还包括:映射模块640,用于在所述客户端库根据所述位置信息访问所述共享内存之前,将所述共享内存映射至所述业务进程的业务进程空间。具体地,若所述数据访问请求的类型为读请求,则映射模块640根据所述数据访问请求检查共享内存是否映射至所述业务进程的业务进程空间;若是,则响应模块630将在共享内存中生成的与所述读请求相应的执行计划在共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息直接访问所述共享内存,以获取所述业务进程请求读的数据;若否,则映射模块640将所述共享内存映射至所述业务进程的业务进程空间,然后响应模块630将在共享内存中生成的与所述读请求相应的执行计划在共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息直接访问所述共享内存,以获取所述业务进程请求读的数据。
进一步的,如果所述读请求或写请求包含结构化查询语言,即如果所述数据访问请求的格式为结构化查询语言,则在根据所述数据访问请求的类型确定由DBMS的客户端库响应所述数据访问请求或由DBMS的服务器响应所述数据访问请求之前,还包括:通过所述DBMS的客户端库的接口或所述DBMS的服务器对所述结构化查询语言格式的数据访问请求进行预处理,以在所述共享内存中生成与所述数据访问请求相应的执行计划。并且根据所述数据访问请求的类型,在共享内存中执行相应的数据访问请求之前,对访问数据进行加锁,当数据访问请求结束后,对所述访问数据进行解锁。另外需要说明的是,本发明实施例的访问数据库的装置,是与前述方法实施例对应的,该访问数据库的装置中各个模块的具体执行过程可以参照前述方法实施例的描述,此处不再赘述。
本发明实施例提供的访问数据库的装置,通过根据数据访问请求类型由DBMS的客户端库响应所述数据访问请求或DBMS的服务器响应所述数据访问请求。避免了全部由服务器来处理访问请求的瓶颈问题,能够提高访问效率,成本低。为了保证多个业务进程并发执行读请求时的正确性,在DBMS的客户端库或DBMS的服务器访问公共的共享数据的过程中,执行加锁和解锁操作,实现了业务进程发生异常时,释放异常进程占用的DBMS的资源,以提供给其他新的业务进程使用,同时保证了DBMS服务器的正常服务,提高了DBMS的可靠性。
实施例七
图8为本发明实施例七所提供的访问数据库的装置700的结构示意图,本发明实施例访问数据库的装置包括如下模块:共享内存初始化模块710、数据加载模块720、监控模块730和资源释放模块740。
其中,共享内存初始化模块710用于启动DBMS的服务器,初始化共享内存;数据加载模块720用于将所述DBMS管理的数据库中存储的所有数据加载到所述共享内存中;监控模块730用于启动业务进程监控任务,以周期性扫描存在的业务进程的连接上下文;资源释放模块740用于当用于当根据所述业务进程的连接上下文确定所述业务进程异常退出时,释放所述业务进程占用的所述DBMS的资源。其中,资源释放模块740具体用于:根据连接上下文包含的连接所在进程的ID,判断该进程是否已不存在;若否,则遍历当前数据中所有的连接;若是,具体执行操作为:查看连接上下文的锁栈中是否存在未释放的共享锁;若存在未释放的共享锁,清理锁栈上保存的所有未释放的共享锁;清理连接上下文的信息;若不存在未释放的共享锁,则清理连接上下文的信息。
本发明实施例提供的访问数据库的装置通过在DBMS的服务器启动时,把数据库中实际存放的数据加载至共享内存,并启动业务进程监控任务,以监控业务进程在修改共享内存数据时异常退出的情况,并在业务进程发生异常时,释放异常进程占用的DBMS的资源,以提供给其他新的业务进程使用。
实施例八
图9为本发明实施例八所提供的访问数据库的装置800的结构示意图,本发明实施例访问数据库的装置包括如下模块:管理数据初始化模块810客户端库初始化模块820和数据库数据映射模块830。
其中,管理数据初始化模块810用于为DBMS的各管理功能模块分配共享内存,并初始化各管理功能模块的管理数据到共享内存中;客户端库初始化模块820用于在监测到业务进程初始化产生的触发条件时,或在接收到业务进程发起的数据访问请求时,初始化DBMS的客户端库;数据库数据映射模块830用于将各管理功能模块的共享内存映射至业务进程空间,并将数据库数据的共享内存映射至业务进程空间。数据库数据映射模块830判断是否将共享内存映射至业务进程空间;若是,则不需要将共享内存再映射至业务进程空间,以避免重复映射;若否,将各管理功能模块的共享内存映射至业务进程空间,并将数据库数据的共享内存映射至业务进程空间。
本发明实施例提供的访问数据库的装置通过在初始化DBMS的客户端库时,判断共享内存是否映射至业务进程空间,若已映射,则不必进行重复映射,若未映射,则将各管理功能模块的共享内存和数据库数据的共享内存映射至业务进程空间,为后续业务进程通过DBMS的客户端库直接访问数据库数据提供了管理和控制。
本发明实施例还提供一种数据库管理系统,如图10所示,该数据库管理系统包括:客户端1001、服务器1101和客户端库1201;其中:
客户端1001,用于运行业务进程(如图10中的业务进程1);
客户端库1201,用于为客户端1001上运行的业务进程和服务器1101提供数据访问的接口;
服务器1101,用于通过客户端库1101接收业务进程发起的数据访问请求,识别接收到的数据访问请求的类型,并根据该数据访问请求的类型响应该数据访问请求。
具体地,数据访问请求的类型包括:读请求和写请求;服务器1101具体用于:当所述数据访问请求的类型为读请求时,触发客户端库1201响应所述数据访问请求;当所述数据访问请求的类型为写请求时,则服务器1101自身响应所述数据访问请求。
所述数据库管理系统还包括共享内存1301,用于存放所述数据库管理系统的数据;
当所述数据访问请求为请求读取第一数据的数据读请求时,所务器1101具体用于,生成与所述数据读请求相应的执行计划,存储在共享内存1301中,并将所述执行计划在共享内存1301中的位置信息发送给客户端库1201;所客户端库1201,还用于根据所述位置信息访问共享内存1301,以获取所述第一数据,并将获取的所述第一数据返回给业务进程;
当所述数据访问请求为请求写入第二数据的数据写请求时,服务器1101具体用于,访问共享内存1301,根据所述数据写请求向共享内存1301中写入所述第二数据,并将写入结果发送给客户端库1201;客户端库1201,还用于将所述写入结果返回给所述业务进程。
需要说明的是,上述数据库管理系统中户端1001、服务器1101和客户端库1201之间的交互关系,以及各个实体内部的数据处理过程,可以参见前述方法和装置实施例,此处不再赘述。
本发明实施例提供的数据库管理系统,根据访问类型,能够确定由客户端库来响应访问请求或由服务器来响应访问请求,能够保证多进程直连的数据一致性,避免业务进程异常时对DBMS的正常服务产生影响,同时,通过读写分离,可以降低多进程访问数据库管理系统时的开销,提升查询的性能。
本发明各实施例的访问数据库的装置可用于执行本发明任意实施例所提供的访问数据库的方法,具备相应的功能模块和有益效果。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (12)
1.一种访问数据库的方法,其特征在于,包括:
通过数据库管理系统DBMS的客户端库接收业务进程发起的数据访问请求,所述客户端库用于为所述业务进程和所述DBMS的服务器提供数据访问的接口;
识别所述数据访问请求的类型;
若所述数据访问请求为请求读取第一数据的数据读请求时,生成与所述数据读请求相应的执行计划,存储在共享内存中,并将所述执行计划在所述共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息访问所述共享内存,以获取所述第一数据,并将获取的所述第一数据返回给所述业务进程;
若所述数据访问请求为请求写入第二数据的数据写请求时,所述DBMS的服务器访问所述共享内存,根据所述数据写请求向所述共享内存中写入所述第二数据,并将写入结果发送给所述DBMS的客户端库,以使所述DBMS的客户端库将所述写入结果返回给所述业务进程。
2.根据权利要求1所述的访问数据库的方法,其特征在于,所述数据访问请求为结构化查询语言SQL语句,所述识别接收的所述数据访问请求的类型,包括:
对接收的所述SQL语句进行解析,以得到所述数据访问请求的类型。
3.根据权利要求2所述的访问数据库的方法,其特征在于,还包括:
在所述客户端库根据所述位置信息访问所述共享内存之前,将所述共享内存映射至所述业务进程的进程空间。
4.根据权利要求1-3任一项所述的访问数据库的方法,其特征在于,在所述通过数据库管理系统DBMS的客户端库接收业务进程发起的数据访问请求之前,还包括:
初始化所述共享内存;
将所述DBMS管理的数据库中存储的所有数据加载到所述共享内存中。
5.根据权利要求1-3任一项所述的访问数据库的方法,其特征在于,还包括:
周期性扫描所述业务进程的连接上下文;
当根据所述业务进程的连接上下文确定所述业务进程异常退出时,释放所述业务进程占用的所述DBMS的资源。
6.根据权利要求1-3任一项所述的访问数据库的方法,其特征在于,还包括:
对所述业务进程请求访问的数据进行加锁;
当数据访问请求结束后,对所述业务进程请求访问的数据进行解锁。
7.一种访问数据库的装置,其特征在于,包括:接收模块、识别模块和响应模块;其中,
接收模块,用于通过数据库管理系统DBMS的客户端库的接口接收业务进程发起的数据访问请求,所述客户端库用于为所述业务进程和所述DBMS的服务器提供数据访问的接口;
识别模块,用于识别所述数据访问请求的类型;
当所述数据访问请求为请求读取第一数据的数据读请求时,所述响应模块,用于生成与所述数据读请求相应的执行计划,存储在共享内存中,并将所述执行计划在所述共享内存中的位置信息发送给所述客户端库,以使所述客户端库根据所述位置信息访问所述共享内存,以获取所述第一数据,并将获取的所述第一数据返回给所述业务进程;
当所述数据访问请求为请求写入第二数据的数据写请求时,所述响应模块,用于访问所述共享内存,根据所述数据写请求向所述共享内存中写入所述第二数据,并将写入结果发送给所述DBMS的客户端库,以使所述DBMS的客户端库将所述写入结果返回给所述业务进程。
8.根据权利要求7所述的访问数据库的装置,其特征在于,所述数据访问请求为结构化查询语言SQL语句,所述识别模块,具体用于对接收的所述SQL语句进行解析,以识别所述数据访问请求的类型。
9.根据权利要求7或8所述的访问数据库的装置,其特征在于,还包括:映射模块,用于在所述客户端库根据所述位置信息访问所述共享内存之前,将所述共享内存映射至所述业务进程的业务进程空间。
10.根据权利要求7或8所述的访问数据库的装置,其特征在于,还包括:
共享内存初始化模块,用于初始化共享内存;
数据加载模块,用于将所述DBMS管理的数据库中存储的所有数据加载到所述共享内存中。
11.根据权利要求7或8所述的访问数据库的装置,其特征在于,还包括:
监控模块,用于启动业务进程监控任务,以周期性扫描存在的业务进程的连接上下文;
资源释放模块,用于当根据所述业务进程的连接上下文确定所述业务进程异常退出时,释放所述业务进程占用的所述DBMS的资源。
12.一种数据库管理系统,其特征在于,包括:客户端、客户端库和服务器;其中:
所述客户端,用于运行业务进程;
所述客户端库,用于为所述客户端上运行的业务进程和所述服务器提供数据访问的接口;
所述服务器,用于通过所述客户端库接收所述业务进程发起的数据访问请求,识别接收到的所述数据访问请求的类型;
当所述数据访问请求为请求读取第一数据的数据读请求时,所述服务器还用于,生成与所述数据读请求相应的执行计划,存储在所述共享内存中,并将所述执行计划在所述共享内存中的位置信息发送给所述客户端库;所述客户端库,还用于根据所述位置信息访问所述共享内存,以获取所述第一数据,并将获取的所述第一数据返回给所述业务进程;
当所述数据访问请求为请求写入第二数据的数据写请求时,所述服务器还用于,访问所述共享内存,根据所述数据写请求向所述共享内存中写入所述第二数据,并将写入结果发送给所述客户端库;所述客户端库,还用于将所述写入结果返回给所述业务进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310140523.1A CN103226598B (zh) | 2013-04-22 | 2013-04-22 | 访问数据库的方法和装置以及数据库管理系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310140523.1A CN103226598B (zh) | 2013-04-22 | 2013-04-22 | 访问数据库的方法和装置以及数据库管理系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103226598A CN103226598A (zh) | 2013-07-31 |
CN103226598B true CN103226598B (zh) | 2016-06-22 |
Family
ID=48837043
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310140523.1A Active CN103226598B (zh) | 2013-04-22 | 2013-04-22 | 访问数据库的方法和装置以及数据库管理系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103226598B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473272B (zh) * | 2013-08-20 | 2017-06-16 | 小米科技有限责任公司 | 数据处理方法、装置及系统 |
CN103488740B (zh) * | 2013-09-18 | 2017-12-01 | 上海斐讯数据通信技术有限公司 | 一种用于实现onu设备中数据共享的系统和方法 |
CN104504145A (zh) * | 2015-01-05 | 2015-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种实现数据库读写分离的方法和设备 |
CN107301190A (zh) * | 2016-04-15 | 2017-10-27 | 中国移动通信集团湖北有限公司 | 一种控制数据访问的方法及装置 |
CN109033359A (zh) * | 2018-07-26 | 2018-12-18 | 北京天地和兴科技有限公司 | 一种多进程安全访问sqlite的方法 |
CN109033420B (zh) * | 2018-08-08 | 2020-11-03 | 北京奇艺世纪科技有限公司 | 一种数据处理方法和装置 |
CN108737890A (zh) * | 2018-08-21 | 2018-11-02 | 深圳Tcl数字技术有限公司 | 多进程频道数据切换方法、装置、电视机及存储介质 |
CN109284174A (zh) * | 2018-09-07 | 2019-01-29 | 郑州云海信息技术有限公司 | 一种多业务进程性能统计方法、装置和系统 |
CN109684351B (zh) * | 2018-12-18 | 2020-11-06 | 上海达梦数据库有限公司 | 一种执行计划查看方法、装置、服务器及存储介质 |
CN110287252A (zh) * | 2019-06-27 | 2019-09-27 | 南方电网科学研究院有限责任公司 | 一种数据安全防护系统 |
CN112069198B (zh) * | 2020-07-16 | 2021-09-10 | 中科驭数(北京)科技有限公司 | Sql解析优化方法和装置 |
CN113791894A (zh) * | 2021-08-16 | 2021-12-14 | 新奇点智能科技集团有限公司 | 一种道路数据处理系统 |
CN115328408B (zh) * | 2022-10-14 | 2023-01-03 | 联想凌拓科技有限公司 | 用于数据处理的方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859232A (zh) * | 2009-04-09 | 2010-10-13 | 段起阳 | 一种可变长度数据存储接口 |
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8229945B2 (en) * | 2008-03-20 | 2012-07-24 | Schooner Information Technology, Inc. | Scalable database management software on a cluster of nodes using a shared-distributed flash memory |
US8832028B2 (en) * | 2011-08-25 | 2014-09-09 | Oracle International Corporation | Database cloning |
-
2013
- 2013-04-22 CN CN201310140523.1A patent/CN103226598B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859232A (zh) * | 2009-04-09 | 2010-10-13 | 段起阳 | 一种可变长度数据存储接口 |
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103226598A (zh) | 2013-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103226598B (zh) | 访问数据库的方法和装置以及数据库管理系统 | |
US20190042407A1 (en) | Resiliency groups | |
US10248174B2 (en) | Persistent reservations for virtual disk using multiple targets | |
CN110569149B (zh) | 基于故障探测触发Oracle容灾自动应急切换的方法 | |
CN105159818A (zh) | 内存数据管理中日志恢复方法及其仿真系统 | |
KR100974156B1 (ko) | 파일 서버 재초기화 장치, 방법 및 컴퓨터 판독 가능한 기록 매체 | |
US20120239634A1 (en) | Method and apparatus for accessing database and database application system | |
CN103198122B (zh) | 重启内存数据库的方法和装置 | |
CN102402471A (zh) | 基于存储阵列快照功能的数据实时备份方法及系统 | |
CN102024044A (zh) | 分布式文件系统 | |
CN102945278A (zh) | 一种数据库记录重做日志的方法和装置 | |
CN110807064A (zh) | Rac分布式数据库集群系统中的数据恢复装置 | |
US11782625B2 (en) | Heterogeneity supportive resiliency groups | |
CN108108476A (zh) | 高可靠分布式日志系统的工作方法 | |
CN107273231A (zh) | 分布式存储系统硬盘挂住故障检测、处理方法及装置 | |
EP4213038A1 (en) | Data processing method and apparatus based on distributed storage, device, and medium | |
US20190179564A1 (en) | Safe destructive actions on drives | |
CN106202459A (zh) | 虚拟化环境下的关系型数据库存储性能优化方法及系统 | |
US20210124510A1 (en) | Using telemetry data from different storage systems to predict response time | |
US11513974B2 (en) | Using nonce to control erasure of data blocks of a multi-controller storage system | |
US20230325242A1 (en) | Fast shutdown of large scale-up processes | |
Ilin et al. | Performance analysis of software with a variant NoSQL data schemes | |
CN111949396A (zh) | 一种网络设备监测方法及其系统、计算机可读存储介质 | |
CN108345515A (zh) | 存储方法和装置及其存储系统 | |
CN110019043B (zh) | 一种区块链数据存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |