一种内存数据库高效远程访问方法
【技术领域】
[0001] 本发明涉及信息通信与数据库领域,具体而言涉及一种内存数据库高效远程访问 的实现方法。
【背景技术】
[0002] 在现有的信息系统中,使用传统数据库常常因为硬盘I/O读写速率的影响而导致 信息系统的性能遇到瓶颈。
[0003] 内存数据库因为读写都在内存中进行,因此可以突破硬盘I/O读写的限制而提升 信息系统的性能,一般读写速度是普通硬盘数据库的10倍以上。
[0004] 基于上述现状,现有技术中开发了支持传统SQL语句内存数据库。
[0005] 但随着而来引发了新的问题,目前很多系统是分布式或网格的,若该系统使用内 存数据库,必须保证各个节点的内存数据库数据保持一致。另外,目前有些系统对内存数据 进行备份,增加系统可靠性。
[0006] 这些要求无疑加大系统开发的难度和风险。最好的解决方法是让多个节点访问统 一个内存数据库,确保系统数据一致。
[0007]目前现有的实践中存在一些内存数据库远程访问的组件产品,但采用的技术无法 发挥内存数据库高效的性能。
【发明内容】
[0008] 本发明目的在于提供一种内存数据库高效远程访问方法,利用该方法不但可以让 多台主机访问内存数据库,还可以充分发挥内存数据库性能。
[0009] 本发明的上述目的通过独立权利要求的技术特征实现,从属权利要求以另选或有 利的方式发展独立权利要求的技术特征。
[0010] 为达成上述目的,本发明提出一种内存数据库高效远程访问方法,包括:
[0011] 在同一台主机上部署组件GSProxy服务端以及内存数据库,该组件GSProxy服务 端提供启动组件的脚本文件或可执行文件,在启动组件GSProxy服务端时,组件GSProxy服 务端通过内存数据库提供的C-API启动内存数据库;
[0012] 用户机上部署组件GSProxy客户端,用户可通过该GSProxy客户端提供的统一接 口远程访问GSProxy服务端的内存数据库;
[0013] 当GSProxy服务端监听到GSProxy客户端发起的连接请求时,服务端分配线程提 供客户端与内存数据库的连接与访问,其中,一个客户端同时只能连接一个数据库;
[0014]GSProxy客户端在连接成功后向GSProxy服务端发起对内存数据库的操作请求, GSProxy服务端的桥接模块在接收到请求,向GSProxy客户端返回成功接收请求响应;
[0015]GSProxy服务端对GSProxy客户端发起的操作命令进行调度:当GSProxy客户端 对内存数据库发起新增、删除、查询、修改操作时,对交互线程加互斥锁并归入消息队列进 行统一调度,使各个GSProxy客户端对内存数据库操作的原子性;当消息队列有消息时,通 过消息队列调度操作线程按照一定的优先级将调度消息提交至消息下发模块;消息下发模 块将GSProxy客户端提交的消息请求通过内存数据库提供的C-API接口提交至内存数据 库,并将操作结果返回给GSProxy客户端。
[0016] 进一步的例子中,前述GSProxy服务端根据GSProxy客户端的连接请求分配线 程提供客户端与内存数据库的连接与访问时,通过GSProxy服务端的桥接模块监听与 GSProxy客户端的连接,当与GSProxy客户端进行三次通信握手后,从线程池中获取空闲线 程与GSProxy客户端保持长连接,并向GSProxy客户端返回连接结果。
[0017] 进一步的例子中,前述GSProxy服务端根据GSProxy客户端的连接请求分配线程 提供客户端与内存数据库的连接与访问时,所述的空闲线程采用Socket通信方式保持与 GSProxy客户端的长连接,该连接通过TCP/IP协议内置的keepalive机制检测GSProxy客 户端是否在线,并且当发送的心跳包超过三次未连接时,释放连接以及将线程归于线程池。
[0018] 进一步的例子中,前述消息队列调度操作线程按照下述优先级将调度消息提交至 消息下发模块:
[0019] 1、查询操作优先级大于增加、删除、修改优先级;
[0020] 2、新增、删除、修改操作优先级大于事务提交和回滚优先级。
[0021] 进一步的例子中,在上述优先级调度基础上,GSProxy服务端在内存数据库中生成 一张表用于记录各个GSProxy客户端提交的操作请求的历史记录,表结构如下:
[0023] 当GSProxy客户端提交时操作请求时,解析操作请求并将该操作请求记录到前述 表中,GSProxy服务端预测该GSProxy客户端下两次提交该类型操作的时间点,根据预测的 时间点先后顺序排列各个GSProxy客户端操作请求调度先后顺序,以保证响应时间符合客 户感知习惯,其中前述的预测采用灰色预测模型GM(1,1)对GSProxy客户端即将提交时间 点进行预测。
[0024] 进一步的例子中,前述GSProxy服务端在启动时,创建默认创建20个闲置线程,这 些闲置线程被用于GSProxy客户端连接和访问内存数据时使用,当GSProxy客户端连接服 务端时,一个闲置线程将被激活,该线程实现GSProxy客户端和GSProxy服务端之间的消息 交互,当GSProxy客户端断开服务端时,所使用的线程将被重新挂起。
[0025] 本发明所提出的内存数据库高效远程访问方法,能够使内存数据库具有远程访 问,而尽可能发挥内存数据库高效的性能,有效支持了网格或分布式小范围使用内存数据 库的情况。而且能够使多用户并发访问和操作,同时通过调度规则让用户在感知上"高效", 增加用户产品体验。利用本发明的方法,使主机的内存数据在其他主机实现热备份,增加系 统的可靠性。
[0026] 应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这 样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保 护的主题的所有组合都被视为本公开的发明主题的一部分。
[0027] 结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实 施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面 的描述中显见,或通过根据本发明教导的【具体实施方式】的实践中得知。
【附图说明】
[0028] 附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组 成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。 现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:
[0029] 图1为本发明一实施方式嵌入式内存数据库的实现方法的流程示意图。
[0030] 图2为线程池架构示意图。
[0031] 图3为内存数据库的数据调度示意图。
[0032] 图4为利用图1实施例的方法所实现内存数据库高效远程访问的流程图。
【具体实施方式】
[0033] 为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
[0034] 在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。 本公开的实施例不必定意在包括本发明的所有方面。应当理解,上面介绍的多种构思和 实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实 施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一 些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。
[0035] 结合图1、图2、图3和图4,根据本发明的实施例,一种内存数据库高效远程访问方 法,包括:
[0036] 在同一台主机上部署组件GSProxy服务端以及内存数据库,该组件GSProxy服务 端提供启动组件的脚本文件或可执行文件,在启动组件GSProxy服务端时,组