一种共享内存数据库访问方法技术

技术编号:7029808 阅读:367 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种共享内存数据库访问方法。内存数据库服务进程先把内存数据放入共享内存中;然后,客户端程序向内存数据库服务进程发送Socket连接请求;内存数据库服务进程接收该连接请求,把共享内存的内存ID发送给客户端程序;客户端程序接收到内存ID后,将该内存ID所对应的共享内存映射到其自己的进程空间;然后客户端程序便可直接访问共享内存,对共享内存中的内存数据进行增和/或删和/或改和/或查操作;当客户端程序退出后,内存数据库服务进程释放与客户端程序的Socket连接。本发明专利技术的方法使得客户端程序直接对共享内存进行访问,从而绕开了每次访问都必须进行的Socket通信,从而节约了内存数据库的访问时间。

【技术实现步骤摘要】

本专利技术涉及一种避开进程通信的共享内存数据库访问方法
技术介绍
目前对内存数据库的访问,一般都是采用Socket通信方式,即应用程序需要访问内存数据库时,通过Socket通信端口向内存数据库服务进程发送请求信息,内存数据库服务进程接收Socket请求指令后,查询或者修改内存数据,然后将处理结果再通过Socket发送给应用程序,应用程序接收到处理结果,完成一次对内存数据库的访问。这种Socket通信方式严重制约了同主机部署时对内存的访问效率。通常来说,进程对内存的访问速度一般在几微秒之内,而Socket通信的速度由于网络1/0的消耗、通信双方的互相等待等,其交互速度要比直接的内存访问慢10倍左右。由于处理时间大部分耗费在通信上,使得“内存的快速访问”优势无法得到充分有效的发挥。
技术实现思路
本专利技术所要解决的技术问题是提供一种应用程序避开Socket通信方式直接对内存数据库进行访问的方法,以提高应用程序对内存数据库的访问速度。本专利技术解决上述技术问题的技术方案如下,包括如下步骤步骤1 内存数据库服务进程把内存数据放入共享内存中; 步骤2 客户端程序向所述内存数据库服务进程发送Socket连接请求; 步骤3 内存数据库服务进程接收所述连接请求,把所述共享内存的内存ID发送给所述客户端程序;步骤4 所述客户端程序接收到所述内存ID后,将该内存ID所对应的共享内存映射到其自己的进程空间;步骤5 所述客户端程序直接访问所述共享内存,对共享内存中的内存数据进行增和/ 或删和/或改和/或查操作;步骤6 客户端程序退出,内存数据库服务进程释放与客户端程序的Socket连接。其中的客户端程序为需要访问内存数据库的各类应用程序。本专利技术的有益效果是内存数据库服务进程将内存数据库的共享内存ID告知客户端程序,客户端程序将其映射到自己的进程空间进而可以直接对该共享内存进行访问, 从而实现了对内存数据库的直接访问与操作,避免了每次访问都必须进行Socket通信而造成的时间浪费,节约了内存数据库的访问时间。在上述技术方案的基础上,本专利技术还可以做如下改进。进一步,所述客户端程序和内存数据库服务进程运行在同一主机上。采用上述进一步方案的有益效果是,解决了客户端程序和内存数据库服务进程运行在同一主机上时,客户端程序访问内存数据库的时间浪费问题。进一步,步骤3中,内存数据库服务进程接受所述连接请求后对客户端程序进行权限认证,经认证通过后把所述共享内存的内存ID发送给所述客户端程序;若认证不通过,则不发送内存ID。采用上述进一步方案的有益效果是,通过权限认证,增强了共享内存数据库的安全性。进一步,在步骤4中,当客户端程序对内存数据进行增和/或删和/或改和/或查操作时,将操作记录于该Socket连接的临时事务区,并对操作加锁。进一步,在步骤4中,当客户端程序对内存数据的增和/或删和/或改和/或查操作结束时,将临时事务区中该操作的记录删除,并解除操作的锁。采用上述进一步方案的有益效果是,将操作记录于该Socket连接的临时事务区可以供内存数据库服务进程获知当前的客户端程序的操作记录,对操作加锁可以保证共享内存数据库中数据的完整性和一致性。进一步,在步骤4中,当客户端程序异常退出时,内存数据库服务进程查询临时事务区,如果临时事务区中有未完成的事务记录和/或有未释放的锁,则根据临时事务区中未完成的事务记录和/或未释放的锁继续进行此连接的后续操作。采用上述进一步方案的有益效果是,避免由于客户端程序的故障,给内存数据库造成影响,确保内存数据库数据不会因为客户端程序的异常而造成损坏。通过本专利技术的内存数据库访问方法,当应用程序(客户端程序)和内存数据库部署在同一台主机上时,使应用程序可以绕开Socket通信,直接访问内存数据库中的数据。通过此方法,可以大幅提高同主机部署的应用程序访问内存数据库的效率,适应电信、金融等领域对联机实时事务处理的高速要求。附图说明图1为本专利技术内存数据库访问方法的系统架构图; 图2为本专利技术内存数据库访问方法的流程图。具体实施例方式以下结合附图对本专利技术的原理和特征进行描述,所举实例只用于解释本专利技术,并非用于限定本专利技术的范围。如图1所示,本专利技术的共享内存数据库访问方法适用于客户端程序与内存数据库服务进程运行于同一台主机上,客户端程序要访问共享内存区中的共享内存数据库时先与内存数据库服务进程建立socket连接,经过认证后,内存数据库服务进程将共享内存的内存ID发送给客户端程序,客户端程序根据该内存ID直接访问共享内存,对共享内存数据库进行增和/或删和/或改和/或查等操作,从而绕过了每次对内存数据库操作时都必须经过socket连接的麻烦,从而加快了对内存数据库操作的时间。本专利技术的内存数据库访问方法的具体流程,如图2所示,包括如下步骤 步骤1 内存数据库服务进程把内存数据放入共享内存中;步骤2 客户端程序向所述内存数据库服务进程发送Socket连接请求;步骤3 内存数据库服务进程接收所述连接请求,把所述共享内存的内存ID发送给所述客户端程序;步骤4 所述客户端程序接收到所述内存ID后,将该内存ID所对应的共享内存映射到其自己的进程空间;步骤5 所述客户端程序直接访问所述共享内存,对共享内存中的内存数据进行增和/ 或删和/或改和/或查操作;步骤6 客户端程序退出,内存数据库服务进程释放与客户端程序的Socket连接。上述客户端程序为需要访问内存数据库的各类应用程序。其中,步骤3中,内存数据库服务进程接受所述连接请求后对客户端程序进行权限认证,经认证通过后把所述共享内存的内存ID发送给所述客户端程序;若认证不通过, 则不发送内存ID。步骤4中,当客户端程序对内存数据进行增和/或删和/或改和/或查操作时, 将操作记录于该Socket连接的临时事务区,并对操作加锁;当客户端程序对内存数据的增和/或删和/或改和/或查操作结束时,将临时事务区中该操作的记录删除,并解除操作的锁,从而保证共享内存数据库中数据的完整性和一致性。当客户端程序异常退出时,内存数据库服务进程查询临时事务区,如果临时事务区中有未完成的事务记录和/或有未释放的锁,则根据临时事务区中未完成的事务记录和/或未释放的锁继续进行此连接的后续操作,以避免由于客户端程序的故障,给内存数据库造成影响,确保内存数据库数据不会因为客户端程序的异常而造成损坏。以话单计费系统为例,计费程序(客户端程序)和内存数据库部署在同一台主机上,内存数据库中存放每个手机号码定购的资费套餐信息。计费程序首先与内存数据库服务进程建立Socket连接,通过认证之后,计费程序获得内存数据库服务进程发送过来的共享内存ID,然后将这块共享内存映射到自己的进程空间,完成登陆准备工作。接下来,计费程序打开话单文件,逐条取出每条话单,然后根据手机号码直接到共享内存中去查找此号码对应的资费套餐信息,结合话单的通话时间、对方号码等信息完成每条话单的计费。在查找资费套餐时,计费程序直接访问共享内存,并没有和内存数据库进程进行 Socket通信,从而使得访问效率大幅提高。本专利技术由于在增和/或删和/或改和/或查操作时直接操作内存数据库中的数据,从而大幅度提高对内存数据库的访问速度。在CPU主频1.65GHz的主机上,从一个具有 1本文档来自技高网...

【技术保护点】
1.一种共享内存数据库访问方法,包括如下步骤:步骤1:内存数据库服务进程把内存数据放入共享内存中;步骤2:客户端程序向所述内存数据库服务进程发送Socket连接请求;步骤3:内存数据库服务进程接收所述连接请求,把所述共享内存的内存ID发送给存数据库服务进程释放与客户端程序的Socket连接。所述客户端程序;步骤4:所述客户端程序接收到所述内存ID后,将该内存ID所对应的共享内存映射到其自己的进程空间;步骤5:所述客户端程序直接访问所述共享内存,对共享内存中的内存数据进行增和/或删和/或改和/或查操作;步骤6:客户端程序退出,内

【技术特征摘要】

【专利技术属性】
技术研发人员:王金山
申请(专利权)人:北京神州数码思特奇信息技术股份有限公司
类型:发明
国别省市:11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1