CN1987864A - 访问数据库的方法和系统 - Google Patents

访问数据库的方法和系统 Download PDF

Info

Publication number
CN1987864A
CN1987864A CN 200610156429 CN200610156429A CN1987864A CN 1987864 A CN1987864 A CN 1987864A CN 200610156429 CN200610156429 CN 200610156429 CN 200610156429 A CN200610156429 A CN 200610156429A CN 1987864 A CN1987864 A CN 1987864A
Authority
CN
China
Prior art keywords
database
database access
interface
connection
communication interface
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
Application number
CN 200610156429
Other languages
English (en)
Other versions
CN100458790C (zh
Inventor
杜永健
王臻
褚宇峰
林志农
周子坚
郑炜杰
沙云
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Construction Bank Corp
Original Assignee
China Construction Bank Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Construction Bank Corp filed Critical China Construction Bank Corp
Priority to CNB2006101564295A priority Critical patent/CN100458790C/zh
Publication of CN1987864A publication Critical patent/CN1987864A/zh
Application granted granted Critical
Publication of CN100458790C publication Critical patent/CN100458790C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种访问数据库的方法,应用于银行的交易处理过程中,数据库与数据库访问子系统预先创建并维持一组长连接,当前端应用访问数据库时,所述方法包括步骤:前端应用发出数据库访问命令到数据库访问子系统中的数据库访问接口;数据库访问接口根据收到的数据库访问命令,建立与数据库访问子系统中的数据库访问控制器间的短连接,通过该短连接发送数据库访问命令;数据库访问控制器选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库;通过该长连接和所述建立的短连接返回数据库访问结果到前端应用。本发明还公开了一种访问数据库的系统。应用本发明,可以增加访问数据库的前端应用的数量,并充分利用了保持的长连接。

Description

访问数据库的方法和系统
技术领域
本发明涉及数据库技术,特别涉及一种访问数据库的方法和系统。
背景技术
银行的前端应用是银行处理客户交易时与客户的交互界面。通过前端应用完成与客户交互的过程中,需要获得此次交易的相关信息,并将此次交易的一些内容进行记录,而这些相关信息和内容存储于银行的数据库中,因此,在该过程中,前端应用要对银行的数据库进行访问,以实现对数据库信息的写入和读取。
以往的银行系统中,前端应用和数据库及其它服务器部署在各个网点,这种方式对设备的投入巨大,维护很不方便,而且当维护时,对银行维护人员的技术能力要求较高,人力投入也较大,这样,与银行的集约化经营方向相背离。为适应集约化经营的需要,提出了对银行的相关业务系统进行集中化管理。目前银行系统采用的方式是将一级分行所辖网点的前端应用对应的数据库集中上收至该一级分行,由该一级分行统一管理和维护,而网点只有执行前端应用的终端,服务器和网络设备。
图1示出了该方式的网络结构图。如图所示,该方式下,一个服务器上有一套前端应用,前端应用完成客户交易处理过程。当访问数据库时,前端应用建立长连接到一级分行的数据库,进行对数据库中相关信息的写入和读取,从而完成此次交易,前端应用退出时释放该长连接。
但是,一级分行所辖有很多网点,这些网点的前端应用共用一个数据库,而数据库支持的长连接数是有限的。这样,每个前端应用访问数据库时,都要建立一个单独的长连接,导致一级分行系统同时能带的网点个数是有限的,那么当一级分行系统带的网点个数达到上限时,不能再支持新的前端应用发来的数据库访问请求,必须在数据库可以建立长连接时,即之前有前端应用退出而释放长连接时,新的前端应用才能利用该长连接接入数据库,则,系统产生了性能瓶颈,对大型银行来说,不能满足高效处理客户交易的需求。另外,每次建立和释放长连接都要消耗很大的系统资源,则很多前端应用的不断接入和退出也降低了系统的资源可利用率。
发明内容
本发明的目的是提供一种访问数据库的方法和系统,以克服现有技术中由于一级分行系统同时能带的网点个数有限而导致的系统性能瓶颈的缺点。
为解决上述技术问题,本发明提供一种访问数据库的方法和系统是这样实现的:
一种访问数据库的方法,数据库与数据库访问子系统预先创建并维持一组长连接,当前端应用访问数据库时,包括:
前端应用发出数据库访问命令到数据库访问子系统中的数据库访问接口;
数据库访问接口根据收到的数据库访问命令,建立与数据库访问子系统中的数据库访问控制器间的短连接,通过该短连接发送数据库访问命令;
数据库访问控制器选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库;通过该长连接和所述建立的短连接返回数据库访问结果到前端应用。
所述数据库与数据库访问子系统预先创建并维持一组长连接由以下方式实现:
数据库与数据库访问子系统间根据配置文件中设定的经验值预先创建并维持一组长连接。
所述前端应用发出数据库访问命令到数据库访问接口由以下方式实现:
前端应用发出数据库访问命令到数据库访问子系统中的数据库访问接口;
由数据库访问接口中的应用接口收到所述访问命令,根据该访问命令生成请求报文,并将该报文发送到第一通讯接口,该第一通讯接口位于数据库访问接口中。
所述数据库访问接口建立与数据库访问控制器间的短连接由以下方式实现:
所述第一通讯接口根据收到的请求报文建立与第二通讯接口的短连接,并通过该短连接发送请求报文到第二通讯接口,所述第二通讯接口位于数据库访问控制器中。
所述数据库访问控制器选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库由以下方式实现:
数据库访问控制器中的第二通讯接口根据从短连接收到的请求报文,发送数据库访问请求到数据库访问控制器中的数据库服务接口;
数据库服务接口根据收到的访问请求,选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库。
所述前端应用通过长连接和短连接完成数据库访问后还包括:
释放所述短连接,并归还所述占用的长连接。
所述短连接为UNIX域套接字。
本方法还包括:
当前端系统初始化时,将对应的静态表装入数据库侧共享内存中;前端应用将读取静态表的操作改为读取共享内存;
前端应用通过操作共享内存完成对静态表的访问。
共享内存区建立数据存放区、索引区和索引冲突区,其中索引区和索引冲突区都包括哈希值、数据指针和Next指针,静态表中的一列值为关键值,所述将数据库中的静态表装入数据库侧共享内存中由以下方式实现:
计算静态表需要的共享内存容量,并申请该容量的共享内存作为存储该静态表的数据存放区;
将所述静态表载入所述数据存放区;
根据静态表中记录的关键值,使用哈希算法计算对应的哈希值,当所述哈希值与索引区已有的哈希值不冲突时,将所述哈希值和该记录所在内存的地址载入对应索引区和数据指针中;当所述哈希值与索引区已有的哈希值冲突时,将所述哈希值和该记录所在内存的地址载入对应索引冲突区和数据指针中,并将所在索引冲突区的地址填入所述索引区的Next指针中。
所述当所述哈希值与索引区已有的哈希值冲突时,将所述哈希值和该记录所在内存的地址载入对应索引冲突区和数据指针中,而所述哈希值与索引冲突区发生再次发生冲突时,将该记录的内存地址载入索引冲突区的数据指针中。
所述前端应用通过操作共享内存完成对数据库的静态表的访问由以下方式实现:
由查询值利用哈希算法得到哈希值,在索引区中得到该哈希值对应数据指针中的地址,如果该查询值与所述地址中的记录的关键值相同,则读取记录;如果该查询值与所述地址中的记录的关键值不相同,则到索引区Next指针指向的地址中读取数据指针,从该数据指针指向的地址中读取记录。
一种访问数据库的系统,该系统包括前端应用、数据库访问子系统和数据库,其中,
数据库访问子系统中包括数据库访问接口和数据库访问控制器;
前端应用用于发起对数据库的访问;
数据库用于存储数据;
数据库访问接口用于接收前端应用发来的数据库访问命令,并解释该命令,建立与数据库访问控制器之间的短连接,通过该短连接发送所述命令到数据库访问控制器;
数据库访问控制器预先与数据库之间维持一组长连接,用于当收到访问命令后,选取一个空闲的长连接,通过该长连接访问数据库并得到数据库返回的访问结果。
所述数据库访问接口包括应用接口和第一通讯接口,其中,
应用接口用于接收并解释前端应用发来的数据库访问命令,并将解释后生成的请求报文发送到第一通讯接口;
第一通讯接口用于收到请求报文后建立与第二通讯接口间的短连接,通过该短连接发送请求报文到第二通讯接口。
所述数据库访问控制器包括数据库服务接口和第二通讯接口,其中,
第二通讯接口与数据库访问接口相连,用于将收到的请求报文发送到数据库访问接口;
数据库服务接口用于收到请求报文后选取空闲的长连接,通过该长连接访问数据库并得到访问结果。
还包括数据库侧的共享内存,用于存储静态表并提供前端应用读取静态表上数据。
所述共享内存包括数据存放区、索引区和索引冲突区,其中,
数据存放区用于存储静态表;
索引区用于存放静态表的哈希值、关键值、数据所在数据存放区的内存地址和对应索引冲突区的内存地址;
索引冲突区用于存放静态表的关键值、数据所在数据存放区的内存地址和对应索引冲突区的内存地址。
一种数据库访问子系统,包括数据库访问接口和数据库访问控制器,其中,
数据库访问接口用于接收前端应用发来的数据库访问命令,并解释该命令,建立与数据库访问控制器之间的短连接,通过该短连接发送所述命令到数据库访问控制器;
数据库访问控制器预先与数据库之间维持一组长连接,用于当收到访问命令后,选取一个空闲的长连接,通过该长连接访问数据库并得到数据库返回的访问结果。
所述数据库访问接口包括应用接口和第一通讯接口,其中,
应用接口用于接收并解释前端应用发来的数据库访问命令,并将解释后生成的请求报文发送到第一通讯接口;
第一通讯接口用于收到请求报文后建立与第二通讯接口间的短连接,通过该短连接发送请求报文到第二通讯接口。
所述数据库访问控制器包括数据库服务接口和第二通讯接口,其中,
第二通讯接口与数据库访问接口相连,用于将收到的请求报文发送到数据库访问接口;
数据库服务接口用于收到请求报文后选取空闲的长连接,通过该长连接访问数据库并得到访问结果。
由以上本发明提供的技术方案可见,本发明在数据库访问子系统和数据库之间预先创建并维持一组长连接,当前端应用访问数据库时,前端应用通过数据库访问子系统中的数据库访问接口建立与该子系统中数据库访问控制器间的短连接,该数据库访问控制器选取一个长连接,实现前端应用通过该长连接和所述短连接访问数据库,而由于一个长连接可以对应数十个短连接,因此大大增加了可以接入的前端应用的数量,并充分利用了保持的长连接。
附图说明
图1为现有技术中前端应用访问数据库的原理图;
图2为本发明的系统原理图;
图3为本发明方法的流程图;
图4为本发明方法中一个实施例的流程图;
图5为本发明方法中系统框图;
图6为本发明中共享内存原理图。
具体实施方式
本发明的核心是通过利用短连接结合长连接的方式实现前端应用访问数据库。具体的,在前端应用和数据库之间引入数据库访问子系统,并在数据库访问子系统和数据库之间预先创建并维持一组长连接,当前端应用访问数据库时,前端应用通过数据库访问子系统中的数据库访问接口建立与该子系统中数据库访问控制器间的短连接,该数据库访问控制器选取一个空闲的长连接,实现前端应用通过该长连接和所述短连接访问数据库。
本领域技术人员知道,长连接是客户端接入数据库操作启动时建立的进程,只要进程不结束,就不会断开客户端与数据库之间的长连接。例如,在客户端接入数据库操作启动时,发出Open Database命令以建立进程,之后客户端执行select、update等数据库操作,当结束该次访问数据库操作时,发出CloseDatabase命令,断开长连接。还存在短连接,其是客户端仅需要进行数据库操作时的连接,例如客户端在执行select、update等数据库操作时的连接。数据库支持的长连接数量有限,所以同时支持的客户端有限。短连接仅在需要进行数据库操作时才建立连接,所以可以在一段时间内支持更多的客户端。本发明正是将长连接和短连接进行了结合。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和实施方式对本发明作进一步的详细说明。
本发明是通过数据库服务器子系统实现长连接和短连接结合的。如图2所示,数据库访问子系统包括数据库访问接口和数据库访问控制器。数据库访问接口负责接收并转换前端应用发来的数据库操作命令,数据库访问控制器实现对数据库的操作。
数据库访问控制器与数据库之间预先创建并维持一组长连接,这些长连接可以构成一个数据库连接池。具体的,系统中存储有配置文件中,该配置文件中设置了可以建立的长连接数,该值可以由工作人员根据经验配置。系统启动时,可以根据存储的配置文件,建立并保持数据库访问控制器与数据库之间的长连接。
数据库访问接口与数据库访问控制器之间采用短连接。例如可以采用UNIX域套接字。采用UNIX域套接字可以使进程间的同步控制简单,并可降低容错处理的复杂度,从而可以提高系统运行的稳定性和可靠性。
由于前端应用处理的交易可能不同,因此,发出的数据库访问命令不同,这样,多个前端应用建立的短连接的类型不同,即使类型相同,可能建立的时机不同,而一个长连接可以执行多个数据库操作,这就意味着一个长连接可以对应多个短连接。具体的,可以根据经验值将一个长连接对应的短连接的个数设置在前面所述的配置文件中,从而实现短连接与长连接的合理配置,例如该值可以是1个长连接对应15个短连接或20个短连接,那么,如果数据库最大支持1000个长连接,则可以接入的前端访问数量为1000*15或1000*20,这样既大大增加了可以接入的前端应用的数量,还充分利用了保持的长连接。
图3示出了前端应用访问数据库的一个实施例,由以下步骤实现:
步骤301:前端应用发出数据库访问命令到数据库访问接口。
该步骤是银行处理客户交易过程中,需要访问数据库以写入或读取信息,则前端应用发出数据库访问命令到数据库访问子系统中的数据库访问接口,由数据库访问接口处理该访问命令。
数据库访问接口中包含应用接口和第一通讯接口。
应用接口完成对经过的信息的解释,以使信息适于前端应用的接收或在数据库子系统中的传送。具体为,对前端应用发来的访问命令的语法解释,并发送到通讯接口;对通讯接口返回的应答报文做报文解析,该应答报文即本次数据库访问命令的执行结果,将该执行结果返回给前端应用。
那么,该步骤可以分为以下两个过程:
301a:前端应用发送结构化查询语言(Structured Query Language,SQL)语句到应用接口。这里,数据库访问命令具体为SQL语句。
301b:应用接口对SQL语句进行语法解释后,生成请求报文,并发送该请求报文到第一通讯接口。这里,数据库访问命令具体为请求报文。
步骤302:数据库访问接口建立与数据库访问控制器间的短连接,通过该短连接发送数据库访问命令。
本步骤是数据库访问接口根据收到的数据库访问命令,建立与数据库访问控制器间的短连接,并通过该短连接发送数据库访问命令。
前面提到数据库访问接口包括第一通讯接口,该接口收到应用接口发来的请求报文。本步骤中,具体的,是第一通讯接口根据所述请求报文,建立与数据库访问控制器间的短连接,并将所述请求报文通过建立的短连接发送到数据库访问控制器。
如前所述,短连接可以采用UNIX域套接字。采用UNIX域套接字可以使进程间的同步控制简单,并可降低容错处理的复杂度,从而可以提高系统运行的稳定性和可靠性。
步骤303:数据库访问控制器选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库;通过该长连接和所述建立的短连接返回数据库访问结果到前端应用。
前面提到,数据库访问控制器与数据库间预先创建并保持有一组长连接,这些长连接构成连接池。本步骤中,数据库访问控制器通过建立的短连接收到发来的请求报文,根据该请求报文,数据库访问控制器需要执行访问数据库的操作,则从连接池中选取一个空闲的长连接执行该操作。由于短连接执行完访问数据库命令即退出占用的长连接,因此占用长连接的时间很短,因此,一段时间内一个长连接可以与很多短连接相连,也就是说,短连接可以很容易的选取到空闲的长连接。
数据库访问控制器中包含第二通讯接口和数据库服务接口。
第二通讯接口收到第一通讯接口通过建立的短连接发来的请求报文,将该请求报文发送到数据库服务接口。
数据库服务接口从连接池中选取一个空闲的长连接,通过该长连接执行请求报文中的数据库操作。选取长连接的方式如上面所述。
数据库执行请求的数据库操作,将包含执行结果的应答报文通过长连接返回给数据库服务接口,再通过第二通讯接口—短连接—第一通讯接口—应用接口到达前端应用。与前端应用发数据库访问命令类似,不同的是应答报文按照相反的方向传送。
当前端应用完成本次数据库访问后,归还占用的长连接,释放建立的短连接。当需要进行新的数据库访问时,或者其它前端应用进行数据库访问时,重复上述过程,即建立新的短连接和选取长连接,通过短连接和长连接完成请求的数据库操作。由于一个长连接可以对应数十个短连接,同现有技术相比,本发明的方法支持接入的前端应用数目提高了数十倍。
这样,通过短连接—长连接的方式实现了增加接入的前端应用数量的目的,并充分利用了长连接。
以下是一个完整的实施例。
根据配置文件,数据库访问控制器中的数据库服务接口预先与数据库之间创建并维持一组长连接。当前端应用需要访问数据库时包括以下步骤:
步骤401:前端应用发出数据库访问命令SQL语句到数据库访问接口中的应用接口。
步骤402:应用接口对SQL语句进行语法解释,生成请求报文,并发送报文到第一通讯接口。
步骤403:第一通讯接口建立与数据库访问控制器中的第二通讯接口的短连接,通过该短连接将请求报文以UNIX域套接字的方式发送到第二通讯接口。
步骤404:第二通讯接口将该报文发送到数据库服务接口。
步骤405:数据库服务接口从连接池中选取一个空闲的长连接,通过该长连接将请求报文发送到数据库。
步骤406:数据库执行请求的数据库操作,并将包含操作结果的应答报文通过长连接返回给数据库服务接口。
步骤407:数据库服务接口将应答报文返回给第二通讯接口。
步骤408:第二通讯接口将应答报文通过建立的短连接,以UNIX域套接字的方式返回给第一通讯接口。
步骤409:第一通讯接口将应答报文返回给应用接口。
步骤410:应用接口对应答报文进行报文解析后,将解析的执行结果返回前端应用。
步骤411:释放短连接,归还长连接。
以上是本发明方法的一个完整实施例。
图5给出了与本发明访问数据库的系统图。
如图所示,该系统包括前端应用,数据库访问子系统,数据库。
数据库访问子系统中包括数据库访问接口,数据库访问控制器。
数据库访问接口与前端应用和数据库访问控制器相连,用于接收前端应用发来的数据库访问命令,并解释该命令,建立与数据库访问控制器之间的短连接,通过该短连接发送所述命令到数据库访问控制器。
数据库访问控制器与数据访问接口和数据库相连,预先与数据库之间维持一组长连接,当收到访问命令后,选取一个空闲的长连接,通过该长连接访问数据库并得到数据库返回的访问结果。
其中,数据库访问接口包括应用接口和第一通讯接口,数据库访问控制器包括数据库服务接口和第二通讯接口。
应用接口与前端应用和第一通讯接口相连,用于接收并解释前端应用发来的数据库访问命令,并将解释后生成的请求报文发送到第一通讯接口。
第一通讯接口与第二通讯接口相连,用于收到请求报文后建立与第二通讯接口间的短连接,通过该短连接发送请求报文到第二通讯接口。
第二通讯接口与数据库访问接口相连,用于将收到的请求报文发送到数据库访问接口。
数据库服务接口与数据库之间预先保持一组长连接,用于收到请求报文后选取空闲的长连接,通过该长连接访问数据库并得到访问结果。
访问结果通过所述数据库访问接口—第二通讯接口—第一通讯接口—应用接口到达前端应用。
事实上,数据库中存储的内容包括静态表和动态表。静态表中存储一些诸如银行的机构号、机构名等保持不变的信息,而动态表中存储一些与交易有关的信息,由本次交易决定。而上述方法中,前端应用通过短连接—长连接的方式访问数据库,访问的内容包括静态表和动态表。并且,前端应用对静态表的访问次数较多,而且进行的只是读取操作。
基于上述内容,本发明为实现快速获取静态表信息还包括以下方法:
前端系统初始化时将该前端系统对应的静态表装入数据库侧的共享内存中;前端应用将读取静态表的操作更改为读取共享内存。
前端应用通过操作共享内存完成对静态表的访问。
以下先介绍共享内存结构。图4示出了共享内存的结构。
如图所示,共享内存包括共享内存结构描述头和共享内存数据区两部分。其中,共享内存结构描述头存放共享内存公用信息及各个静态表所在数据区的地址。共享内存数据区按顺序存放各个静态表。每个静态表的数据区又可分为索引区、索引冲突区和数据存放区三部分。
将静态表装入共享内存由以下方式实现:
计算静态表需要的共享内存容量,并申请该容量的共享内存作为存储该静态表的数据存放区。该计算过程可以调用初始化函数实现。
将静态表载入数据存放区。该过程可以调用载入函数,将静态表中的记录逐条载入,并将每一条记录的哈希值、关键值和所在数据存放区的地址填入索引区或索引冲突区。
索引区和索引冲突区的结构相同,都包含关键值,数据指针和Next指针。
将每一条记录的哈希值、关键值和所在数据存放区的地址填入索引区或索引冲突区由以下方式实现:利用哈希算法对静态表中的关键(Key)值进行计算,得到哈希值,其中Key值是静态表中的某一列。将该Key值由哈希算法得到的哈希值载入该静态表对应索引区,如果该条记录的哈希值不与所述索引区已有的哈希值冲突(即相同)时,将该条记录的内存地址填入索引区的数据指针部分,Next指针置为Null;如果该条记录的哈希值与所述索引区已有的哈希值冲突,将该条记录的内存地址填入索引冲突区的数据指针部分,Next指针置为Null,并将所在索引冲突区的地址填入前述索引区Next指针中,替换Null。
以下以tbbranch表为例进行说明。tbbranch表包括机构代码orgcode、机构名orgname和机构状态state三项,载入数据存放区的结构与该表的结构相同,如下所示:
机构代码(Key)  机构名称    机构状态
Figure A20061015642900181
表1.数据存放区中的tbbranch表
机构代码这一列为Key值。每一行为一条记录,该表中有三条记录,三条记录的内存地址分别为Z1、Z2、Z3。
由哈希算法得到三条记录的Key值对应的哈希值分别为X1、X2、X1,可见第一条记录和第三条记录得到的哈希值是相同的。
索引区如下所示:
Key值  数据指针  Next指针
 X1  322900001  Z1     Null
 X2  322900002  Z2     Null
 X3
表2.索引区表(一)
数据存放区载入第一条记录时,在索引区的Key值填入322900001,数据指针填入该条记录所在数据存放区的地址Z1,Next指针填为Null。载入第二条记录与此类似。但是,载入第三条记录时,哈希值也是X1,则此时,将322900003填入索引冲突区的Key值中,数据指针填入第三条记录的地址Z3,Next指针填为Null,如下表所示:
Key值  数据指针  Next指针
Figure A20061015642900191
表3.索引区冲突区表
相应的,将索引冲突区中的地址Y1填入索引区X1的Next指针,覆盖Null。这样,索引区如下表所示:
Key值    数据指针  Next指针
Figure A20061015642900192
表2.索引区表(二)
相应的读取过程为:例如要根据Key值读取该条记录的相关信息,首先由查询值利用哈希算法得到哈希值,在索引区中得到该哈希值对应地址的Key值,如果该查询值与所述地址中的记录的Key值相同,则根据该索引记录的数据指针中的地址,读取数据区对应的记录;如果该查询值与所述地址中的记录的Key值不相同,则到索引区Next指针指向的地址中读取数据指针,进而从该数据指针指向的地址中读取记录。
以下仍以tbbranch表为例进行说明。
例如需要查询某个机构代码的对应状态信息,如果该查询值为322900002,查询语句为“Select state from tbbranch where orgcode=322900002”,则利用哈希算法得到该查询值对应的哈希值X2,在索引区中查找X2对应的Key值为322900002,与要查找的Key值322900002一致,说明X2的数据指针Z2指向的记录就是要查找的记录,到Z2地址中读取相应记录即可。
但是如果查询值为322900003,利用哈希算法得到X1,在索引区中查找X1地址的Key值为322900001,与查找的Key值322900003不一致,说明有冲突,则在X1对应的Next指针中读取到地址Y1,从Y1地址中读取到Key为322900003,与查找的Key值一致,则取对应的数据指针Z3,从Z3地址中读取该条记录。
当发生再次冲突时,索引冲突区的Next指针可以指向下一个索引冲突区的地址,而“下一个索引冲突区”中的数据指针指向发生再次冲突的数据的内存地址。
由以上实施例可见,本发明在数据库访问子系统和数据库之间预先创建并维持一组长连接,当前端应用访问数据库时,前端应用通过数据库访问子系统中的数据库访问接口建立与该子系统中数据库访问控制器间的短连接,该数据库访问控制器选取一个空闲的长连接,实现前端应用通过该长连接和所述短连接访问数据库,而由于一个长连接可以对应数十个短连接,因此大大增加了可以接入的前端应用的数量,并充分利用了保持的长连接。将静态表填入共享内存中,还可以实现对静态表快速、高效的访问。
虽然通过实施例描绘了本发明,本领域技术人员知道,本发明还有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。

Claims (19)

1、一种访问数据库的方法,其特征在于,数据库与数据库访问子系统预先创建并维持一组长连接,当前端应用访问数据库时,包括:
前端应用发出数据库访问命令到数据库访问子系统中的数据库访问接口;
数据库访问接口根据收到的数据库访问命令,建立与数据库访问子系统中的数据库访问控制器间的短连接,通过该短连接发送数据库访问命令;
数据库访问控制器选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库;通过该长连接和所述建立的短连接返回数据库访问结果到前端应用。
2、如权利要求1所述的方法,其特征在于,所述数据库与数据库访问子系统预先创建并维持一组长连接由以下方式实现:
数据库与数据库访问子系统间根据配置文件中设定的经验值预先创建并维持一组长连接。
3、如权利要求1所述的方法,其特征在于,所述前端应用发出数据库访问命令到数据库访问接口由以下方式实现:
前端应用发出数据库访问命令到数据库访问子系统中的数据库访问接口;
由数据库访问接口中的应用接口收到所述访问命令,根据该访问命令生成请求报文,并将该报文发送到第一通讯接口,该第一通讯接口位于数据库访问接口中。
4、如权利要求3所述的方法,其特征在于,所述数据库访问接口建立与数据库访问控制器间的短连接由以下方式实现:
所述第一通讯接口根据收到的请求报文建立与第二通讯接口的短连接,并通过该短连接发送请求报文到第二通讯接口,所述第二通讯接口位于数据库访问控制器中。
5、如权利要求4所述的方法,其特征在于,所述数据库访问控制器选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库由以下方式实现:
数据库访问控制器中的第二通讯接口根据从短连接收到的请求报文,发送数据库访问请求到数据库访问控制器中的数据库服务接口;
数据库服务接口根据收到的访问请求,选取一个空闲的长连接,通过该长连接发送数据库访问命令到数据库。
6、如权利要求1所述的方法,其特征在于,所述前端应用通过长连接和短连接完成数据库访问后还包括:
释放所述短连接,并归还所述占用的长连接。
7、如权利要求1至6所述的方法,其特征在于,所述短连接为UNIX域套接字。
8、如权利要求1所述的方法,其特征在于,本方法还包括:
当前端系统初始化时,将对应的静态表装入数据库侧共享内存中;前端应用将读取静态表的操作改为读取共享内存;
前端应用通过操作共享内存完成对静态表的访问。
9、如权利要求8所述的方法,其特征在于,共享内存区建立数据存放区、索引区和索引冲突区,其中索引区包括哈希值、关键值、数据指针和Next指针,索引冲突区包括关键值、数据指针和Next指针,静态表中的一列值为关键值,所述将数据库中的静态表装入数据库侧共享内存中由以下方式实现:
计算静态表需要的共享内存容量,并申请该容量的共享内存作为存储该静态表的数据存放区;
将所述静态表载入所述数据存放区;
根据静态表中记录的关键值,使用哈希算法计算对应的哈希值,当所述哈希值与索引区已有的哈希值不冲突时,将所述哈希值和该记录所在内存的地址载入对应索引区和数据指针中;当所述哈希值与索引区已有的哈希值冲突时,将所述哈希值和该记录所在内存的地址载入对应索引冲突区和数据指针中,并将所在索引冲突区的地址填入所述索引区的Next指针中。
10、如权利要求9所述的方法,其特征在于,所述当所述哈希值与索引区已有的哈希值冲突时,将所述哈希值和该记录所在内存的地址载入对应索引冲突区和数据指针中,而所述哈希值与索引冲突区发生再次发生冲突时,将该记录的内存地址载入索引冲突区的数据指针中。
11、如权利要求9所述的方法,其特征在于,所述前端应用通过操作共享内存完成对数据库的静态表的访问由以下方式实现:
由查询值利用哈希算法得到哈希值,在索引区中得到该哈希值对应数据指针中的地址,如果该查询值与所述地址中的记录的关键值相同,则读取记录;如果该查询值与所述地址中的记录的关键值不相同,则到索引区Next指针指向的地址中读取数据指针,从该数据指针指向的地址中读取记录。
12、一种访问数据库的系统,其特征在于,该系统包括前端应用、数据库访问子系统和数据库,其中,
数据库访问子系统中包括数据库访问接口和数据库访问控制器;
前端应用用于发起对数据库的访问;
数据库用于存储数据;
数据库访问接口用于接收前端应用发来的数据库访问命令,并解释该命令,建立与数据库访问控制器之间的短连接,通过该短连接发送所述命令到数据库访问控制器;
数据库访问控制器预先与数据库之间维持一组长连接,用于当收到访问命令后,选取一个空闲的长连接,通过该长连接访问数据库并得到数据库返回的访问结果。
13、如权利要求12所述的系统,其特征在于,所述数据库访问接口包括应用接口和第一通讯接口,其中,
应用接口用于接收并解释前端应用发来的数据库访问命令,并将解释后生成的请求报文发送到第一通讯接口;
第一通讯接口用于收到请求报文后建立与第二通讯接口间的短连接,通过该短连接发送请求报文到第二通讯接口。
14、如权利要求12所述的系统,其特征在于,所述数据库访问控制器包括数据库服务接口和第二通讯接口,其中,
第二通讯接口与数据库访问接口相连,用于将收到的请求报文发送到数据库访问接口;
数据库服务接口用于收到请求报文后选取空闲的长连接,通过该长连接访问数据库并得到访问结果。
15、如权利要求12所述的系统,其特征在于,还包括数据库侧的共享内存,用于存储静态表并提供前端应用读取静态表上数据。
16、如权利要求15所述的系统,其特征在于,所述共享内存包括数据存放区、索引区和索引冲突区,其中,
数据存放区用于存储静态表;
索引区用于存放静态表的哈希值、关键值、数据所在数据存放区的内存地址和对应索引冲突区的内存地址;
索引冲突区用于存放静态表的关键值、数据所在数据存放区的内存地址和对应索引冲突区的内存地址。
17、一种数据库访问子系统,其特征在于,包括数据库访问接口和数据库访问控制器,其中,
数据库访问接口用于接收前端应用发来的数据库访问命令,并解释该命令,建立与数据库访问控制器之间的短连接,通过该短连接发送所述命令到数据库访问控制器;
数据库访问控制器预先与数据库之间维持一组长连接,用于当收到访问命令后,选取一个空闲的长连接,通过该长连接访问数据库并得到数据库返回的访问结果。
18、如权利要求17所述的子系统,其特征在于,所述数据库访问接口包括应用接口和第一通讯接口,其中,
应用接口用于接收并解释前端应用发来的数据库访问命令,并将解释后生成的请求报文发送到第一通讯接口;
第一通讯接口用于收到请求报文后建立与第二通讯接口间的短连接,通过该短连接发送请求报文到第二通讯接口。
19、如权利要求17所述的子系统,其特征在于,所述数据库访问控制器包括数据库服务接口和第二通讯接口,其中,
第二通讯接口与数据库访问接口相连,用于将收到的请求报文发送到数据库访问接口;
数据库服务接口用于收到请求报文后选取空闲的长连接,通过该长连接访问数据库并得到访问结果。
CNB2006101564295A 2006-12-31 2006-12-31 访问数据库的方法和系统 Active CN100458790C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006101564295A CN100458790C (zh) 2006-12-31 2006-12-31 访问数据库的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006101564295A CN100458790C (zh) 2006-12-31 2006-12-31 访问数据库的方法和系统

Publications (2)

Publication Number Publication Date
CN1987864A true CN1987864A (zh) 2007-06-27
CN100458790C CN100458790C (zh) 2009-02-04

Family

ID=38184661

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006101564295A Active CN100458790C (zh) 2006-12-31 2006-12-31 访问数据库的方法和系统

Country Status (1)

Country Link
CN (1) CN100458790C (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102006282A (zh) * 2010-10-26 2011-04-06 福州星网视易信息系统有限公司 客户端/服务器模式下的数据库访问集中控制方法
CN101383814B (zh) * 2007-09-07 2012-04-04 华为技术有限公司 一种实现基于连接池的数据访问的设备和方法
CN103634444A (zh) * 2013-11-25 2014-03-12 北京搜狗信息服务有限公司 提供号码信息的方法及系统
CN104468547A (zh) * 2014-11-28 2015-03-25 北京奇虎科技有限公司 建立长连接的方法、装置及系统
CN104462200A (zh) * 2014-10-31 2015-03-25 北京思特奇信息技术股份有限公司 一种通过第三方数据库控制系统切换的方法及系统
CN105677397A (zh) * 2015-12-30 2016-06-15 南京途牛科技有限公司 通过本地网关程序优化php远程调用的方法
CN108804234A (zh) * 2017-04-28 2018-11-13 腾讯科技(深圳)有限公司 数据存储系统及其操作方法
CN110399416A (zh) * 2019-07-24 2019-11-01 成都甄识科技有限公司 一种分布式数据库操作优化访问处理方法及系统
CN110489474A (zh) * 2019-08-05 2019-11-22 北京字节跳动网络技术有限公司 一种数据处理的方法、装置、介质和电子设备
CN113590635A (zh) * 2021-08-23 2021-11-02 中国银行股份有限公司 海外多银行的数据分析系统及方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1317653C (zh) * 2002-12-25 2007-05-23 中兴通讯股份有限公司 一种数据库连接的高效管理方法
CN100337235C (zh) * 2003-06-23 2007-09-12 华为技术有限公司 访问数据库的方法及装置
US7571164B2 (en) * 2004-10-01 2009-08-04 Sap Ag System and method for deferred database connection configuration
CN1815469B (zh) * 2005-02-01 2010-04-28 华为技术有限公司 一种数据库连接资源的管理方法

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101383814B (zh) * 2007-09-07 2012-04-04 华为技术有限公司 一种实现基于连接池的数据访问的设备和方法
CN102006282A (zh) * 2010-10-26 2011-04-06 福州星网视易信息系统有限公司 客户端/服务器模式下的数据库访问集中控制方法
CN103634444B (zh) * 2013-11-25 2018-07-17 北京搜狗信息服务有限公司 提供号码信息的方法及系统
CN103634444A (zh) * 2013-11-25 2014-03-12 北京搜狗信息服务有限公司 提供号码信息的方法及系统
CN104462200A (zh) * 2014-10-31 2015-03-25 北京思特奇信息技术股份有限公司 一种通过第三方数据库控制系统切换的方法及系统
CN104468547A (zh) * 2014-11-28 2015-03-25 北京奇虎科技有限公司 建立长连接的方法、装置及系统
CN104468547B (zh) * 2014-11-28 2019-03-15 北京奇安信科技有限公司 建立长连接的方法、装置及系统
CN105677397A (zh) * 2015-12-30 2016-06-15 南京途牛科技有限公司 通过本地网关程序优化php远程调用的方法
CN105677397B (zh) * 2015-12-30 2018-09-25 南京途牛科技有限公司 通过本地网关程序优化php远程调用的方法
CN108804234A (zh) * 2017-04-28 2018-11-13 腾讯科技(深圳)有限公司 数据存储系统及其操作方法
CN110399416A (zh) * 2019-07-24 2019-11-01 成都甄识科技有限公司 一种分布式数据库操作优化访问处理方法及系统
CN110399416B (zh) * 2019-07-24 2023-08-22 成都甄识科技有限公司 一种分布式数据库操作优化访问处理方法及系统
CN110489474A (zh) * 2019-08-05 2019-11-22 北京字节跳动网络技术有限公司 一种数据处理的方法、装置、介质和电子设备
CN110489474B (zh) * 2019-08-05 2022-04-22 北京字节跳动网络技术有限公司 一种数据处理的方法、装置、介质和电子设备
CN113590635A (zh) * 2021-08-23 2021-11-02 中国银行股份有限公司 海外多银行的数据分析系统及方法

Also Published As

Publication number Publication date
CN100458790C (zh) 2009-02-04

Similar Documents

Publication Publication Date Title
CN100458790C (zh) 访问数据库的方法和系统
CN108647361B (zh) 一种基于区块链的数据存储方法、装置及系统
CN100334583C (zh) 利用智能卡实现移动个人化计算环境的方法和系统
CN105210062B (zh) 用于分布式数据库系统的系统范围检查点避免
CN105190622B (zh) 用于分布式数据库系统的快速崩溃恢复
CN105190623B (zh) 日志记录管理
CN101170416B (zh) 网络数据存储系统及其数据访问方法
CN102541990B (zh) 利用虚拟分区的数据库重新分布方法和系统
US20070288587A1 (en) Transactional shared memory system and method of control
CN109167811A (zh) 一种基于区块链的跨链数据访问方法和装置
CN102033912A (zh) 一种分布式数据库访问方法及系统
CN100452046C (zh) 一种海量文件的存储方法及系统
CN103116618A (zh) 基于客户端持久缓存的远程文件系统镜像方法及系统
CN102982151B (zh) 多个物理文件合并为一个逻辑文件的方法
CN101636723A (zh) 管理会话的Web服务器及其方法
CN102937964B (zh) 基于分布式系统的智能数据服务方法
CN101923571B (zh) 管理终端数据记录的方法及装置
CN102739622A (zh) 一种可扩展的数据存储系统
CN112559637B (zh) 基于分布式存储的数据处理方法、装置、设备以及介质
CN109684282A (zh) 一种构建元数据缓存的方法及装置
CN103595799A (zh) 一种实现分布式共享数据库的方法
CN102722405A (zh) 高并发、多线程应用中的计数方法及系统
CN103455335A (zh) 一种多级分类的Web实现方法
CN101142573A (zh) 全局数据同步的系统和方法
US7506000B2 (en) Method and system for programming disconnected data

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