欢迎光临小豌豆知识网!
当前位置:首页 > 物理技术 > 推算计数> 内存数据库 技术文档5篇独创技术188666字

内存数据库 技术文档5篇

2020-08-28 11:29:58

  内存数据库 1:

  分布式内存数据库的实现方法、系统、令牌控制器及内存数据库

  第一、技术领域

  本发明涉及通信技术,尤其涉及一种分布式内存数据库的实现方法、系统、令牌控制器及内存数据库。

  第二 、背景技术

  MMDB(Main Memory Database,内存数据库)是一种数据库技术,主要用于实现将数据放在内存中,进而可直接操作内存中保存该数据的数据库的目的。访问保存在内存中数据与访问保存在磁盘上的数据相比,由于数据处理时无需进行磁盘访问,所以读写速度可以提高很多,故而在很多技术领域,使用MMDB的技术。现有技术中主要采用如下方案部署分布式MMDB:

  根据Active-Standby主备双机方案,即部署两个令牌控制器在两台设备上,一台的主令牌控制器工作,另一台的备令牌控制器闲置,在两台设备上都装有双机控制软件,两个令牌控制器对外显示为一个浮动IP。对于分布式内存数据库中的一个集群内各MMDB而言,只有一个令牌控制器,只需要配一个令牌控制器的IP,与该令牌控制器保持心跳。如果主令牌控制器发生故障,通过双机控制软件的切换功能,备令牌控制器可接管该主令牌控制器的工作,并且仍旧以浮动IP呈现给MMDB。这样对于MMDB而言,集群内仍就是一个令牌控制器,感觉不到主备令牌控制器发生的切换。

  但是,这种方法还是有不足之处。当主令牌控制器发生故障时,如果手工切换,还存在着延时的风险,而自动检测也使令牌故障需要在两台令牌控制器外的第三个点检测令牌控制器的心跳以判定其状态,该第三个点也存在单点故障的风险,该种方案部署较复杂,可靠性和稳定性较差。

  第三、发明内容

  本发明的实施例提供一种分布式MMDB的实现方法、系统、令牌控制器及MMDB,可提高分布式MMDB的可靠性。

  为达到上述目的,本发明的实施例采用如下技术方案:

  一种分布式MMDB的实现方法,包括:

  发送包含节点MMDB信息的消息到至少两个令牌控制器;

  分别接收来自所述至少两个令牌控制器的包含MMDB列表的消息,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;

  根据所述MMDB列表中的集群内信息处理所述集群内的事务。

  一种分布式MMDB的实现方法,包括:

  接收来自至少一个MMDB的包含节点内存数据信息的消息;

  根据所述节点MMDB信息获取MMDB列表,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;

  将包含所述MMDB列表的消息发送到所述至少一个MMDB,以便所述至少一个MMDB根据所述MMDB列表中的集群内信息处理所述集群内的事务。

  一种内存数据库,包括:

  发送模块,用于发送包含节点MMDB信息的消息到至少两个令牌控制器;

  接收模块,用于分别接收来自所述至少两个令牌控制器的包含MMDB列表的消息,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;

  处理模块,用于根据所述MMDB列表中的集群内信息处理所述集群内的事务。

  一种令牌控制器,其特征在于,包括:

  接收模块,用于接收来自至少一个MMDB的包含节点内存数据信息的消息;

  获取模块,用于根据所述节点MMDB信息获取MMDB列表,其中所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;

  发送模块,用于将包含所述MMDB列表的消息发送到所述至少一个MMDB,以便所述至少一个MMDB根据所述MMDB列表中的集群内信息处理所述集群内的事务。

  一种分布式MMDB系统,包括:至少两个令牌控制器和至少一个MMDB;

  所述MMDB,用于发送包含节点MMDB信息的消息到所述至少两个令牌控制器,并分别接收来自所述至少两个令牌控制器的包含MMDB列表的消息,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息,存储所述内测数据列表,并根据所述MMDB列表中的集群内信息处理所述集群内的事务;

  所述令牌控制器,用于接收所述MMDB的包含节点内存数据信息的消息,并根据所述节点MMDB信息获取MMDB列表,再将包含所述MMDB列表的消息发送到所述至少一个MMDB。

  一种站点系统,至少包括:第一站点和第二站点,

  所述第一站点中的令牌控制器,用于从第二站点的令牌控制器接收包含所述第二站点的主内存数据库信息的消息,并根据所述第二站点的主内存数据库信息和第一站点的集群内信息获取所述第一站点的内存数据库列表,再将所述第一站点的内存数据库列表发送到所述第一站点的内存数据库;

  所述第一站点中的内存数据库,用于发送包含节点内存数据库信息的消息到第一站点的令牌控制器,并从所述第一站点的令牌控制器获取所述第一站点的内存数据库列表,以及根据所述内存数据库列表处理所述第一站点间的事务,或所述第一站点与所述第二站点间的事务;其中,所述内存数据库列表中包括:作为从内存数据库加入第一站点的第二站点的主内存数据库信息,以及根据节点内存数据库信息整理的第一站点的集群内信息。

  在本发明实施例提供的上述方案中,无需双机软件控制MMDB,无需主备双机方案,每个MMDB可通过与令牌控制器之间的交互获取MMDB列表,并根据MMDB列表处理集群内的事务,故而避免了为处理主备倒换等事务时产生的延时问题,降低了执行复杂度,无需提供闲置的备用设备,减少了购机成本,提高了分布式MMDB的可靠性。

  第四、附图说明

  为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

  图1为本发明实施例分布式MMDB的实现方法的流程示意图;

  图2为本发明实施例在MMDB登入或保持心跳或退出MMDB集群时的场景示意图;

  图3为本发明实施例在MMDB登入时,分布式MMDB的实现方法的流程示意图;

  图4为本发明实施例在MMDB保持心跳时,分布式MMDB的实现方法的流程示意图;

  图5为本发明实施例在令牌控制器故障时的场景示意图;

  图6为本发明实施例在令牌控制器故障时,分布式MMDB的实现方法流程示意图;

  图7为本发明实施例在令牌控制器重新进入集群内时,分布式MMDB的实现方法流程示意图;

  图8为本发明实施例在接收到写入操作时,分布式MMDB的实现方法流程示意图;

  图9为本发明实施例在MMDB故障时,分布式MMDB的实现方法的流程示意图;

  图10为本发明实施例在MMDB故障恢复时,分布式MMDB的实现方法的流程示意图;

  图11为本发明实施例提供的MMDB的结构示意图;

  图12为本发明另一实施例提供的MMDB的结构示意图;

  图13为本发明实施例提供的令牌控制器的结构示意图;

  图14为本发明实施例中分布式MMDB的实现方法的流程示意图;

  图15为本发明实施例在接收到写入请求时,站点间分布式MMDB的实现方法的流程示意图;

  图16为本发明实施例提供的方法中不同站点间令牌控制器的交互示意图;

  图17为本发明实施例在接收到写入请求时,站点间数据同步的示意图;

  图18为本发明实施例在主MMDB变更时,站点间分布式MMDB的实现方法的流程示意图;

  图19为本发明实施例提供的站点系统的示意图。

  第五、具体实施方式

  下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

  如图1所示,本实施例提供一种分布式MMDB的实现方法,该方法主要涉及MMDB和管理该MMDB的令牌控制器,包括:

  步骤101,MMDB发送包含节点MMDB信息的消息到至少两个令牌控制器;

  在本实施例以及下述各个实施例中,上述节点MMDB信息至少包括:本地MMDB的名称,IP地址,端口,数据库优先级别等。

  例如:某集群1中的MMDB1将包含本身的节点MMDB信息发送到管理集群1的令牌控制器1和令牌控制器2,其中,该节点MMDB信息包括:MMDB1的MMDB名称,IP地址,端口,以及MMDB1的优先级别。

  在一个集群内,一般主MMDB对设备性能要求最高,为了能够使这种性能最高的设备作为主MMDB工作,因此在本实施例中还包括:组成集群的每个MMDB设置有数据库优先级别,数据库优先级用于指示集群内作为主MMDB工作的先后顺序。故而上述MMDB1的数据库优先级别是用于指示集群1内MMDB1作为主MMDB工作的优先级别。

  一般集群中可以包含有多个MMDB,故而若该集群1中可以还有MMDB2,MMDB3....执行方式与上述MMDB1相似,在此不赘述。

  步骤102,MMDB分别接收来自至少两个令牌控制器的包含内存数据库列表的消息,其中,内存数据库列表中包括根据至少一个节点内存数据库信息整理的集群内信息;

  本实施例以及下述实施例中,该集群内信息至少包括:组成集群的每个MMDB的节点MMDB信息、组成集群的每个MMDB的主从模式信息,以及发送MMDB列的令牌控制器的控制器优先级别。

  例如:令牌控制器1接收到集群1中MMDB1的节点MMDB信息以及其他MMDB的节点MMDB信息后,根据MMDB1的节点MMDB信息和以及其他MMDB的节点MMDB信息整理出MMDB列表,该MMDB列表中包括如:集群1中的每个MMDB的节点MMDB信息,每个MMDB的主从模式信息,以及令牌控制器1的控制器优先级别。同理,令牌控制器2也是如此。

  在具体的实施例中,令牌控制器1将包含该MMDB列表的消息发送到集群1中的每个MMDB,如MMDB1。令牌控制器2也将包含该MMDB列表的消息发送到集群1中的每个MMDB,如MMDB1。以便MMDB1等根据MMDB列表中的集群内信息处理集群内的事务。

  步骤103,MMDB根据内存数据库列表中的集群内信息处理集群内的事务。

  本实施例以及下述实施例中,该集群内事务至少包括:由MMDB进入或退出该集群,该集群内的MMDB故障,该故障的MMDB恢复故障,管理该集群的令牌控制器故障,该故障的令牌控制器恢复故障,有写入操作请求请求将数据信息写入MMDB等。

  当管理的集群的令牌控制器故障时,为了保证可以有其他令牌控制器接管该故障的令牌控制器的工作,并且无需闲置的设备以及复杂的双机软件,故而在本实施例提供的方法中,还包括:管理集群的每个令牌控制器设置有控制器优先级别,控制器优先级别用于指示集群内优先作为主令牌控制器工作的先后顺序。故而上述令牌控制器1上也设置有控制器优先级别,该级别用于指示集群1内令牌控制器1作为主令牌控制器工作的优先级,主令牌控制器即相当于主令牌控制器,非工作的从令牌控制器相当于从令牌控制器。同理,令牌控制器2也是如此。

  因为MMDB会接收到多个令牌控制器发送过来的,MMDB列表,为了降低方法的难度,在本实施例的方法中,还方法包括:当接收到的包含MMDB列表的消息是来自至少两个令牌控制器中的主令牌控制器时,根据MMDB列表中的集群内信息处理集群内事务包括:

  以来自主令牌控制器的MMDB列表中的集群内信息为准处理集群内事务。即以主令牌控制器发送而来的MMDB列表为准,其他的从令牌控制器发送而来的MMDB列表作备用存储,以便主令牌控制器故障时,用作不时之需。

  例如:MMDB1接收到令牌控制器1包含MMDB列表的消息,该MMDB列表中包括根据集群1中MMDB1及其他多个MMDB的节点MMDB信息整理的集群内信息,如:集群1中的每个MMDB的节点MMDB信息,每个MMDB的主从模式信息,以及令牌控制器1的控制器优先级别。同理,MMDB接收到令牌控制去2的包含MMDB列表的消息,该列表中包含根据集群1中MMDB1及其他多个MMDB的节点MMDB信息整理的集群内信息,如:集群1中的每个MMDB的节点MMDB信息,每个MMDB的主从模式信息,以及令牌控制器2的控制器优先级别。设令牌控制器1的控制器优先级别最高,为主令牌控制器,因此MMDB1将以令牌控制器1的MMDB列表为准,从令牌控制器,即令牌控制器2的MMDB作为备份保存。

  需要说明的是,本实施例中提供的非工作的令牌控制器所在的设备并非闲置,也就说,即便是作为非工作的令牌控制器也不会不工作,等待主令牌控制器故障,并接替其工作,故而非工作的令牌控制器也是正常工作的设备(即热机),因此不会产生需要购置多台设备的问题,也不需要采用双机软件控制。

  在本实施例提供的方法中,通过与令牌控制器的交互获取到的MMDB列表,并根据该列表处理如设备故障,或写入操作请求等集群事务的技术手段,可解决现有技术中采用双机软件处理故障时产生的需要冷机备份,过程复杂,易故障,可靠性差的技术问题,进而取得了可实现热机备份,无需双机软件操控,不易故障,可靠性较高的技术效果。

  本实施例提供一种分布式MMDB的实现方法,在该方法中,包括一个分布式MMDB集群,该集群中包括至少两个以上的MMDB,以及管理该集群中MMDB的至少两个以上的令牌控制器,并且MMDB既可以与令牌控制器合设在相同设备,也可以部署在不同的设备上,其中,扩展各个MMDB与令牌控制器间的通信协议,包括:

  每个令牌控制器设置有一个名称(该名称在集群内唯一),设置有在集群中唯一的控制器优先级别,设置有该集群中每个MMDB的地址信息;每个MMDB设置有一个名称(该名称在集群内唯一),设置有在集群中唯一的数据库优先级别,以及设置有管理该集群的每个令牌控制器的地址信息。

  如图2所示的场景,描述一种MMDB在登入或保持心跳或退出该集群时,分布式数据库的实现方法。包括:

  (一)当有MMDB登入集群时,该MMDB启动后向每个令牌控制器均注册,下面以该MMDB是MMDB1为例进行描述,如图3所示,包括:

  步骤201,MMDB1向每个令牌控制器发送注册消息,以便与每个令牌控制器建立连接,该注册消息包含MMDB1的节点MMDB信息,具体可以包括:MMDB1名称,MMDB1的IP地址,MMDB端口,MMDB1的数据库优先级别等。

  步骤202,令牌控制器在接收到该注册消息后,将包含该集群的集群内信息的MMDB列表在集群内广播,以便响应MMDB1,同时将MMDB1加入该集群的这一状态通知集群中的其他MMDB。这样,每个在网的MMDB都可以获知新加入的MMDB,并且根据新加入的MMDB的控制器优先级别进行调整。

  其中,该MMDB的列表包括:每个MMDB的名称,IP地址及端口,主从模式信息,以及本令牌控制器的控制器优先级别。这里主从模式信息可以包括了本网络中,哪个令牌控制器是主令牌控制器,哪些令牌是从令牌控制器等。

  如图4所示,(二)当MMDB1登入集群后,需要与令牌控制器保存心跳

  步骤301,MMDB1定时向所有令牌控制器发起心跳消息,该心跳消息包括MMDB1的节点MMDB信息。

  上述所有令牌控制器包括令牌控制器1,令牌控制器2和令牌控制器3。

  该MMDB信息具体可参照下表一

  MMDB名称 MMDB IP地址 MMDB端口 MMDB优先级别

  表一

  其中,MMDB名称:MMDB1集群内唯一名称

  MMDB IP地址:MMDB1集群内IP地址

  MMDB端口:MMDB1集群IP端口号

  MMDB优先级:MMDB的控制器优先级,可由1开始增加,数字越小,优先级越高。

  步骤302,各令牌控制器接收到该MMDB1的心跳消息后,广播包含MMDB列表的响应消息到集群中的所有MMDB。

  每个MMDB接收到MMDB列表后均保存该列表,并根据定时接收到的心跳消息时时更新MMDB列表中的集群内信息。

  该MMDB列表具体可参照下表二

  表二

  其中,MMDB名称:分布式MMDB系统内唯一名称

  MMDB IP地址:分布式MMDB系统内IP地址

  MMDB端口:分布式MMDB系统IP端口号

  MMDB优先级:MMDB数据库优先级,可由1开始增加的整数,数字越小,优先级越高。

  属性:该MMDB的主从模式信息,由令牌控制器计算指定。

  令牌控制器的优先级别:广播该MMDB列表的令牌控制器的控制器优先级别。

  上述实施例仅以MMDB1为例描述了其定时发送心跳消息与令牌控制器保持交互的过程,实际上,该过程是每个MMDB均执行的步骤,具体执行方式与MMDB1类似,在此不赘述。

  每个MMDB通过上述注册及上述与令牌控制器的心跳流程,可以与令牌控制器交互彼此信息,了解集群中各MMDB以及各令牌控制器的状况获取到:

  所有令牌控制器的信息,包括每个令牌控制器的控制器优先级;

  集群中所有MMDB,每个MMDB名称,IP地址及端口号及其主从模式信息。

  MMDB只以控制器优先级最高的主令牌控制器的MMDB列表为准,其它级别令牌控制器播报的集群MMDB列表数据,仅做备份,在主令牌控制器发生故障心跳丢失时,MMDB选择一个控制器优先级次高的令牌控制器作为主令牌控制器,并将其发来的MMDB列表生效。

  (三)当有MMDB1退出集群时,下面以该MMDB是MMDB1为例进行描述,参照图3,该MMDB1退出前向每个令牌控制器均注销,因此MMDB1向每个令牌控制器发送注销消息以便与每个令牌控制器撤销连接,注销消息包含MMDB的节点MMDB信息。具体执行过程与注销时相似。

  参照图5所示的令牌控制器故障的场景,如果在一段时间内,MMDB没有收到某令牌控制器发送过来的MMDB列表,或者如果令牌控制器也定时发送心跳消息到MMDB,那么当一段时间内,MMDB没有接到该令牌控制器的心跳消息,则MMDB可以认为该令牌控制器故障,一台令牌控制器发生故障时,主要包括以下两种情况:

  发生故障的令牌控制器的控制器优先级别最高,即主令牌控制器故障,但是其它令牌控制器工作正常,即从令牌控制器未故障,此时需要由新的令牌控制器作为主令牌控制器接管该故障的令牌控制器的工作;

  发生故障的控令牌制器的控制器优先级别不是最高,即从令牌控制器故障,此时,因为只有优先级最高的令牌控制器是工作的主令牌控制控制器,其它优先级的令牌控制器只作热备份用,所以MMDB可以不作任何特殊处理。

  因此,本实施例提供的分布式MMDB的实现方法,是用于当集群内的事务为:至少两个令牌控制器中的一个令牌控制器故障时,如图6所示,MMDB根据上述MMDB列表中的集群内信息处理集群内的事务主要包括如下步骤:

  步骤601,MMDB根据当前最新的MMDB列表中的集群内信息确定故障的令牌控制器的控制器优先级别;

  步骤602,如果故障的令牌控制器的控制器优先级别为最高控制器优先级别,则执行步骤603;否则,执行步骤604;

  步骤603,MMDB根据集群内信息从故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。

  步骤604,结束本流程。

  具体地,以MMDB是MMDB1为例,举例来说MMDB1发现令牌控制器1故障,并根据之前该令牌控制器1发送过来的MMDB列表中的集群内信息确定该令牌控制器1的控制器优先级别,假设该控制器优先级别为A。

  如果上述A是最高控制器优先级别,则代表故障的令牌控制器1是工作的主令牌控制器,因此需要重新确定主令牌控制器,故而MMDB1根据MMDB列表中的集群内信息从除令牌控制器1以外的其他有效的从令牌控制器中选择出控制器优先级别次高的令牌控制器2,并以该令牌控制器2作为新的主令牌控制器,此后将以令牌控制器2发送过来的MMDB列表为准进行事务处理;如果上述A不是最高控制器优先级别,则代表故障的令牌控制器1是从令牌控制器,不会对集群带来过大的影响,因此可不采取特殊处理而结束流程。在这里,假设控制器优先级别A为最高控制器优先级别来进行说明。

  在本实施例提供的方法中,当有令牌控制器故障时,MMDB可根据该故障的令牌控制器的优先级别判断是否为主令牌控制器,若判定是,则根据MMDB列表中的集群内信息可选择出控制器优先级别次高的令牌控制器作为新的主令牌控制器,进而保证了主令牌控制器故障时,可以有从令牌控制器迅速的接替原主令牌控制器的工作,并且由于该接替的令牌控制器也是热机,所以不会产生延时,也避免了冷机备份导致的购机成本高,双机软件复杂易故障的技术问题,故而取得了减少购机成本,简单方便,可靠性高的有益效果。

  上述描述了集群内事务是令牌控制器故障时,分布式MMDB的实现方法,那么相应地,下面将提供一种当该集群内事务是故障的令牌控制器恢复故障时,分布式MMDB的实现方法。

  如果故障的令牌控制器故障恢复重新启动,该出故障的令牌控制器,将通过注册流程重新加入集群中,因此MMDB能够重新接收到该故障的令牌控制器发送而来的MMDB列表,具体注册流程可参照上述图3对应的实施例,在此不赘述。如果一台故障的令牌控制器重新注册进入集群中,主要包括以下两种情况:

  故障恢复的令牌控制器的控制器优先级别比当前的主令牌控制器的控制器优先级别高,那么该故障恢复的令牌控制器在加入集群后,应该作为新的主令牌控制器使用;

  故障恢复的控令牌制器的控制器优先级别比当前的主令牌控制器的控制器优先级别低,那么该故障恢复的令牌控制器在加入集群后,将作为从令牌控制器使用,此时,因为只有优先级最高的令牌控制器是工作控制器,其它优先级的令牌控制器只作热备份用,所以MMDB可以不作任何特殊处理。

  如图7所示,当集群内故障恢复的令牌控制器重新进入集群内时,MMDB根据MMDB列表中的集群内信息处理集群内的事务包括:

  步骤701,在接收到来自故障恢复的令牌控制器的包含MMDB列表的消息后,MMDB根据MMDB列表中的集群内信息确定故障恢复的令牌控制器的控制器优先级别;

  具体地,以MMDB是MMDB1为例,MMDB1接收到故障恢复的令牌控制器1发送的包含MMDB列表的注册消息(也可以是心跳消息),并根据该MMDB列表中的集群内信息确定故障恢复的令牌控制器1的控制器优先级别,该控制器优先级别为A。

  步骤702,如果故障恢复的令牌控制器的控制器优先级别比当前主令牌控制器的控制器优先级别高,则执行步骤703;否则执行步骤705。

  具体地,举例来说,设当前主令牌控制器2的控制器优先级别是a,判断a是否比A的控制器优先级别低,如果a比A的级别低,则代表故障恢复的令牌控制器1应该可以作为新的主令牌控制器使用,执行步骤703;否则代表故障恢复的令牌控制器1是从令牌控制器,MMDB可以不做特殊处理,执行步骤705。

  步骤703,MMDB根据来自当前主令牌控制器的MMDB列表判断故障恢复的令牌控制器的MMDB列表的是否可用;如果判断故障恢复的令牌控制器的MMDB库列可以使用,则执行步骤704;否则在下一次接收到故障恢复的令牌控制器的MMDB列表时,继续执行步骤703。

  具体地,例如:MMDB1根据主令牌控制器2的MMDB列表核对故障恢复的令牌控制器1是否一致,即令牌控制器2的MMDB列表上的数据是否与令牌控制器1的MMDB列表上的数据一致,若不一致,说明该令牌控制器1还未与集群内所有MMDB建立正常心跳,不可以使用,因此需要对下一次心跳消息发送过来的MMDB列表进行继续核对,确定是否与令牌控制器1的MMDB列表数据一致;若一致,则说明该令牌控制器1已与集群内所有MMDB建立正常心跳,进入正常工作状态,因此该MMDB可以使用,可执行步骤704

  步骤704,MMDB选择故障恢复的令牌控制器作为新的主令牌控制器。

  具体地,例如:MMDB1切换到故障恢复的令牌控制器1,将故障恢复的令牌控制器1作为新的工作的主令牌控制器,并以该令牌控制器1发送过来的MMDB列表为准进行集群内事务处理,令牌控制器2作为从令牌控制器使用。

  步骤705,结束本流程。

  本实施例提供的方法,可保证控制器优先级别高的令牌控制器在故障恢复后继续作为主令牌控制器使用,因为优先级别高的令牌控制器其配置,或性能可能更优越,更适合作为主令牌控制器工作,故而在故障恢复后,可继续使用该性能优越的令牌控制器作为主令牌控制器的技术方案,有助于保证令牌控制器的处理能力,进而提高可靠性。

  如图8所示,提供一种当有写入操作请求时,分布式MMDB的实现方法,在分布式MMDB的集群中,主MMDB已从来自令牌控制器的消息中获得集群内的MMDB列表,那么当集群内的事务为:接收到写入操作请求时,根据MMDB列表中的集群内信息处理集群内的事务包括:

  步骤801,主MMDB根据写入操作请求更新本地MMDB中的数据信息;

  具体地,主MMDB根据写入操作请求中的插入,删除,更新等操作内存更新本地MMDB中的数据信息,并对每个写入操作请求按接收到的顺序添加操作序号。

  步骤802,主MMDB根据MMDB列表中的集群内信息将写入操作请求更新到从MMDB,以便从MMDB根据写入操作请求更新其本地MMDB中的数据信息

  具体地,主MMDB在更新完本地MMDB后,将该写入操作请按照各从MMDB数据库优先级高低由先到后的顺序,发送到各从MMDB,可确保数据库优先级高的从MMDB先收到该写操作请求,收到该写操作请求的从MMDB根据写入操作请求中的插入,删除,更新等操作内存更新本地MMDB中的数据信息,并同样对每个接收到的写入操作请求按接收到的顺序添加操作序号。例如:从MMDB1接收到第五个写入操作请求,故而添加序号5到更新后的MMDB1的数据信息上,从MMDB2接收到该第五个写入操作请求,添加序号5到更新后的MMDB2的数据信息上。

  一般MMDB的可靠性是这样保证的:如果一台从MMDB发生故障,对MMDB所属集群没有大的影响,仅仅影响集群MMDB并发查询效率,增加一个从MMDB,效率就恢复。但是如果主MMDB发生故障,这时整个集群就没有MMDB能够执行写操作的数据库,因此这样的故障是必须解决的。在本实施例中,当集群事务为:至少一个MMDB中其中某一MMDB故障时,如图9所示,分布式MMDB的实现方法包括:

  步骤901,令牌控制器根据MMDB列表中集群内信息确定故障的MMDB的数据库优先级别;

  例如:令牌控制器1(可以是工作的主令牌控制器,也可以是从令牌控制器)根据MMDB列表中的集群内信息,确定故障的MMDB1的数据库优先级别,设故障的MMDB1的数据库优先级别为B。

  步骤902,如果故障的MMDB的数据库优先级别为最高控制器优先级别,则执行步骤903;否则执行步骤904;

  步骤903,令牌控制器根据集群内信息从故障的MMDB以外的其它MMDB中选择当前数据库优先级别最高的MMDB作为新的主MMDB,并根据选择过程更新MMDB列表中的主从模式信息。

  步骤904,令牌控制器发送该MMDB列表到集群中的各MMDB。

  举例来说,如果令牌控制器1确定B为最高数据库优先级别,则代表MMDB1为主MMDB,故而需要由新的MMDB接管该MMDB1的工作,因此根据集群内信息从除MMDB1以外的其他从MMDB中选择出当前数据库优先级别最高的MMDB2,即与B相比,数据库优先级别次高的MMDB2作为新的主MMDB接替MMDB1的工作,并根据选择出MMDB2的过程更新MMDB列表,包括更新MMDB2的主从模式信息,即将MMDB2由“从”改为“主”,标识MMDB1故障等。并发送该更新后的MMDB列表到集群中的各MMDB,成为新的主MMDB的MMDB2将接管MMDB1的工作,如执行写操作等;如果令牌控制器1确定B不是最高数据库优先级别,则代表MMDB1为从MMDB,故而可以无需采取特殊处理,仅在发送的MMDB列表中标识MMDB1故障即可。

  在本实施例中,令牌控制器会可在各从MMDB中选择一个MMDB,作为新的主MMDB,并通过广播MMDB列表的方式通知集群中的各MMDB。当从MMDB接收到写入操作请求后,将转发到新的主MMDB;新的主MMDB根据该写入操作请求更新数据信息后,在将该写入操作请求同步各从MMDB。但这里有个限制:我们应该主动选择哪一个MMDB为新的主MMDB。一般在一个集群内会部署若干MMDB,但承载这些MMDB的设备能力不一样,有的设备CPU及内存性能更好,成本很高,我们更希望用这样的设备承担MMDB写操作,因为写操作是读操作性能的四分之一左右,因此为了实现自动的完成故障切换的操作过程,必须确定原则。为此,按承载MMDB设备的性能的高到低或其它因素,为各设备安装的MMDB配置一个数据库优先级。令牌控制器能够动态选择数据库优先级别最高的MMDB,将其指定为主MMDB使用,并广播通知这一指定到集群内各MMDB,即可降低手工切换带来的延时,也可提高分布式MMDB的可靠性。

  上面描述了当有MMDB故障时,分布式MMDB的实现方法,那么下面将继续介绍当故障的MMDB恢复,即MMDB为成为故障恢复的MMDB时,本实施例提供的分布式MMDB的实现方法如图10所示,包括:

  步骤1001,故障恢复的MMDB向令牌控制器发送包含其节点MMDB信息的消息,令牌控制器在接收来自故障恢复的MMDB的包含节点内存数据信息的消息后,根据故障恢复的MMDB的节点MMDB信息确定故障恢复的MMDB的数据库优先级别,并将该MMDB的节点信息整理到MMDB列表中,发送到每个MMDB。

  例如:故障恢复的MMDB1加入集群,首先向令牌控制器1(该令牌控制器1可以是主令牌控制器,也可以是从令牌控制器)注册。注册消息中包括MMDB1的节点MMDB信息。令牌控制器1收到该注册消息后,确定MMDB1的数据库优先级别,因为当前集群中已有主MMDB2正常工作,所以即便MMDB1的数据库优先级别比MMDB2的数据库优先级别高,令牌控制器1也不会立刻将MMDB1选择为新的主MMDB,因为需要MMDB1先完成数据信息更新,当MMDB1中的数据信息与当前主MMDB2数据信息一致时,才能被选择为新的主MMDB,故而,令牌控制器1仅需将MMDB1的节点MMDB信息整理到MMDB列表中,并将该列表发送到每个MMDB。

  步骤1002,如果故障恢复的MMDB的数据库优先级别比当前主MMDB的数据库优先级别高,则该故障恢复的MMDB根据MMDB列表中集群内信息向主MMDB发送数据更新请求,数据更新请求中包括故障恢复的MMDB中最后记录的数据信息的操作序号,以便当前主MMDB返回接续操作序号的数据信息;否则,该故障恢复的MMDB可无需采取特殊处理,不进行下述步骤,而是结束本流程。

  例如:接收到令牌控制器1发送的MMDB列表的MMDB1,根据集群内信息获知当前集群内的主MMDB是MMDB2。

  如果故障恢复的MMDB1的数据库优先级别比当前主MMDB2的数据库优先级别高,则MMDB2向MMDB2发送数据更新请求,该数据更新请求中包括MMDB1中最后记录的数据信息的操作序号。

  如果故障恢复的MMDB1的数据库优先级别比当前主MMDB2的数据库优先级别低,MMDB1可直接结束本流程。

  步骤1003,当前主MMDB在收到该数据更新请求后,返回接续操作序号的数据信息到该故障恢复的MMDB;

  例如:当前的主MMDB2接收到数据更新请求中的操作序号是10,则代表故障恢复的MMDB1在故障前最后执行的写入操作的操作序号是10。故而MMDB2将操作序号11到当前最新的操作序号30的数据信息发送到MMDB1。

  步骤1004,该故障恢复的MMDB根据返回的接续操作序号的数据信息更新故障恢复的MMDB的本地MMDB,并发送更新完成响应到主MMDB以便主MMDB执行退出主MMDB模式的处理。

  例如:故障恢复的MMDB1接收到当前主MMDB2返回的数据信息后,更新MMDB1的本地MMDB,完成数据同步过程,并发送更新完成响应消息到MMDB2。

  步骤1005,该当前主MMDB接收到该更新完成响应消息后,执行退出主MMDB模式的处理,包括:该当前主MMDB向令牌控制器发起退出主MMDB模式的请求,同时将本地写功能禁止,一旦有新的写入操作请求,转给上述故障恢复的,也是数据库优先级最高的MMDB。

  例如:当前主MMDB2接收到更新完成响应消息后,向令牌控制器1发起退出主MMDB模式的请求,同时将MMDB2的本地写功能禁止,一旦有新的写入操作请求,转给上述故障恢复的MMDB1。

  步骤1006,令牌控制器在当前主MMDB的退出主MMDB模式后,选择故障恢复的MMDB为新的主MMDB,将故障恢复的MMDB为新的主MMDB的主从模式信息更新到MMDB列表中,并将该MMDB列表广播给每个MMDB,每个MMDB可通过该MMDB列表获知当前主MMDB已被切换为新的MMDB。

  例如:令牌控制器1在当前主MMDB2的退出主MMDB模式后,选择故障恢复的MMDB1为新的主MMDB。将该信息整理到MMDB列表,并广播该MMDB列表给每个MMDB,每个MMDB获知当前主MMDB已被切换为MMDB1,此后,写入操作请求由最高优先数据库级MMDB1执行。集群内其它MMDB收到写入操作请求,都将转给MMDB1执行。

  在本实施例提供的方法中,当数据库优先级最高的MMDB故障恢复,重新启动时向令牌控制器注册,此刻还不能立即将其选择为主MMDB,先要完成数据信息复制过程,只能当前主MMDB同步数据到该数据库优先级最高MMDB并达到数据一致时,该当前主MMDB才会向令牌控制器申请放弃主席。这时令牌控制器重新将新注册的数据库最高优先级的MMDB确定为主MMDB并广播MMDB列表到集群内所有MMDB。因此可实现性能优越的MMDB在故障恢复后仍能再次作为主MMDB使用的目的。

  本实施例提供一种MMDB,如图11所示,该MMDB包括:发送模块11,接收模块12,处理模块13。

  发送模块11,用于发送包含节点MMDB信息的消息到至少两个令牌控制器;接收模块12,用于分别接收来自至少两个令牌控制器的包含MMDB列表的消息,其中,MMDB列表中包括根据至少一个节点MMDB信息整理的集群内信息;处理模块13,用于根据MMDB列表中的集群内信息处理集群内的事务。

  在发明的另一本实施例中,如图12所示,在该MMDB中,处理模块13可以包括:故障确定单元131,第一选择单元132。

  故障确定单元131,用于当有令牌控制器故障时,根据MMDB列表中的集群内信息确定故障的令牌控制器的控制器优先级别;

  第一选择单元132,用于当故障确定单元131确定故障的令牌控制器的控制器优先级别为最高控制器优先级别时,根据集群内信息从故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。

  如图12,处理模块还可以包括:恢复确定单元134,可用确定单元135,第二选择单元136。

  恢复确定单元134,用于当有故障恢复的令牌控制器重新进入集群内时,根据接收模块接收到的来自故障恢复的令牌控制器的MMDB列表中的集群内信息确定故障恢复的令牌控制器的控制器优先级别;

  可用确定单元135,用于当恢复确定单元134确定故障恢复的令牌控制器的控制器优先级别比当前主令牌控制器的控制器优先级别高时,根据来自当前主令牌控制器的MMDB列表确定故障恢复的令牌控制器的MMDB列表的可用性;

  第二选择单元136,用于当时可用确定单元135确定定故障恢复的令牌控制器的MMDB列具有可用性时,选择故障恢复的令牌控制器作为新的主令牌控制器。

  如图12,处理模块还可以包括:写入单元133,同步恢复单元137。

  写入单元133,用于在处于主MMDB状态时,接收写入操作请求,并根据写入操作请求更新本地MMDB中的数据信息,再根据MMDB列表中的集群内信息将写入操作请求更新到从MMDB,以便从MMDB根据写入操作请求更新其本地MMDB中的数据信息。

  同步恢复单元137,用于在数据库优先级别比当前主MMDB的数据库优先级别更高时,根据MMDB列表中集群内信息向主MMDB发送数据更新请求,数据更新请求中包括更高的MMDB中最后记录的数据信息的操作序号,以便主MMDB返回接续操作序号的数据信息,再根据返回的接续操作序号的数据信息更新本地MMDB的数据信息,并发送更新完成响应到主MMDB,以便主MMDB执行退出主MMDB模式的处理。

  本实施例提供的MMDB可以与令牌控制器合设在同一设备上,也可以部署在不同的设备上,组网十分灵活。不需要用Active-Standby双机部署,不用执行双机切换动作,较简单,不易故障,切换过程可是自动完成,可避免手动切换产生的延时,提高了分布式MMDB的可靠性。

  本实施例提供一种令牌控制器,如图13所示,该令牌控制器包括:接收模块21,获取模块22,发送模块23。

  接收模块21,用于接收来自至少一个MMDB的包含节点内存数据信息的消息;获取模块22,用于根据节点MMDB信息获取MMDB列表,其中MMDB列表中包括根据至少一个节点MMDB信息整理的集群内信息;发送模块23,用于将包含MMDB列表的消息发送到至少一个MMDB,以便至少一个MMDB根据MMDB列表中的集群内信息处理集群内的事务。

  在本实施例中,如图13所示,该令牌控制器还包括:故障确定单元24,第一选择单元25。

  故障确定单元24,用于当至少一个MMDB中其中一MMDB故障时,根据MMDB列表中集群内信息确定故障的MMDB的数据库优先级别;

  第一选择单元25,用于当故障确定单元24确定故障的MMDB的数据库优先级别为最高控制器优先级别时,根据集群内信息从故障的MMDB以外的其它MMDB中选择当前数据库优先级别最高的MMDB作为新的主MMDB。

  进一步地,该令牌控制器还可以包括:恢复确定单元26,第二选择单元27。

  恢复确定单元26,用于在从故障恢复的MMDB接收到包含节点内存数据信息的消息后,根据故障恢复的MMDB的节点MMDB信息确定故障恢复的MMDB的数据库优先级别;

  第二选择单元27,用于当恢复确定单元26确定故障恢复的MMDB的数据库优先级别比当前主MMDB的数据库优先级别高时,在当前主MMDB的退出主MMDB模式后,选择故障恢复的MMDB为新的主MMDB。

  本实施例提供的令牌控制器适合部署在工作的设备上,即热机,因此,可避免部署复杂的双机软件到冷机,由此导致主备切换时启动冷机,产生延时的技术问题,进而取得了当需要进行令牌控制器切换时,可以减少延时,提高可靠性,降低购机成本的技术效果。

  本实施例提供一种分布式MMDB系统,如图2所示,包括:MMDB集群和令牌控制器集群,其中,MMDB集群包括至少两个令牌控制器,令牌控制器集群包括:至少一个MMDB;

  其中,每个MMDB,用于发送包含节点MMDB信息的消息到至少两个令牌控制器,并分别接收来自至少两个令牌控制器的包含MMDB列表的消息,其中,MMDB列表中包括根据至少一个节点MMDB信息整理的集群内信息,存储内测数据列表,并根据MMDB列表中的集群内信息处理集群内的事务;

  每个令牌控制器,用于接收MMDB的包含节点内存数据信息的消息,并根据节点MMDB信息获取MMDB列表,再将包含MMDB列表的消息发送到至少一个MMDB。

  本实施例提供的分布式MMDB系统,无需双机软件控制MMDB,无需主备双机方案,每个MMDB可通过与令牌控制器之间的交互获取MMDB列表,并根据MMDB列表处理集群内的事务,故而避免了为处理主备倒换等事务时产生的延时问题,降低了执行复杂度,无需提供闲置的备用设备,减少了购机成本,提高了分布式MMDB的可靠性。

  本实施例还提供一种分布式MMDB的实现方法,在该方法中,包括至少两个站点,第一站点和第二站点,每个站点中部署至少一个MMDB集群,和管理MMDB集群的令牌控制器集群。其中,每个MMDB集群由多个MMDB组成,每个令牌控制器集群由多个令牌控制器组成,且每个令牌控制器上配置了异地站点的令牌控制器的IP地址及端口。

  因为一个MMDB只能属于一个MMDB集群,并且写操作请求仅能在其所属MMDB集群内的主MMDB上操作,故而为了保证对其所属集群外的MMDB不进行复制,因此本实施例中,需要做如下工作:

  在执行本实施例的下述步骤前,扩展MMDB集群的定义

  1,将一个站点定义为一个域,域名全局唯一,例如:站点1的域名,即全局站点名为mmdb_Site1,站点2的域名,即全局站点名为mmdb_Site2;

  2,站点内的每个MMDB集群配置有集群名称,该名称为字符串,且在站点内唯一,该集群的MMDB全局集群名称是该集群名称与所属站点的全局站点名的组合,格式为:集群名称@全局站点名。

  3,站点内的每个令牌控制器都有令牌名称,该名称为字符串,且在站点内唯一,例如mmdb_ring1,该令牌控制器的全局名称是该令牌控制器在站点内的令牌名称与其所属站点的全局站点名的组合,格式为:令牌名称@全局站点名,例如:“mmdb_ring1@mmdb_Site1”。

  4,站点内的每个MMDB都有内存名称,该内存名称为字符串,且在站点内唯一,例如mmdb1,该MMDB的全局名称是该站点内名称与站点域名组合,格式为:MMDB名@站点域名,例如:“mmdb1@mmdb_Site1”

  综上,在本实施例中,每个站点配置有全局站点名;

  站点中的每个MMDB集群配置有集群名称,集群名称与全局站点名组合成MMDB集群的全局集群名称;

  站点中的每个令牌控制器配置有令牌名称,令牌名称与全局站点名组合成令牌控制器的全局令牌器名称;

  站点中的每个MMDB配置有内存名称,内存名称与全局站点名组合成MMDB的全局内存名称。

  故而,通过比较的全局站点名这个后缀,,可以判断MMDB或者令牌控制器是本地站点还是异地站点,并且还可根据@后面的全局站点名区分不同站点。

  进一步的,在MMDB集群中的每个MMDB上设置数据库优先级别,还可以在每个令牌控制器上设置控制器优先级别,具体该设置出的数据库优先级别和控制器优先级别在站点内的实施方式可参考上述图1至图10所对应的实施例,在此不赘述。

  在做了上述扩展以及相应部署后,如图14所示,该方法主要包括:

  步骤1401,第一站点的MMDB发送包含节点MMDB信息的消息到第一站点的令牌控制器;

  具体地,第一站点的每个MMDB发送包含其节点MMDB信息的消息到第一站点的令牌控制集群,即每个令牌控制器。该包含其节点MMDB信息的消息可以是需要周期性发送的心跳消息,也可以是在加入该MMDB集群时发送的注册消息。

  上述节点MMDB信息本实施例以及下述实施例中至少包括:所属集群名称,本地MMDB的名称,IP地址,端口,数据库优先级别。

  例如:第一站点的MMDB1发送包含MMDB1的节点MMDB信息的心跳消息到第一站点的令牌控制器1,其中,节点MMDB信息包括:MMDB1所属集群的名称,MMDB1的本地MMDB的名称,IP地址,端口,数据库优先级别。

  第一站点的MMDB2发送包含MMDB2的节点MMDB信息的心跳消息到第一站点的令牌控制器1,其中,节点MMDB信息包括:MMDB2所属集群的名称,MMDB2的本地MMDB的名称,IP地址,端口,数据库优先级别。第一站点的MMDB3同样如此。

  步骤1402,第一站点的令牌控制器从第二站点的令牌控制器接收包含第二站点的主MMDB信息的消息;

  具体地,如图16所示,第一站点的每个令牌控制器与第二站点的每个令牌控制器的通过心跳消息交互管理各自的MMDB集群的主MMDB信息,进一步的,还可以交互彼此的令牌控制器信息。也就是说,通过心跳消息,第一站点的每个令牌控制器可以获取到发送该心跳消息的第二站点令牌控制器的令牌控制器信息以及其管理的MMDB集群中主MMDB的信息。

  其中,令牌控制器信息包括:该令牌控制器所属站点的全局站点名,该令牌控制器的全局名称,该令牌控制器的控制器优先级别,该令牌控制器的IP地址和端口。

  其中,该主MMDB信息包括:主MMDB所属的集群的全局集群名称,主MMDB的全局内存名称,以及主MMDB的IP地址和端口。

  例如:站点1的令牌控制器1与站点2的令牌控制器1通过心跳消息交互,通过该交互,令牌控制器1获取到站点1的主MMDB信息,和令牌控制器2的令牌控制器信息。其中,站点1的主MMDB信息包括:主MMDB所属的集群的全局集群名称,主MMDB的全局内存名称,以及主MMDB的IP地址和端口;令牌控制器2的令牌控制器信息包括:站点2的全局站点名,令牌控制器2的全局名称,令牌控制器2的控制器优先级别,令牌控制器2的IP地址和端口。

  同理,令牌控制器2也可以的通过该交互获取到站点2的令牌控制器1的主MMDB信息,以及令牌控制器1的令牌控制器信息。

  步骤1403,第一站点的令牌控制器根据第二站点的主MMDB信息和第一站点的集群内信息获取第一站点的MMDB列表,其中,第一站点的集群内信息是根据来自第一站点的至少一个MMDB的节点MMDB信息整理而得;

  其中,上述集群内信息可至少包括:组成MMDB集群的每个MMDB的节点MMDB信息、组成MMDB集群的每个MMDB的主从模式信息,以及发送MMDB列的令牌控制器的控制器优先级别。

  例如:站点1的令牌控制器1根据上述来自站点2的令牌控制器2的主MMDB信息和站点1的集群内信息获取站点1的MMDB列表。其中,该站点1的MMDB列表中的集群内信息是根据来自站点1的多个MMDB的节点MMDB信息整理而得;

  并且,需要说明的是:根据站点2的令牌控制器2的主MMDB信息获取MMDB列表的具体意义是指:如果根据站点2的令牌控制器2的主MMDB信息确定如果该站点2的主MMDB不在该MMDB站点1的MMDB集群中,则将站点2的主MMDB作为站点1的MMDB集群中的从MMDB加入该站点1的MMDB集群。

  步骤1404,第一站点的令牌控制器将第一站点的MMDB列表发送到第一站点中的至少一个MMDB,以便MMDB根据MMDB列表处理站点间或站点内的事务。

  其中,上述站点间或站点内的事务是指:第一站点与第二站点之间的事务,或第一站点内的事务,具体可包括:第一站点的写入操作请求同步到第二站点,第二站点的写入操作请求同步到第一站点,第一站点或第二站点的主MMDB故障时的写入操作请求同步处理,第一站点接收到来自应用程序的写入操作请求处理等。

  例如:站点1的令牌控制器1将上述站点1的MMDB列表发送到站点1的MMDB1,MMDB2,MMDB3等,以便MMDB1,MMDB2,MMDB3根据该MMD列表处理站点1与站点2之间的事务,或者站点1内的事务。

  步骤1405,第一站点的MMDB从第一站点的令牌控制器获取第一站点的MMDB列表,其中,MMDB列表中包括作为从MMDB加入第一站点的第二站点的主MMDB信息,以及根据至少一个节点MMDB信息整理的第一站点的集群内信息;并根据MMDB列表处理站点间或站点内的事务。

  具体地,第一站点的MMDB获取到第一站点的MMDB列表,并根据该MMDB列表处理第一站点与第二站点间的事务,或者第一站点内的事务。

  例如:站点1的MMDB1(该MMDB1可以是任意的MMDB)从站点1的令牌控制器1(该令牌控制器1可以是任意的令牌控制器)获取站点1的MMDB列表,其中,该MMDB列表中包括:站点1根据MMDB集群中每个MMDB的节点MMDB信息整理的集群内信息,以及作为站点1该MMDB集群中的从MMDB加入的站点2的主MMDB的主MMDB信息。其中,集群内信息包括:每个MMDB的节点MMDB信息、每个MMDB的主从模式信息,以及发送MMDB列的令牌控制器的控制器优先级别;站点2的主MMDB的主MMDB信息包括:该主MMDB所属的集群的全局集群名称,该主MMDB的全局内存名称,以及该主MMDB的IP地址和端口。

  需要说明的是:上述步骤1401到步骤1405过程均是以站点1和站点2为例进行描述的,实际上还可以包括更多的站点,如站点3,站点4等,其它站点的工作方式与本实施例中的站点2相似,如步骤1405中,站点1接收的MMDB列表中还可以包括:作为站点1的从MMDB加入该MMDB集群的站点3的主MMDB信息等。

  并且上述步骤1401到步骤1405中根据MMDB列表处理站点间或站点内的事务之前的流程是以一个周期为例进行描述的,在实际应用中,站点1的令牌控制器与站点2的令牌控制器是周期性的通过心跳消息进行交互的,站点1的MMDB与站点1的令牌控制器也可以是周期性的通过心跳消息进行交互。

  在本实施例提供的方法中,通过站点间令牌控制器的交互获取彼此主MMDB信息,并将该对方的主MMDB信息整理到站点的MMDB列表中,再根据该MMDB列表处理站点间或站点内的数据同步等事务,因此解决了现有技术中必须通过运行同步软件管理复杂的数据同步的技术问题,进而降低了站点间数据同步的复杂度,在保证了站点的容灾能力的同时,提高了站点间的可靠性,适合应用在包含多个站点的大型分布式MMDB场景。

  如图15所示,当站点间或站点内的事务为:站点内的主MMDB接收到写入操作请求时,根据MDDB列表处理站点间或站点内的事务包括:

  步骤1501,在主MMDB接收到来自应用程序的写入操作请求时,第一站点内的主MMDB根据该写入操作请求更新主MMDB的数据信息;

  优选地,步骤1501可以通过如下方式实现:

  第一站点内的主MMDB在接收到来自应用程序的写入操作请求时,对接收到的写入操作请求添加操作序号,再根据该写入操作请求更新主MMDB的数据信息。

  步骤1502,第一站点根据写入操作请求更新各从MMDB的数据信息,其中,各从MMDB包括:根据集群内信息获取的第一站点中的从MMDB,以及根据主MMDB信息获取的第二站点中的主MMDB;

  具体地,步骤1502包括:第一站点根据写入操作请求更新各从MMDB的数据信息,其中,写入请求中携带写入操作所属站点的全局站点名以及写入操作请求的操作序号,以便各从MMDB根据全局站点名记录写入操作请求的操作序号。

  步骤1503,第二站点的主MMDB根据写入操作请求更新过数据信息后,根据写入操作请求更新第二站点的从MMDB的数据信息。

  具体地,步骤1503包括:第二站点的主MMDB根据第一站点的全局站点名将该写入操作请求存储到第二站点的主MMDB中用于存放第一站点的数据信息的位置,其中,在该位置中,该写入操作请求更新的数据信息对应的操作序号即是该写入操作请求中携带的操作序号。

  上述仅是以第一站点和第二站点为例进行描述,实际上还可以包括更多的站点,如第三站点,此时第三站点的执行方式与第二站点相似。

  例如:参照图17,站点1的主MMDB接收到来自应用程序的第100个写入操作请求,对该写入操作请求添加操作序号100,并该根据该写入操作请求更新主MMDB的数据信息,包括插入,删除,更新等写入操作;

  站点1根据站点1的MMDB列表中个从MMDB的IP地址和端口可将该写入操作请求同步到站点1的从MMDB1,从MMDB2,从MMDB3,该写入操作请求中携带站点1的全局站点名,操作序号100,以及插入,删除,更新;其中,从MMDB3以从MMDB的身份加入站点1的站点2的主MMDB,从MMDB4以从MMDB的身份加入站点1的站点3的主MMDB。

  从MMDB1根据该写入操作请求在从MMDB1中用于存储站点1的位置更新从MMDB1的数据信息,并将该部分的操作序号记录为100;从MMDB2根据该写入操作请求在从MMDB2中用于存储站点1的数据信息位置更新从MMDB2的数据信息,并将该部分的操作序号记录为100;同理,从MMDB3根据该写入操作请求在从MMDB3中用于存储站点1的数据信息的位置更新从MMDB3的数据信息,并将该部分的操作序号记录为100;从MMDB4根据该写入操作请求在从MMDB4中用于存储站点1的数据信息的位置更新从MMDB4的数据信息,并将该部分的操作序号记录为100;

  特别的,因为从MMDB3同时也是站点2的主MMDB,故而还会将该写入操作请求同步到站点2的各从MMDB,该写入操作请求中携带站点1的全局站点名,操作序号100,以及插入,删除,更新等写入操作;站点2的各从MMDB在接收到站点2的主MMDB,即MMDB3的写入操作请求后,站点2的各从MMDB根据该写入操作请求分别在各自用于存储站点1数据信息的位置更新对应的数据信息,并将该部分的操作序号记录为100;同理,因为从MMDB4同时也是站点3的主MMDB,故而还会将该写入操作请求同步到站点3的各从MMDB,站点3的各从MMDB在接收到站点3的主MMDB,即MMDB4的写入操作请求后,站点3的各从MMDB根据该写入操作请求分别在各自用于存储站点1数据信息的位置更新对应的数据信息,并将该部分的操作序号记录为100。

  在本实施例提供的方法中,第一站点中的主MMDB仅将写入操作请求同步到第二站点的主MMDB,再由第二站点的主MMDB负责将该写入操作请求同步到第二站点的各从MMDB,而不是分别同步给第二站点的主和各从MMDB,故而可减少站点间的数据流量,降低站点之间数据同步的复杂度,即可保证容灾性,有可提高站点间数据同步的可靠性。

  如图18所示,本实施例提供的方法,结合当站点间与站点内的事务为:第二站点的主MMDB变更时,在本实施例提供的方法中,第一站点的MMDB根据MMDB列表处理站点间或站点内的事务包括:

  步骤1801,第二站点的令牌控制器根据心跳消息可获知主MMDB故障,或者有比该主MMDB的数据库优先级别更高的MMDB加入第二站点的MMDB集群。

  例如:站点2的令牌控制器1(该令牌控制器1可以是主令牌控制器,也可以是从令牌控制器)接收不到当前MMDB集群中作为主MMDB工作的MMDB1的心跳消息,或者站点2接收到比MMDB1的数据库优先级别更高的MMDB2加入该MMDB集群的注册消息。

  步骤1802,第二站点的令牌控制器从MMDB集群中根据各MMDB的数据库优先级别选择出变更后的主MMDB,即新的主MMDB,并将该选出的结果指示在MMDB列表中,通过广播该MMDB列表通知第二站点该MMDB集群中各MMDB。

  例如:站点2的令牌控制器1根据MMDB列表中各MMDB的数据库优先级别选择出MMDB2为新的主MMDB,并将该选出的结果指示在MMDB列表中,发送到站点2MMDD集群中的各个MMDB,该各个MMDB即可获知MMDB2是新的主MMDB。

  步骤1803,第二站点中新的主MMDB将其MMDB最后记录的操作序号和主MMDB信息发送到第二站点的令牌控制器。该第二站点的令牌控制器将新的主MMDB最后记录的操作序号和新的主MMDB的主MMDB信息。

  例如:站点2的MMDB2作为主MMDB工作后,MMDB2最后记录的操作序号100和MMDB2的主MMDB信息发送到站点2的令牌控制器1。该站点2的令牌控制器1将MMDB2最后记录的操作信号100和主MMDB信息通知站点1的令牌控制器11(该令牌控制器11可以是站点1的主令牌控制器,也可以是站点1的从令牌控制器)。其中,主MMDB信息包括:MMDB2所属的MMDB集群的全局集群名称,MMDB2的全局内存名称,以及该MMDB2的IP地址和端口。

  步骤1804,第一站点的令牌控制器从第二站点的令牌控制器获取第二站点中故障的MMDB最后记录的操作序号和新的主MMDB的主MMDB信息,并将携带操作序号和新的主MMDB的主MMDB信息的消息发到第一站点的主MMDB。

  例如:站点1的令牌控制器11接收到站点2作为新的主MMDB工作的MMDB2最后记录的操作序号100和MMDB2的主MMDB信息,并将这些发送到站点1当前作为主MMDB工作的MMDB3。

  步骤1805,第一站点的主MMDB获取第二站点中变更后的主MMDB的主MMDB信息和第二站点的主MMDB最后记录的操作序号,并根据主MMDB信息和操作序号获取对应的写入操作的数据信息。

  例如:站点1中当前作为主MMDB工作的MMDB3接收到来自站点1的令牌控制器11发送的站点2新的主MMDB,即MMDB2最后记录的操作序号100后,根据MMDB2的全局集群名或全局内存名称获知该请求来自站点2,MMDB3中存储站点2数据信息的位置上获取到对应操作序号100之后的写入操作的数据信息。

  步骤1806,第一站点的主MMDB将写入操作的数据信息更新到第二站点新的主MMDB。

  例如:站点1的MMDB3将到的对应操作序号100之后的写入操作的数据信息发送到站点2的MMDB2,站点2的MMDB2根据该数据信息更新MMDB2的MMDB。

  在本发明提供的实施例中,分布式MMDB的构架可由多个站点构成,每个站点可部署至少一个分布式MMDB集群,MMDB集群主MMDB接收应用程序的写入操作请求,为每一个操作产生一个递增的唯一64位数据编号,该数据编号即为该写入操作请求的操作序号。主MMDB同步数据信息时,在请求更新的消息中必须附带此操作序号作为参数。并且,因为每个主MMDB同时又将作为其他站点MMDB集群中的一个从MMDB,接收该其他站点同步而来的数据信息,所以主MMDB必须记录操作编号和其他站点的全局站点名,进而完成本站点的数据更新过程,并将操作编号,写入操作请求及该写入操作请求所属的站点名同步给本站点中的从MMDB。这样,每个MMDB中除了记录了本MMDB集群的操作编号,还记录了其它站点中MMDBJ集群的(由全局站点名区分)操作编号。

  故而,站点1的主MMDB发生故障时,站点1的令牌控制器按本地MMDB数据库优先级重新选出一个新的主MMDB,新的主MMDB在收到令牌控制器的MMDB列表后,会将最后记录的操作序号等信息返回到该令牌控制器,该令牌控制器将此操作序号通知给其他站点的令牌控制器,由该其他站点的令牌控制器再传递给其MMDB集群中的主MMDB。主MMDB就可从此该操作序号断点处继续将数据信息同步到站点1的新的主MMDB,再有该新的主MMDB将这些数据信息同步到集群内的复制各从MMDB。由此,站点1可在主MMDB故障时,通过与其他站点的数据同步过程获取丢失的数据信息,并继续其职能,进而取得了减少数据同步过程中的复杂度,容灾能力强,可靠性高的技术效果。

  本实施例提供一种可选的MMDB,如图11所示,其中发送模块11,还可以发送包含节点MMDB信息的消息到第一站点的令牌控制器;接收模块12,还可以用于从第一站点的令牌控制器获取第一站点的MMDB列表,MMDB列表中包括作为从MMDB加入第一站点的第二站点的主MMDB信息,以及根据至少一个节点MMDB信息整理的第一站点的集群内信息;处理模块13,还可以用于根据MMDB列表处理站点间或站点内的事务。

  本实施例提供一种可选的MMDB,如图11所示,其中处理模块13还可以用于当该MMDB装置处于主MMDB状态时,接收写入操作请求,并根据写入操作请求更新各从MMDB的数据信息,其中,各从MMDB包括:根据集群内信息获取的第一站点中的从MMDB,以及根据主MMDB信息获取的第二站点中的主MMDB;以及还可以用于当写入操作请求来自第二站点的主MMDB时,根据第二站点的写入操作请求更新第一站点中从MMDB的数据信息。

  本实施例提供一种可选的MMDB,如图11所示,其中处理模块13还可以用于在接收到写入操作请求时,对接收到的写入操作请求添加操作序号;以及还用于在写入操作请求中携带写入操作所属站点的全局站点名以及写入操作请求的操作序号,以便各从MMDB根据全局站点名记录写入操作请求的操作序号。

  本实施例提供一种可选的MMDB,如图11所示,其中处理模块13还可以用于在第二站点的主MMDB变更时,获取第二站点中变更后的主MMDB的主MMDB信息和第二站点的主MMDB最后记录的操作序号,并根据主MMDB信息和操作序号获取对应的写入操作的数据信息,再将写入操作的数据信息更新到第二站点变更后的主MMDB。

  本实施例提供的MMDB装置无需同步软件的控制即可执行站点间数据同步的过程,在提高了容灾性的同时,也确保了可靠性,并且适用于大型跨站点分布式MMDB场景,可降低解决方案成本,提升产品竞力。

  本实施例提供一种可选的令牌控制器,如图13所示,其中接收模块21,还用于从第二站点的令牌控制器接收包含第二站点的主MMDB信息的消息;获取模块22,还用于根据第二站点的主MMDB信息和第一站点的集群内信息获取第一站点的MMDB列表,其中,第一站点的集群内信息是根据来自第一站点的至少一个MMDB的节点MMDB信息整理而得;发送模块23,还用于将第一站点的MMDB列表发送到第一站点的至少一个MMDB,以便MMDB根据MMDB列表处理站点间或站点内事务。

  本实施例提供一种可选的令牌控制器,如图13所示,故障确定单元24,还用于当第二站点的主MMDB变更时,从第二站点的令牌控制器获取第二站点中变更后的主MMDB最后记录的操作序号和主MMDB信息,并将携带操作序号和主MMDB的主MMDB信息的消息发到第一站点的主MMDB。

  本实施例提供的令牌控制器可替代同步软件控制站点间数据同步的过程,降低了站点间实现控制数据同步的复杂度,加强了容灾能力,提高了可靠性。

  如图19,本实施例提供一种站点系统,该系统中至少包括:第一站点61和第二站点62。

  第一站点61中的令牌控制器,用于从第二站点62的令牌控制器接收包含第二站点62的主MMDB信息的消息,并根据第二站点62的主MMDB信息和第一站点61的集群内信息获取第一站点61的MMDB列表,再将第一站点61的MMDB列表发送到第一站点61的MMDB;

  第一站点61中的MMDB,用于发送包含节点MMDB信息的消息到第一站点61的令牌控制器,并从第一站点61的令牌控制器获取第一站点61的MMDB列表,以及根据MMDB列表处理第一站点61间的事务,或第一站点61与第二站点62间的事务。

  其中,MMDB列表中包括:作为从MMDB加入第一站点61的第二站点62的主MMDB信息,以及根据节点MMDB信息整理的第一站点61的集群内信息。

  另外,第二站点中的MMDB和令牌控制器同样可以像第一站点中的MMDB和令牌控制器一样执行,以便完成第一站点与第二站点间或第二站点内的事务。

  在现有技术中,由同步应用程序操控不同站点间的数据同步,以便保证分布式MMDB的容灾性,但该过程复杂,可拓展性差,因此易故障,可靠性差,而本发明实施例提供的方案,采用两个不同的站点间可通过其令牌控制器的交互获取对方的主MMDB信息,并根据包含该信息的MMDB信息处理以及集群内信息处理站点间或站点内的事务的技术手段,可避免因采用同步应用软件带来的复杂度高,可拓展性差的技术问题,故而可以取得提供可能性,增强容灾能力的技术效果。

  通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以便得一台设备(可以是笔记本电脑等)执行本发明各个实施例的方法。

  以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

  内存数据库 2:

  一种内存数据库恢复方法和设备

  第一、技术领域

  本发明涉及互联网技术领域,尤其涉及一种内存数据库恢复方法和设备。

  第二、背景技术

  随着互联网的不断发展,对数据访问的速度要求也越来越高,内存数据库 因为其快速的数据访问能力,使其使用也变得越来越频繁。

  内存数据库是指将数据放在内存中直接操作的数据库。相对于磁盘,内存 的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能 够极大提高应用的性能。但是由于所有操作都是基于内存的操作,内存数据库 极其容易因系统问题导致数据被破坏或者丢失,特别是由于宕机导致的数据丢 失。

  现有技术中,通常根据数据库操作日志,即造成内存数据库数据改变的操 作(如增、删、改等操作)以及结果的日志记录,进行内存数据库恢复,即完 全根据数据库操作日志中的记录恢复内存数据库,但是该内存数据库恢复方案 中,内存数据库恢复效率较低,且当日志数据量比较大时,会造成较大的系统 负荷,影响系统性能。

  第三、发明内容

  本发明实施例所要解决的技术问题在于,提供一种内存数据库恢复方法和 设备。可以提高内存数据库恢复的效率,降低内存数据库恢复对系统性能的影 响。

  为了解决上述技术问题,本发明实施例提供了一种内存数据库恢复方法, 包括:

  接收内存数据库恢复指令;

  判断是否存在内存数据库实时镜像;

  当判断结果为存在时,判断数据库操作日志中是否包括所述内存数据库实 时镜像中未包括的数据;

  若包括,将所述数据库操作日志中包括的所述内存数据库实时镜像中未包 括的数据加载到所述内存数据库实时镜像中,并将该内存数据库实时镜像加载 到内存中,以恢复内存数据库;

  若未包括,将所述内存数据库实时镜像加载到内存中,以恢复内存数据库。

  相应地,本发明实施例还提供了一种内存数据库恢复设备,包括:

  接收模块,用于接收内存数据库恢复指令;

  第一判断模块,用于判断是否存在内存数据库实时镜像;

  第二判断模块,用于当所述第一判断模块的判断结果为存在时,判断数据 库操作日志中是否包括所述内存数据库实时镜像中未包括的数据;

  第一处理模块,用于当所述第二判断模块的判断结果为是时,将所述数据 库操作日志中包括的所述内存数据库实时镜像中未包括的数据加载到所述内存 数据库实时镜像中,并将该内存数据库实时镜像加载到内存中,以恢复内存数 据库;

  第二处理模块,用于当所述第二判断模块的判断结果为否时,将所述内存 数据库实时镜像加载到内存中,以恢复内存数据库。

  相应地,本发明实施例还提供了一种终端,包括如上所述的内存数据库恢 复设备。

  实施本发明实施例,具有如下有益效果:

  当接收到内存数据库恢复指令时,判断是否存在内存数据库实时镜像,当 存在内存数据库实时镜像时,进一步判断数据库操作日志中是否包括内存数据 库实时镜像中未包括的数据,当包括时,将数据库操作日志中包括的该内存数 据库实时镜像中未包括的数据加载到内存数据库实时镜像中,并将该内存数据 库实时镜像加载到内存中,以恢复内存数据库;当不包括时,将该内存数据库 实时镜像加载到内存中,以恢复内存数据库,提高了内存数据库恢复的效率, 降低了内存数据库恢复对系统性能的影响。

  第四、附图说明

  为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

  图1是本发明实施例提供的一种内存数据库恢复方法的流程示意图;

  图2是本发明实施例提供的另一种内存数据库恢复方法的流程示意图;

  图3是本发明实施例提供的另一种内存数据库恢复方法的流程示意图;

  图4是本发明实施例提供的一种内存数据库恢复设备的结构示意图;

  图5是本发明实施例提供的另一种内存数据库恢复设备的结构示意图;

  图6是本发明实施例提供的另一种内存数据库恢复设备的结构示意图;

  图7是本发明实施例提供的另一种内存数据库恢复设备的结构示意图;

  图8是本发明实施例提供的另一种内存数据库恢复设备的结构示意图;

  图9是本发明实施例提供的另一种内存数据库恢复设备的结构示意图;

  图10是本发明实施例提供的另一种内存数据库恢复设备的结构示意图;

  图11是本发明实施例提供的另一种内存数据库恢复设备的结构示意图。

  第五、具体实施方式

  下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造 性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

  如图1所示,为本发明实施例提供的一种内存数据库恢复方法的流程示意 图,可以包括以下步骤:

  步骤101、接收内存数据库恢复指令。

  本发明实施例中,内存数据库恢复指令可以包括运行指定程序的指令,即 当接收到运行指定程序的指令时,确定需要进行内存数据库恢复指令。

  作为一种可选的实施方式,上述指定程序可以配置为开机自启动,即当设 备开机(包括宕机后重新启动、用户主动选择重新启动设备、用户关机后重新 开机等)时,自动运行上述指定程序,从而触发内存数据库恢复。

  作为另一种可选的实施方式,上述指定程序也可以在接收到用户输入的启 动该指定程序的操作指令后运行,从而触发内存数据库恢复。

  举例来说,用户可以通过点击上述指定程序在设备显示界面中的快捷方式 图标,向设备输入启动该指定程序的指令,从而触发内存数据库恢复。

  其中,设备(下同)可以为任意应用内存数据库的设备,如其通常为服务 器(数据访问量较大),但也可以是其他用户终端(如PC机、手机、平板电脑 等),本发明实施例不做限定。

  步骤102、判断是否存在内存数据库实时镜像。并当判断结果为存在时,转 至步骤103。

  步骤103、判断数据操作日志中是否包括内存数据库实时镜像中未包括的数 据。若判断为是,转至步骤104;否则,转至步骤105。

  步骤104、将该数据操作日志中包括的内存数据库实时镜像中未包括的数据 加载到该内存数据库实时镜像中,并将该内存数据库实时镜像加载到内存中, 以恢复内存数据库。

  步骤105、将该内存数据库实时镜像加载到内存中,以恢复内存数据库。

  本发明实施例中,设备运行过程中,可以定时生成内存数据库实时镜像, 该内存数据库实时镜像是指内存数据库在磁盘中的备份,其数据格式与内存数 据库相同。

  举例来说,以设备为数据服务器为例,应用本发明实施例提供的技术方案 后,该数据服务器可以周期性地(如每半个小时、20分钟等)生成内存数据库 实时镜像。例如,假设以0点为起始时刻,数据服务器可以每隔半个小时将内 存数据库进行镜像,得到对应的内存数据库实时镜像。其中,数据服务器生成 数据库实时镜像时,可以对应记录该数据库实时镜像的生成时间。

  作为一种可选的实施方式,在本发明实施例中,设备生成最新的内存数据 库实时镜像时,可以覆盖之前的生成的内存数据库实时镜像,即设备中最多仅 存在一份内存数据库实时镜像。

  作为另一种可选的实施方式,在本发明实施例中,设备可以定时清除过期 的内存数据库实时镜像或不清除内存数据库实时镜像。

  举例来说,假设设备每隔半个小时生成一份内存数据库实时镜像,对于各 内存数据库实时镜像,可以设置一个有效时间,如2小时、或12小时等,当内 存数据库实时镜像过期时,设备可以清除该过期的内存数据库实时镜像。

  在该实施方式中,上述步骤103中,判断数据库操作日志中是否包括内存 数据库实时镜像中未包括的数据时,可以为判断数据库操作日志中是否包括生 成时间最新(最晚)的内存数据库实时镜像中未包括的数据。相应地,步骤104 和步骤105中,内存数据库实时镜像也是指生成时间最新(最晚)的内存数据 库实时镜像。

  本发明实施例中,当接收到内存数据库恢复指令时,并不会直接根据数据 库操作日志进行内存数据库恢复,而是会判断是否存在内存数据库实时镜像, 并当存在内存数据库实时镜像时,可以进一步判断数据库操作日志中是否包括 该内存数据库实时镜像中未包括的数据。

  具体的,可以根据数据库实时镜像的生成时间以及数据库操作日志中各记 录的时间(当设备检测到造成内存数据库中数据改变的操作时,在数据库操作 日志中生成相应的日志记录,并记录该日志记录的生成时间),判断数据库操作 日志中是否存在时间晚于该数据库实时镜像生成时间的记录,若存在,则判断 数据库操作日志中包括该内存数据库实时镜像中未包括的数据;若不存在,则 判断数据库操作日志中未包括该内存数据库实时镜像中未包括的数据。

  举例来说,当接收到内存数据恢复指令时,假设确定存在内存数据库实时 镜像,且该内存数据库实时镜像的生成时间为0:30,则可以进一步查询数据操 作日志中各记录的时间,若数据操作日志中存在时间晚于0:30的记录,如数据 操作日志中包括一条时间为0:40的日志记录(即在0:40发生了造成内存数据库 数据改变的操作),则判断数据操作日志中包括该内存数据库实时镜像中未包括 的数据;若数据操作日志中不存在时间晚于0:30的记录(即在0:30之后未发生 造成内存数据库数据改变的操作),则判断数据操作日志中未包括该内存数据库 实时镜像中未包括的数据。

  本发明实施例中,当数据库操作日志中包括内存数据库实时镜像中未包括 的数据时,可以将该数据库操作日志中包括的内存数据库实时镜像中未包括的 数据(增量数据)加载到内存数据库实时镜像中,并将该内存数据库实时镜像 (加载了增量数据的内存数据库实时镜像)加载到内存中,以恢复内存数据库; 当数据库操作日志中未包括内存数据库实时镜像中未包括的数据时,将该内存 数据库实时镜像加载到内存中,以恢复内存数据库。

  在图1所示的流程中,当接收到内存数据库恢复指令,且判断不存在内存 数据库实时镜像时,可以根据数据库操作日志进行内存数据库恢复,也可以通 过其它方式实现内存数据库恢复,本发明不做限定。

  如图2所示,为本发明实施例提供的另一种内存数据库恢复方法的流程示 意图,可以包括:

  步骤201、接收内存数据库恢复指令。

  本发明实施例中,内存数据库恢复指令可以包括运行指定程序的指令,即 当接收到运行指定程序的指令时,确定需要进行内存数据库恢复指令。

  作为一种可选的实施方式,上述指定程序可以配置为开机自启动,即当设 备开机(包括宕机后重新启动、用户主动选择重新启动设备、用户关机后重新 开机等)时,自动运行上述指定程序,从而触发内存数据库恢复。

  作为另一种可选的实施方式,上述指定程序也可以在接收到用户输入的启 动该指定程序的操作指令后运行,从而触发内存数据库恢复。

  举例来说,用户可以通过点击上述指定程序在设备显示界面中的快捷方式 图标,向设备输入启动该指定程序的指令,从而触发内存数据库恢复。

  步骤202、判断是否存在内存数据库实时镜像。若判断为是,转至步骤203; 否则,转至步骤206。

  步骤203、判断数据库操作日志中是否包括该内存数据库实时镜像中未包括 的数据。若判断为是,转至步骤204;否则,转至步骤205。

  步骤204、将该数据操作日志中包括的内存数据库实时镜像中未包括的数据 加载到该内存数据库实时镜像中,并将该内存数据库实时镜像加载到内存中, 以恢复内存数据库。

  步骤205、将该内存数据库实时镜像加载到内存中,以恢复内存数据库。

  本发明实施例中,设备运行过程中,可以定时生成内存数据库实时镜像, 该内存数据库实时镜像是指内存数据库在磁盘中的备份,其数据格式与内存数 据库相同。

  举例来说,以设备为数据服务器为例,应用本发明实施例提供的技术方案 后,该数据服务器可以周期性地(如每半个小时、20分钟等)生成内存数据库 实时镜像。例如,假设以0点为起始时刻,数据服务器可以每隔半个小时将内 存数据库进行镜像,得到对应的内存数据库实时镜像。其中,数据服务器生成 数据库实时镜像时,可以对应记录该内存数据库实时镜像的生成时间。

  作为一种可选的实施方式,在本发明实施例中,设备生成最新的内存数据 库实时镜像时,可以覆盖之前的生成的内存数据库实时镜像,即设备中最多仅 存在一份内存数据库实时镜像。

  作为另一种可选的实施方式,在本发明实施例中,设备可以定时清除过期 的内存数据库实时镜像或不清除内存数据库实时镜像。

  举例来说,假设设备每隔半个小时生成一份内存数据库实时镜像,对于各 内存数据库实时镜像,可以设置一个有效时间,如2小时、或12小时等,当内 存数据库实时镜像过期时,设备可以清除该过期的内存数据库实时镜像。

  在该实施方式中,上述步骤203中,判断数据库操作日志中是否包括内存 数据库实时镜像中未包括的数据时,可以为判断数据库操作日志中是否包括生 成时间最新(最晚)的内存数据库实时镜像中未包括的数据。相应地,步骤204 和步骤205中,内存数据库实时镜像也是指生成时间最新(最晚)的内存数据 库实时镜像。

  本发明实施例中,当接收到内存数据库恢复指令时,并不会直接根据数据 库操作日志进行内存数据库恢复,而是会判断是否存在内存数据库实时镜像, 并当存在内存数据库实时镜像时,可以进一步判断数据库操作日志中是否包括 该内存数据库实时镜像中未包括的数据。

  具体的,可以根据数据库实时镜像的生成时间以及数据库操作日志中各记 录的时间(当设备检测到造成内存数据库中数据改变的操作时,在数据库操作 日志中生成相应的日志记录,并记录该日志记录的生成时间),判断数据库操作 日志中是否存在时间晚于该数据库实时镜像生成时间的记录,若存在,则判断 数据库操作日志中包括该内存数据库实时镜像中未包括的数据;若不存在,则 判断数据库操作日志中未包括该内存数据库实时镜像中未包括的数据。

  举例来说,当接收到内存数据恢复指令时,假设确定存在内存数据库实时 镜像,且该内存数据库的生成时间为0:30,则可以进一步查询数据操作日志中 各记录的时间,若数据操作日志中存在时间晚于0:30的记录,如数据操作日志 中包括一条时间为0:40的日志记录(即在0:40发生了造成内存数据库数据改变 的操作),则判断数据操作日志中包括该内存数据库实时镜像中未包括的数据; 若数据操作日志中不存在时间晚于0:30的记录(即在0:30之后未发生造成内存 数据库数据改变的操作),则判断数据操作日志中未包括该内存数据库实时镜像 中未包括的数据。

  本发明实施例中,当数据库操作日志中包括内存数据库实时镜像中未包括 的数据时,可以将该数据库操作日志中包括的内存数据库实时镜像中未包括的 数据(增量数据)加载到内存数据库实时镜像中,并将该内存数据库实时镜像 (加载了增量数据的内存数据实时镜像)加载到内存中,以恢复内存数据库; 当数据库操作日志中未包括内存数据库实时镜像中未包括的数据时,将该内存 数据库实时镜像加载到内存中,以恢复内存数据库。

  步骤206、查询最新的内存数据库镜像。

  步骤207、判断数据库操作日志中是否包括该最新的内存数据库镜像中未包 括的数据。若判断为是,转至步骤208;否则,转至步骤209。

  步骤208、将该内存数据库操作日志中包括的该最新的内存数据库镜像中未 包括的数据加载到该最新的内存数据库镜像中,并将该最新的内存数据库镜像 加载的内存中,以恢复内存数据库。

  步骤209、将该最新的内存数据库镜像加载到内存中,以恢复内存数据库。

  本发明实施例中,设备运行过程中,除了可以定时生成内存数据库实时镜 像之外,还可以定时生成内存数据库镜像,该内存数据库镜像是指内存数据在 磁盘中的备份,其数据格式与内存数据库相同,其与内存数据库实时镜像的区 别在于,内存数据库镜像的备份间隔更长。

  举例来说,以设备为数据服务器为例,应用本发明实施例提供的技术方案 后,该数据服务器可以以第一预设周期(如12个小时、1天等)生成内存数据 库镜像,并以第二预设周期(如半个小时、20分钟等)生成内存数据库实时镜 像。例如,假设以0点为起始时刻,数据服务器可以每隔半个小时将内存数据 库进行镜像备份,得到对应的内存数据库实时镜像(即数据服务器可以在当天 的0:30、1:00、…、12:00、…、第二天0:00、第二天0:30…生成内存数据库实 时镜像);同时,数据服务器还可以每隔12小时将内存数据库进行镜像备份, 得到对应的内存数据库镜像(即数据服务器可以在当天的12:00、第二天0:00、 第二天12:00…生成内存数据库镜像)。其中,数据服务器生成内存数据库实时 镜像(内存数据库镜像)时,可以对应记录该内存数据库实时镜像(内存数据 库镜像)的生成时间,上述第一预设周期大于上述第二预设周期。

  作为一种可选的实施方式,在本发明实施例中,设备生成最新的内存数据 库镜像时,可以覆盖之前的生成的内存数据库镜像,即设备中最多仅存在一份 内存数据库镜像。

  作为另一种可选的实施方式,在本发明实施例中,设备可以定时清除过期 的内存数据库镜像或不清除内存数据库镜像。

  举例来说,假设设备每隔12个小时生成一份内存数据库镜像,对于各内存 数据库镜像,可以设置一个有效时间,如24小时、或48小时等,当内存数据 库镜像过期时,设备可以清除该过期的内存数据库镜像。

  本发明实施例中,当接收到内存数据库恢复指令,且判断不存在内存数据 库实时镜像时,可以判断是否存在内存数据库镜像,并当存在时,查询最新的 内存数据库镜像(即生成时间与当前时间的时间间隔最小的内存数据库镜像), 可以进一步判断数据库操作日志中是否包括该最新的内存数据库镜像中未包括 的数据。

  具体的,可以根据该最新的数据库镜像的生成时间以及数据库操作日志中 各记录的时间,判断数据库操作日志中是否存在时间晚于该最新的数据库镜像 生成时间的记录,若存在,则判断数据库操作日志中包括该最新的内存数据库 镜像中未包括的数据;若不存在,则判断数据库操作日志中未包括该最新的内 存数据库镜像中未包括的数据。

  举例来说,当接收到内存数据恢复指令,且判断不存在内存数据库实时镜 像时,假设确定存在内存数据库镜像,且最新的内存数据库镜像的生成时间为 12:00,则可以进一步查询数据操作日志中各记录的时间,若数据操作日志中存 在时间晚于12:00的记录,如数据操作日志中包括一条时间为12:40的日志记录 (即在12:40发生了造成内存数据库数据改变的操作),则判断数据操作日志中 包括该最新的内存数据库镜像中未包括的数据;若数据操作日志中不存在时间 晚于12:00的记录(即在12:00之后未发生造成内存数据库数据改变的操作), 则判断数据操作日志中未包括该最新的内存数据库镜像中未包括的数据。

  本发明实施例中,当数据库操作日志中包括该最新的内存数据库镜像中未 包括的数据时,可以将该数据库操作日志中包括的该最新的内存数据库镜像中 未包括的数据(增量数据)加载到该最新的内存数据库镜像中,并将该最新的 内存数据库镜像(加载了增量数据的内存数据库镜像)加载到内存中,以恢复 内存数据库;当数据库操作日志中未包括该最新的内存数据库镜像中未包括的 数据时,将该最新的内存数据库镜像加载到内存中,以恢复内存数据库。

  本发明实施例中,当需要恢复内存数据库,且判断不存在内存数据库实时 镜像、内存数据库镜像时,可以根据数据库操作日志进行内存数据库恢复,其 具体实现与现有方案中内存数据库恢复的方案相类似,在此不再赘述。

  如图3所示,为本发明实施例提供的另一种内存数据库恢复方法的流程示 意图,可以包括以下步骤:

  步骤301、以预设周期生成内存数据库镜像、内存数据库实时镜像,以及内 存数据库差异镜像。

  本发明实施例中,可以通过配置,使设备在运行过程中,以预设周期生成 内存数据库镜像、内存数据库实时镜像,以及内存数据库差异镜像。该内存数 据库差异镜像是指内存数据库在不同时刻的差异部分,例如,内存数据库在时 刻1与时刻2的差异部分,该内存数据库差异镜像可以根据数据库操作日志在 时刻1至时刻2这一时间段内的记录生成。其中,设备生成内存数据库差异镜 像时,可以对应记录该内存数据库差异镜像的生成时间

  举例来说,以设备为数据服务器,应用本发明实施例提供的技术方案后, 该数据服务器可以周期性地(如每5分钟、10分钟等)生成内存数据库差异镜 像。例如,假设以0点为起始时刻,在该起始时刻内存数据库中存在一份成绩 表,其中记录有学生A、B和C的成绩,如A:90分;B:95分;C:100分。 假设在0:05时,发生了对该成绩表的修改操作,如将A的成绩修改为95分, 删除C的成绩,则根据0:00至0:05这一时间段内内存数据库的差异可以生成一 份内存数据库差异镜像,该内存数据库差异镜像中记录有该时间段内内存数据 库中数据发生的变化,即“A的成绩由90分变为了95分;C的成绩被删除”。

  本发明实施例中,设备可以以第一预设周期生成内存数据库镜像,以第二 预设周期生成内存数据库实时镜像、以第三预设周期生成内存数据库差异镜像, 且第一预设周期大于第二预设周期,第二预设周期大于第三预设周期。

  例如,设备可以每隔24小时生成一份内存数据库镜像,每隔半个小时生成 一份内存数据库实时镜像,每隔10分钟生成一份内存数据库差异镜像。

  步骤302、接收内存数据库恢复指令。

  本发明实施例中,内存数据库恢复指令可以包括运行指定程序的指令,即 当接收到运行指定程序的指令时,确定需要进行内存数据库恢复指令。

  作为一种可选的实施方式,上述指定程序可以配置为开机自启动,即当设 备开机(包括宕机后重新启动、用户主动选择重新启动设备、用户关机后重新 开机等)时,自动运行上述指定程序,从而触发内存数据库恢复。

  作为另一种可选的实施方式,上述指定程序也可以在接收到用户输入的启 动该指定程序的操作指令后运行,从而触发内存数据库恢复。

  举例来说,用户可以通过点击上述指定程序在设备显示界面中的快捷方式 图标,向设备输入启动该指定程序的指令,从而触发内存数据库恢复。

  步骤303、判断是否存在内存数据库实时镜像。若判断为是,转至步骤304; 否则,转至步骤309。

  步骤304、判断数据库操作日志中是否包括该内存数据库实时镜像中未包括 的数据。若判断为是,转至步骤305;否则,转至步骤308。

  步骤305、判断是否存在数据库操作日志中包括的该内存数据库实时镜像中 未包括的数据对应的内存数据库差异镜像。若判断为是,转至步骤306;否则, 转至步骤307。

  步骤306、将该内存数据库差异镜像与内存数据库实时镜像合并为新的内存 数据库实时镜像,并转至步骤304。

  步骤307、将数据库操作日志中包括的内存数据库实时镜像中未包括的数据 加载的该内存数据库实时镜像中,并将该内存数据库实时镜像加载到内存中, 以恢复内存数据库。

  步骤308、将该内存数据库实时镜像加载到内存中,以恢复内存数据库。

  本发明实施例中,当接收到内存数据库恢复指令时,并不会直接根据数据 库操作日志进行内存数据库恢复,而是会判断是否存在内存数据库实时镜像, 并当存在内存数据库实时镜像时,可以进一步判断数据库操作日志中是否包括 该内存数据库实时镜像中未包括的数据。

  具体的,可以根据数据库实时镜像的生成时间以及数据库操作日志中各记 录的时间(当设备检测到造成内存数据库中数据改变的操作时,在数据库操作 日志中生成相应的日志记录,并记录该日志记录的生成时间),判断数据库操作 日志中是否存在时间晚于该数据库实时镜像生成时间的记录,若存在,则判断 数据库操作日志中包括该内存数据库实时镜像中未包括的数据;若不存在,则 判断数据库操作日志中未包括该内存数据库实时镜像中未包括的数据。

  举例来说,当接收到内存数据恢复指令时,假设确定存在内存数据库实时 镜像,且该内存数据库的生成时间为0:30,则可以进一步查询数据操作日志中 各记录的时间,若数据操作日志中存在时间晚于0:30的记录,如数据操作日志 中包括一条时间为0:40的日志记录(即在0:40发生了造成内存数据库数据改变 的操作),则判断数据操作日志中包括该内存数据库实时镜像中未包括的数据; 若数据操作日志中不存在时间晚于0:30的记录(即在0:30之后未发生造成内存 数据库数据改变的操作),则判断数据操作日志中未包括该内存数据库实时镜像 中未包括的数据。

  本发明实施例中,当判断数据操作日志中包括内存数据库实时镜像中未包 括的数据时,可以进一步判断是否存在数据库操作日志中包括的该内存数据库 实时镜像中未包括的数据对应的内存数据库差异镜像。

  具体的,可以根据自身记录的内存数据库实时镜像的生成时间,以及数据 库操作日志中当前的最后一条记录的时间,查询生成时间在该内存数据库实时 镜像的生成时间和数据库操作日志中当前的最后一条记录的时间之间的内存数 据库差异镜像;若查询到,判断存在数据库操作日志中包括内存数据库实时镜 像中未包括的数据对应的内存数据库差异镜像;若未查询到,判断不存在数据 库操作日志中包括的该内存数据库实时镜像中未包括的数据对应的内存数据库 差异镜像。

  举例来说,假设存在内存数据库实时镜像,且该内存数据库实时镜像的生 成时间为0:30,数据库操作日志中当前的最后一条记录的时间为0:45,则可以 查询是否存在生成时间在0:30~0:45之间的内存数据库差异镜像。假设查询到生 成时间为0:40的内存数据库差异镜像,则判断存在数据库操作日志中包括内存 数据库实时镜像中未包括的数据对应的内存数据库差异镜像;若未查询到生成 时间在0:30~0:45之间的内存数据库差异镜像,则判断不存在数据库操作日志中 包括的该内存数据库实时镜像中未包括的数据对应的内存数据库差异镜像。

  本发明实施例中,当判断存在数据库操作日志中包括内存数据库实时镜像 中未包括的数据对应的内存数据库差异镜像时,可以将该内存数据库差异镜像 与内存数据库实时镜像合并为新的内存数据库实时镜像,并再次判断数据库操 作日志中是否包括该新的内存数据库实时镜像中未包括的数据,重复执行步骤 304~306中的相关操作;当判断不存在数据库操作日志中包括内存数据库实时镜 像中未包括的数据对应的内存数据库差异镜像时,可以将数据库操作日志中包 括的该内存数据库实时镜像中未包括的数。加载到该内存数据库实时镜像中。

  举例来说,假设内存数据库实时镜像中包括一份成绩表数据:A:90分;B: 95分;C:100分。数据库操作日志包括的该内存数据库实时镜像中未包括的数 据对应的内存数据库差异镜像中记录了“A的成绩由90分变为了95分;C的成 绩被删除”,则将该内存数据库实时镜像与该内存数据库差异镜像合并后得到的 新的内存数据库实时镜像中的相关数据为:A:95分;B:95分。

  需要注意的是,图3所示的流程中,当步骤306中得到新的内存数据库实 时镜像之后,执行步骤304~308时,相应步骤中涉及的内存数据库实时镜像为 合并了内存数据库差异镜像的内存数据库实时镜像。且将内存数据库实时镜像 与内存数据库差异镜像合并为新的内存数据库实时镜像后,该新的内存数据库 实时镜像的生成时间记录为合并的内存数据库差异镜像中生成时间最晚的内存 数据库差异镜像的生成时间。

  举例来说,假设合并前内存数据库实时镜像的生成时间为0:30,合并的内 存数据库差异镜像的生成时间分别为0:40和0:50,则合并后得到的新的内存数 据库实时镜像生成时间记录为0:50。

  本发明实施例中,当判断数据库操作日志中未包括内存数据库实时镜像中 未包括的数据时,或判断数据库操作日志中包括内存数据库实时镜像中未包括 的数据,且将该数据库操作日志中包括的内存数据库实时镜像中未包括的数据 加载到该内存数据库实时镜像中后,可以将该内存数据库实时镜像加载到内存 中,以恢复内存数据库。

  步骤309、查询最新的内存数据库镜像。

  步骤310、复制该最新的内存数据库镜像,作为内存数据库实时镜像,并转 至步骤304。

  本发明实施例中,当接收到内存数据库恢复指令,且判断不存在内存数据 库实时镜像时,可以判断是否存在内存数据库镜像,并当存在时,查询最新的 内存数据库镜像(即生成时间最晚的内存数据库镜像),并复制该生成时间最晚 的内存数据库镜像,作为内存数据库实时镜像,并判断数据库操作日志中是否 包括该内存数据库实时镜像中未包括的数据,重复执行步骤304~306中的相关 操作。

  需要注意的是,图3所示的流程中,当步骤310中得到内存数据库实时镜 像之后,执行步骤304~308时,相应步骤中涉及的内存数据库实时镜像为复制 最新的内存数据库镜像得到的内存数据库实时镜像。且将最新的内存数据库镜 像复制得到内存数据库实时镜像后,该内存数据库实时镜像的生成时间记录为 该最新的内存数据库镜像的生成时间。

  举例来说,假设查询到的最新的内存数据库镜像的生成时间为2014年6月 7日12:00,则复制该内存数据库镜像得到的内存数据库实时镜像的生成时间记 录为2014年6月7日12:00。

  本发明实施例中,当需要恢复内存数据库,且判断不存在内存数据库实时 镜像、内存数据库镜像时,可以根据数据库操作日志进行内存数据库恢复,其 具体实现与现有方案中内存数据库恢复的方案相类似,在此不再赘述。

  通过以上描述可以看出,在本发明实施例提供的技术方案中,当接收到内 存数据库恢复指令时,判断是否存在内存数据库实时镜像,当存在内存数据库 实时镜像时,进一步判断数据库操作日志中是否包括内存数据库实时镜像中未 包括的数据,当包括时,将数据库操作日志中包括的该内存数据库实时镜像中 未包括的数据加载到内存数据库实时镜像中,并将该内存数据库实时镜像加载 到内存中,以恢复内存数据库;当不包括时,将该内存数据库实时镜像加载到 内存中,以恢复内存数据库,提高了内存数据库恢复的效率,降低了内存数据 库恢复对系统性能的影响。

  为了使本领域技术人员更好地理解本发明实施例提供的技术方案,下面结 合一个具体的实例对本发明实施例提供的技术方案进行描述。

  在该实施例中,数据服务器初始运行时间为2014年1月1日0:00;在运行 过程中每天生成一份内存数据库镜像,每隔半小时生成一份内存数据库实时镜 像,每隔10分钟生成一份内存数据库差异镜像,数据服务器生成内存数据库镜 像、内存数据库实时镜像以及内存数据库差异镜像时,记录其生成时间;其中, 当数据服务器生成新的内存数据库镜像和内存数据库实时镜像时,覆盖之前生 成的内存数据库镜像和内存数据库实时镜像,即数据服务器中仅保存一份最新 生成的内存数据库镜像和内存数据库实时镜像;内存数据库差异镜像的有效时 间为30分钟,即0:10生成的内存数据库差异镜像的有效时间为0:10~0:40,数 据服务器在0:40时将该数据差异镜像删除。

  假设2014年1月15日6:45,数据服务器因故障发生宕机,维护人员重新 启动数据服务器时,数据服务器确定需要进行内存数据库恢复(即该实施例中, 恢复内存数据库对应的指定程序被设置为开机自启动),此时,数据服务器首先 需要判断是否存在内存数据库实时镜像,发现存在生成时间为2014年1月15 日6:30的内存数据库实时镜像;进一步地,数据服务器查询数据库操作日志, 判断数据库操作日志中是否包括该内存数据库实时镜像未包括的数据。假设数 据库操作日志中最后一条记录的时间为2014年1月15日6:43,则数据服务器 判断数据库操作日志中包括该内存数据库实时镜像中未包括的数据(时间在 2014年1月15日6:30之后的记录对应的数据);进一步地,数据服务器判断是 否存在生成时间在2014年1月15日6:30之后的内存数据库差异镜像,发生存 在生成时间为2014年1月15日6:40的内存数据库差异镜像,从而,数据服务 器将内存数据库实时镜像与该内存数据库差异镜像合并生成新的内存数据库实 时镜像,并将该新的内存数据库实时镜像的生成时间记录为2014年1月15日 6:40;进一步地,数据服务器再次查询数据库操作日志,判断该数据库操作日志 中是否包括时间在2014年1月15日6:40之后的记录,发现存在时间为2014年 1月15日6:43的记录,从而,数据服务器将该记录对应的数据加载到该新的内 存数据库实时镜像中,并将该新的内存数据库实时镜像加载到内存中,以恢复 内存数据库。即在该实施例中,通过周期性地生成内存数据库镜像、内存数据 库实时镜像、以及内存数据库差异镜像,当需要恢复内存数据库是,优先根据 内存数据库镜像、内存数据库实时镜像、以及内存数据库差异镜像进行内存数 据库恢复,避免了对数据库操作日志的频繁读取,提高了内存数据库恢复的效 率,降低了内存数据库恢复对系统性能的影响。

  基于上述方法实施例相同的技术构思,本发明实施例还提供了一种内存数 据库恢复设备,可以应用于上述方法实施例中。

  如图4所示,为本发明实施例提供的一种内存数据库恢复设备的结构示意 图,可以包括:

  接收模块401,用于接收内存数据库恢复指令;

  第一判断模块402,用于判断是否存在内存数据库实时镜像;

  第二判断模块403,用于当所述第一判断模块402的判断结果为存在时,判 断数据库操作日志中是否包括所述内存数据库实时镜像中未包括的数据;

  第一处理模块404,用于当所述第二判断模块403的判断结果为是时,将所 述数据库操作日志中包括的所述内存数据库实时镜像中未包括的数据加载到所 述内存数据库实时镜像中,并将该内存数据库实时镜像加载到内存中,以恢复 内存数据库;

  第二处理模块405,用于当所述第二判断模块403的判断结果为否时,将所 述内存数据库实时镜像加载到内存中,以恢复内存数据库。

  请一并参阅图5,图5是本发明实施例公开的另一种内存数据库恢复设备的 结构示意图。其中,图5所示的内存数据库恢复设备是由图4所示的内存数据 库恢复设备进行优化得到的,与图4所示的内存数据库恢复设备相比,图5所 示的内存数据库恢复设备还可以包括:

  第三判断模块406,用于当所述第一判断模块的判断结果为是时,判断是否 存在所述数据库操作日志中包括所述内存数据库实时镜像中未包括的数据对应 的内存数据库差异镜像。

  相应地,所述第一处理模块404可以具体用于,当所述第三判断模块406 的判断结果为否时,将所述数据库操作日志中包括的所述内存数据库实时镜像 中未包括的数据加载到所述内存数据库实时镜像中。

  其中,所述第一处理模块404还可以用于,当所述第三判断模块406的判 断结果为是时,将将所述内存数据库差异镜像与所述内存数据库实时镜像合并 为新的内存数据库实时镜像;

  所述第二判断模块403还可以用于,判断所述数据库操作日志中是否包括 所述新的内存数据库实时镜像中未包括的数据;

  所述第一处理模块404还可以用于,当所述第二判断模块403判断为包括 时,将所述数据库操作日志中包括的所述新的内存数据库实时镜像中未包括的 数据加载到所述新的内存数据库实时镜像中,并将该新的内存数据库实时镜像 加载到内存中,以恢复内存数据库;

  所述第二处理模块405还用于,当所述第二判断模块403判断为未包括时, 将所述新的内存数据库实时镜像加载到内存中,以恢复内存数据库。

  其中,所述第一处理模块404还可以用于,将所述内存数据库差异镜像与 所述内存数据库实时镜像合并为新的内存数据库实时镜像之后,将所述新的内 存数据库实时镜像的生成时间记录为所述内存数据库差异镜像中的生成时间最 晚的内存数据库差异镜像的生成时间。

  请一并参阅图6,图6是本发明实施例公开的另一种内存数据库恢复设备的 结构示意图。其中,图6所示的内存数据库恢复设备是由图5所示的内存数据 库恢复设备进行优化得到的,与图5所示的内存数据库恢复设备相比,图6所 示的内存数据库恢复设备中,第三判断模块406还可以包括:

  第一查询单元4061,用于根据自身记录的所述内存数据库实时镜像的生成 时间,以及所述数据库操作日志中当前的最后一条记录的时间,查询生成时间 在该内存数据库实时镜像的生成时间和所述数据库操作日志中当前的最后一条 记录的时间之间的内存数据库差异镜像;

  第一判断单元4062,用于当所述第一查询单元4061查询到生成时间在该内 存数据库实时镜像的生成时间和所述数据库操作日志中当前的最后一条记录的 时间之间的内存数据库差异镜像时,判断存在所述数据库操作日志中包括的所 述内存数据库实时镜像中未包括的数据对应的内存数据库差异镜像;当所述第 一查询单元4062未查询到生成时间在该内存数据库实时镜像的生成时间和所述 数据库操作日志中当前的最后一条记录的时间之间的内存数据库差异镜像时, 判断不存在所述数据库操作日志中包括的所述内存数据库实时镜像中未包括的 数据对应的内存数据库差异镜像。

  请一并参阅图7,图7是本发明实施例公开的另一种内存数据库恢复设备的 结构示意图。其中,图7所示的内存数据库恢复设备是由图4所示的内存数据 库恢复设备进行优化得到的,与图4所示的内存数据库恢复设备相比,图7所 示的内存数据库恢复设备中,第二判断模块403还可以包括:

  第二查询单元4031,用于根据自身记录的所述内存数据库实时镜像的生成 时间,查询所述数据库操作日志;

  第二判断单元4032,用于当所述第二查询单元4031查询到所述数据库操作 日志中存在时间晚于所述生成时间的记录,判断所述数据库操作日志中包括所 述内存数据库实时镜像中未包括的数据;当所述第二查询单元4032查询到所述 数据库操作日志中不存在时间晚于所述生成时间的记录,判断所述数据库操作 日志中未包括所述内存数据库实时镜像中未包括的数据。

  请一并参阅图8,图8是本发明实施例公开的另一种内存数据库恢复设备的 结构示意图。其中,图8所示的内存数据库恢复设备是由图4所示的内存数据 库恢复设备进行优化得到的,与图4所示的内存数据库恢复设备相比,图8所 示的内存数据库恢复设备可以包括:

  查询模块407,用于当所述第一判断模块402的判断结果为不存在时,查询 最新的内存数据库镜像;其中,所述最新的内存数据库镜像为生成时间与当前 时间的时间间隔最小的内存数据库镜像;

  第四判断模块408,用于判断数据库操作日志中是否包括该最新的内存数据 库镜像中未包括的数据;

  相应地,所述第一处理模块404还可以用于,当所述第四判断模块408的 判断为是时,将所述数据库操作日志中包括的该最新的内存数据库镜像中未包 括的数据加载到该最新的内存数据库镜像中,并将该最新的内存数据库镜像加 载到内存中,以恢复内存数据库;

  所述第二处理模块405还可以用于,当所述第四判断模块408判断为否时, 将该最新的内存数据库镜像加载到内存中,以恢复内存数据库。

  请一并参阅图9,图9是本发明实施例公开的另一种内存数据库恢复设备的 结构示意图。其中,图9所示的内存数据库恢复设备是由图4所示的内存数据 库恢复设备进行优化得到的,与图4所示的内存数据库恢复设备相比,图9所 示的内存数据库恢复设备可以包括:

  生成模块409,用于以第一预设周期生成内存数据库镜像;或/和,以第二 预设周期生成内存数据库实时镜像;或/和,以第三预设周期生成内存数据库差 异镜像;其中,所述第一预设周期大于所述第二预设周期,所述第二预设周期 大于所述第三预设周期;

  存储模块410,用于存储所述内存数据库镜像、内存数据库实时镜像、或/ 和,内存数据库差异镜像。

  本发明实施例中,所述内存数据库恢复指令为运行指定程序的指令。

  相应地,请一并参阅图10,图10是本发明实施例公开的另一种内存数据库 恢复设备的结构示意图。其中,图10所示的内存数据库恢复设备是由图4所示 的内存数据库恢复设备进行优化得到的,与图4所示的内存数据库恢复设备相 比,图10所示的内存数据库恢复设备可以包括:

  设置模块411,用于将所述指定程序设置为开机自启动程序。

  图11是本发明实施例中提供的另一种内存数据库恢复设备的结构示意图。 如图11所示,该内存数据库恢复设备包括:至少一个处理器1101,例如CPU, 至少一个用户接口1103,存储器1104,至少一个通信总线1102。其中,通信总 线1102用于实现这些组件之间的连接通信。其中,用户接口1103可以包括显 示屏(Display)、键盘(Keyboard),可选用户接口1103还可以包括标准的有线 接口、无线接口。存储器1104可以是高速RAM存储器,也可以是非不稳定的 存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1104可选的 还可以是至少一个位于远离前述处理器1101的存储装置。其中存储器1104中 存储一组程序代码,且处理器1101调用存储器1104中存储的程序代码,用于 执行以下操作:

  接收内存数据库恢复指令;

  判断是否存在内存数据库实时镜像;

  当判断结果为存在时,判断数据库操作日志中是否包括所述内存数据库实 时镜像中未包括的数据;

  若包括,将所述数据库操作日志中包括的所述内存数据库实时镜像中未包 括的数据加载到所述内存数据库实时镜像中,并将该内存数据库实时镜像加载 到内存中,以恢复内存数据库;

  若未包括,将所述内存数据库实时镜像加载到内存中,以恢复内存数据库。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码判断数 据库操作日志中包括所述内存数据库实时镜像中未包括的数据之后,将所述数 据库操作日志中包括的所述内存数据库实时镜像中未包括的数据加载到所述内 存数据库实时镜像中之前,还可以执行以下操作:

  判断是否存在所述数据库操作日志中包括所述内存数据库实时镜像中未包 括的数据对应的内存数据库差异镜像;

  若不存在,执行所述将所述数据库操作日志中包括的所述内存数据库实时 镜像中未包括的数据加载到所述内存数据库实时镜像中的步骤。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码判断是 否存在所述数据库操作日志中包括所述内存数据库实时镜像中未包括的数据对 应的内存数据库差异镜像之后,还可以执行以下操作:

  若存在,将所述内存数据库差异镜像与所述内存数据库实时镜像合并为新 的内存数据库实时镜像;

  判断所述数据库操作日志中是否包括所述新的内存数据库实时镜像中未包 括的数据;

  若包括,将所述数据库操作日志中包括的所述新的内存数据库实时镜像中 未包括的数据加载到所述新的内存数据库实时镜像中,并将该新的内存数据库 实时镜像加载到内存中,以恢复内存数据库;

  若未包括,将所述新的内存数据库实时镜像加载到内存中,以恢复内存数 据库。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码将所述 内存数据库差异镜像与所述内存数据库实时镜像合并为新的内存数据库实时镜 像之后,将所述内存数据库差异镜像与所述内存数据库实时镜像合并为新的内 存数据库实时镜像之后,还可以执行以下操作:

  将所述新的内存数据库实时镜像的生成时间记录为所述内存数据库差异镜 像中的生成时间最晚的内存数据库差异镜像的生成时间。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码判断是 否存在所述数据库操作日志中包括所述内存数据库实时镜像中未包括的数据对 应的内存数据库差异镜像,可以具体包括:

  根据自身记录的所述内存数据库实时镜像的生成时间,以及所述数据库操 作日志中当前的最后一条记录的时间,查询生成时间在该内存数据库实时镜像 的生成时间和所述数据库操作日志中当前的最后一条记录的时间之间的内存数 据库差异镜像;

  若查询到,判断存在所述数据库操作日志中包括的所述内存数据库实时镜 像中未包括的数据对应的内存数据库差异镜像;

  若未查询到,判断不存在所述数据库操作日志中包括的所述内存数据库实 时镜像中未包括的数据对应的内存数据库差异镜像。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码判断数 据库操作日志中是否包括所述内存数据库实时镜像中未包括的数据,可以具体 包括:

  根据自身记录的所述内存数据库实时镜像的生成时间,查询所述数据库操 作日志;

  若所述数据库操作日志中存在时间晚于所述生成时间的记录,判断所述数 据库操作日志中包括所述内存数据库实时镜像中未包括的数据;

  若所述数据库操作日志中不存在时间晚于所述生成时间的记录,判断所述 数据库操作日志中未包括所述内存数据库实时镜像中未包括的数据。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码判断是 否存在内存数据库实时镜像之后,还可以执行以下操作:

  当判断结果为不存在时,查询最新的内存数据库镜像;其中,所述最新的 内存数据库镜像为生成时间与当前时间的时间间隔最小的内存数据库镜像;

  判断数据库操作日志中是否包括该最新的内存数据库镜像中未包括的数 据;

  若包括,将所述数据库操作日志中包括的该最新的内存数据库镜像中未包 括的数据加载到该最新的内存数据库镜像中,并将该最新的内存数据库镜像加 载到内存中,以恢复内存数据库;

  若未包括,将该最新的内存数据库镜像加载到内存中,以恢复内存数据库。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码接收内 存数据库恢复指令之前,还可以执行以下操作:

  以第一预设周期生成内存数据库镜像;或/和,

  以第二预设周期生成内存数据库实时镜像;或/和,

  以第三预设周期生成内存数据库差异镜像;

  其中,所述第一预设周期大于所述第二预设周期,所述第二预设周期大于 所述第三预设周期。

  其中,所述内存数据库恢复指令为运行指定程序的指令。

  在可选实施例中,处理器1101调用存储器1104中存储的程序代码接收内 存数据库恢复指令之前,还可以执行以下操作:

  将所述指令程序设置为开机自启动程序。

  本发明实施例还提供了一种终端,可以包括如图4-11所示的任一恢复数据 的设备。

  在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具 体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结 构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中, 对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的 具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的 方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书 中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

  此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对 重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二” 的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个” 的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

  流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表 示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码 的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其 中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或 按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员 所理解。

  在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认 为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机 可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处 理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统) 使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算 机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行 系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算 机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线 的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM), 只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光 纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至 可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸 或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行 处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

  应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。 在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执 行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方 式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有 用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合 逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA) 等。

  本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部 分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计 算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

  此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中, 也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块 中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的 形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品 销售或使用时,也可以存储在一个计算机可读取存储介质中。

  上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示 出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理 解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实 施例进行变化、修改、替换和变型。

  内存数据库 3:

  一种内存数据库扩容的方法

  第一、技术领域

  本发明涉及一种电信领域使用的内存数据库管理方法,特别涉及的是一种内存数据库智能扩容的方法。

  第二、背景技术

  在现有技术的电信领域的内容交付过程中,一般对数据的访问具有很高的性能要求,特别是面对大量用户使用的数据时,不仅要求对数据的访问和存储要有很高的性能,更要求具有可靠的扩容功能来应对电信领域中持续不断增长的数据。

  因此在电信应用领域中,使用的存储技术必需满足具有高可靠性的扩容功能,内存数据库作为一种高性能数据访问存储技术能满足上述要求,在电信的应用领域中已经被广泛地采用。

  现有的内存数据库扩容方案都有固定的扩容机制,其包括:在内存数据库运行过程中首先检测其容量,当内存数据库空闲记录容量低于设定的固定阀值容量时立即启动扩容机制进行扩容。由于内存数据库的特殊性,内存数据库扩容操作非常耗时,以分钟为单位,根据环境的不同内存数据库扩容操作耗时少则1到2分钟,多则达数分钟。

  而在电信领域,在有大量用户正在使用内存数据库所在的电信业务系统中,导致内存数据库启动扩容机制的情况经常出现。此时,建立在内存数据库之上的所有电信业务都会受到影响:轻则导致系统拒绝服务,重则使整个系统崩溃,并且导致大量用户的投诉,使运营商蒙受大量的经济损失。

  因此,在内存数据库进行扩容时需要考虑扩容操作对业务系统的影响,现有技术还存在有待改进之处。

  第三、发明内容

  本发明的目的在于提供一种内存数据库扩容的方法,解决扩容操作对整个业务系统产生的负面影响。

  本发明方法的实现方案如下:

  一种内存数据库扩容的方法,其包括以下步骤:

  A、设置内存数据库的扩容时间段,以使内存数据库在规定时间段内才能启动有条件的扩容操作;

  B、扩容操作依次执行如下操作:设置内存数据库需要扩容的增长量,初始化内存数据库的参数,暂停内存数据库对外提供的服务,重新载入数据库数据表到内存中完成扩容操作。

  所述的方法,其中,所述步骤A还包括:

  A1、设置时间周期,并在内存数据库运行期间统计在该时间周期中剩余的空闲记录容量和使用记录的增长量,并进行保存;

  A2、在所述内存数据库运行期间如果进入时间周期的临界点,则统计最大使用记录增长量和内存数据库空闲记录的容量,在内存数据库的扩容时间段内,判断是否进行扩容操作。

  所述的方法,其中,所述步骤A2还包括:

  A21、统计时间周期临界点时刻内存数据库空闲记录的容量,并进行保存;

  A22、并根据在上一个时间周期临界点保存的空闲记录容量计算出当前时间周期中内存数据库使用记录的增长量;

  A23、把当前周期中的内存数据库使用记录的增长量和上一个时间周期保存的内存数据库使用记录增长量进行比较,保存这两个增长量中最大的值,如果内存数据库第一次启动则只记录第一个时间周期的使用记录增长量。

  所述的方法,其中,如果不进行扩容操作,则重复开始周期统计。

  本发明所提供的一种内存数据库扩容的方法,由于采用内存数据库的扩容操作都在客服系统的用户量最小的时间段进行的方式,使整个系统在内存数据库扩容期间处于一个稳定的状态,不会影响到系统的运行,因此本发明扩容方法极大地保证了客服系统的稳定性。

  第四、附图说明

  图1是本发明方法的流程示意图。

  第五、具体实施方式

  以下结合附图,将对本发明的各较佳实施例进行更为详细的说明。

  本发明的内存数据库扩容的方法,如图1所示,在客服系统中的具体应用包括步骤如下:

  A)、首先通过配置文件设置内存数据库的启动扩容操作的时间段,使内存数据库在规定时间段内启动有条件扩容操作。

  根据电信业务的特点,内存数据库扩容应该在用户量最小的时间段里进行。在客户服务系统中,可以设置内存数据库的扩容操作在凌晨3:00到3:30之间进行,因为这段时间是用户量最小的时间段,整个客服系统处于一个低负荷的状态,扩容操作不会对整个系统的产生影响。

  B、用步骤A中设置的扩容时间段的开始点作为参考值,即每天凌晨的3:00,设置时间周期,每个时间周期的临界点也为每天凌晨3:00,时间周期的设置也根据电信的具体业务可以在配置文件中进行设置。话务量较高的客服系统在实际应用中以24小时作为一个周期,其它系统例如彩玲,可以设置48个小时作为一个周期。内存数据库运行期间统计在这个周期中内存数据库空闲记录容量和使用记录的增长量,并进行保存;

  C、设置好客服系统内存数据库扩容操作的参数后,如图1所示,内存数据库运行期间如果进入设置的时间周期的临界点,则进行如下操作:

  c.1)统计时间周期临界点时刻客服系统的内存数据库的剩余空闲记录的容量;

  c.2)并根据步骤c.1)在上一个周期的临界点保存的空闲记录容量计算出当前时间周期中内存数据库使用记录的增长量;

  c.3)把当前周期中的内存数据库使用记录的增长量和上一个时间周期保存的内存数据库使用记录增长量进行比较,保存这两个增长量中最大的值,如果内存数据库第一次启动则只记录第一个时间周期的使用记录增长量,这样当前周期保存的客服系统内存数据库使用记录的增量值始终是最大值;

  D、在内存数据库的扩容时间段内,根据客服系统的业务特性,如果一个时间周期内的使用记录增量乘以2大于内存数据库空闲记录容量则进行扩容操作;

  E、根据步骤D的检测,如果不进行扩容操作,则进入步骤C重复开始周期统计;

  F、根据步骤D的检测,如果进行扩容操作,则根据步骤C统计结果设置内存数据库需要扩容的增长量,客服系统中扩容的值设置为一个周期的使用记录增量乘以2,然后初始化内存数据库的参数,暂停内存数据库对外提供的服务,重新载入数据库数据表到内存中完成扩容操作,扩容操作完成后进入步骤A重复本发明过程。

  本发明方法根据中兴通讯的客服系统的运行情况,其内存数据库扩容方法极大地提高了客服系统的稳定性。由于本发明的内存数据库的扩容操作都在客服系统的用户量最小的时间段进行,使得整个系统在内存数据库扩容期间处于一个稳定的状态,没有影响到系统的运行。

  在实际的使用中,在中兴通讯公司的客服系统中,将内存数据库用于记录客服的录音,并且要求对客服的录音保存至少90天。由于每天有大量的客户进入系统获取服务,内存数据库的容量每天都在急剧地增长,扩容操作在所难免。而由于本发明描述的扩容方法在此系统中得到很好的应用,内存数据库的扩容操作没有影响到整个系统的稳定性,极大的提高了运营商的服务能力。

  应当理解的是,上述针对具体实施例的描述较为详细,并不能因此而理解为对本发明专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。

  内存数据库 4:

  一种内存数据库及其数据处理方法

  第一、技术领域

  本发明涉及数据库技术,尤其涉及一种内存数据库及其数据处理方法。

  第二、背景技术

  内存数据库是将数据放在内存中操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。同时,因内存数据库所有活动数据全部存储在内存,存在数据丢失的风险。如何提高内存数据库的数据安全性就成为内存数据库需要解决的问题。

  目前已有的解决方案,主要是通过维护主备两个或多个内存数据库,并通过消息接口或日志文件来构造一个内存库的备份数据,以提高内存数据库的可靠性和安全性。

  但是,现有的这些方法需要额外的一个或多个备用设备来承载备份内存数据库,这样就提高了系统的成本。同时还需要增加同步接口,来保证两个或多个内存数据库数据一致,不但增加了内存数据库的逻辑复杂度,同时也降低了其性能。

  第三、发明内容

  本发明要解决的主要技术问题是,提供一种低成本且有效提高数据安全性的内存数据库及其实现方法。

  为解决上述技术问题,本发明提供一种内存数据库数据处理方法,包括以下步骤:

  将内存数据库进程与内存数据分离;

  创建共享内存段,并将所述内存数据存入所述共享内存段,将内存数据库数据区地址指向所述共享内存段地址;

  当所述内存数据库进程启动时,连接所述共享内存段。

  所述共享内存段包括共享内存注册信息段和共享内存数据段;所述将所述内存数据存入所述共享内存段具体包括:将所述内存数据库数据区地址初始化为所述共享内存数据段地址;将所述内存数据库的数据字典信息注册到所述共享内存注册信息段,将所述内存数据存入内存表。

  还包括将创建后的共享内存段数据存入磁盘的数据备份过程。

  还包括内存数据库的重启过程,所述重启过程包括:检查共享内存段是否存在;若存在共享内存段,将所述内存数据库数据区地址指向所述共享内存数据段地址。

  所述重启过程还包括:若不存在共享内存段,则创建共享内存段,并将存入磁盘的备份数据加载到所述共享内存数据段中。

  一种内存数据库,包括内存库管理单元和共享内存段管理单元;所述内存库管理单元用于将内存数据库进程与内存数据分离;所述共享内存段管理单元用于创建共享内存段,将所述内存数据存入所述共享内存段,将内存数据库数据区地址指向所述共享内存数据段地址;所述内存库管理单元还用于当所述内存数据库进程启时,连接所述共享内存段。

  所述共享内存段包括共享内存注册信息段和共享内存数据段;所述内存库管理单元还用于将内存数据库数据区地址初始化为所述共享内存数据段地址;将所述内存数据库的数据字典信息注册到所述共享内存注册信息段,将所述内存数据存入内存表。

  还包括备份单元,用于将共享内存段数据存入磁盘进行数据备份。

  所述内存库管理单元还用于当内存数据库进行重启时,检查共享内存段是否存在,若存在共享内存段,将所述内存数据库数据区地址指向所述共享内存数据段地址。

  所述共享内存段管理单元还用于当内存数据库进行重启时,若不存在共享内存段,则创建共享内存段,并将存入磁盘的备份数据加载到所述共享内存数据段中。

  本发明的有益效果是:

  (1)本发明中采用内存数据库进程与内存数据分离,并以共享内存段的方式申请内存数据库的数据存储空间,在内存数据库进程异常的情况下,内存数据库的数据由于存储在共享内存段中而不受影响,提高了内存数据库的数据安全性;并且无需进行主备内存数据库数据同步,降低了设备成本和设备维护复杂度。

  (2)本发明还提供共享内存段的备份,进一步提高了数据存储的可靠性和安全性。

  (3)本发明在内存数据库异常时,可以通过重启内存数据库,将内存数据库数据区地址指向存有内存数据库数据的共享内存数据段,从而既能保证数据不丢失,又缩短了内存数据库的启动时间。

  第四、附图说明

  图1为本发明内存数据库实施方式中的结构示意图;

  图2为本发明内存数据库实施方式中的另一结构示意图;

  图3为本发明方法实施方式中的流程图;

  图4为本发明方法实施方式中的重启过程的流程图;

  图5为本发明方法实施方式中的具体流程图。

  第五、具体实施方式

  下面通过具体实施方式结合附图对本发明作进一步详细说明。

  本发明的关键技术是将内存数据库进程与内存数据库的数据分离,同时以共享内存段的方式申请内存数据库存储空间,利用共享内存数据段的驻留特性,提高全内存数据库的容灾能力。该驻留特性即:进程申请共享内存段后,如果不显式删除该共享内存段,即便进程退出,则该共享内存段仍旧存在。将内存数据库的内存申请在共享内存段上,则可以保证内存数据库异常退出时,存储内存数据库数据的共享内存段仍旧存在,从而使得该数据不丢失。当内存数据库进程再次启动时,内存数据库进程根据注册信息重新连接这些共享内存段,这样既能保证数据不丢失,又能缩短内存数据库的启动耗时,因为内存数据库的数据加载时间仅为共享内存段的连接时间。

  图1示出根据本发明内存数据库的一个实施例的结构示意图,包括内存库管理单元和共享内存段管理单元。内存库管理单元用于将内存数据库进程与内存数据分离;共享内存段管理单元用于创建共享内存段,将内存数据存入共享内存段,将内存数据库数据区地址指向共享内存数据段地址;内存库管理单元还用于当内存数据库进程启时,连接共享内存段。

  在一种实施方式中,该共享内存段包括共享内存注册信息段和共享内存数据段;内存库管理单元还用于将内存数据库数据区地址初始化为共享内存数据段地址;将内存数据库的数据字典信息注册到共享内存注册信息段,将内存数据存入内存表。

  在一种实施方式中,还包括备份单元,用于将共享内存数据段数据写入磁盘进行数据备份。

  内存库管理单元还用于当内存数据库进行重启时,检查共享内存段是否存在,若存在共享内存段,初始化内存数据库数据字典和数据区地址,将所述内存数据库数据区地址指向所述共享内存数据段地址。

  共享内存段管理单元还用于当内存数据库进行重启时,若不存在共享内存段,则创建共享内存段,即重新以共享内存段方式申请内存数据存储空间,并将存入磁盘的备份数据加载到共享内存数据段中。

  图2示出根据本发明内存数据库的另一种实施方式的结构示意图,包括配置管理单元、内存库管理单元、共享内存段管理单元以及数据备份单元。配置管理单元实现共享内存数据段信息配置以及内存数据库信息配置;共享内存段管理单元实现共享内存注册段、共享内存数据段的申请与释放管理等;内存库管理单元实现对内存数据库进程、内存表、数据字典等的管理以及提供对外数据访问接口;数据备份单元根据共享内存注册信息,定位到共享内存数据段,并能定位到具体的内存表。将内存表数据备份到磁盘,从而支持全内存数据库服务器的下电备份操作。数据备份单元可配置为监测模式。即实时监测共享内存数据的库的运行情况,如果发现内存数据库进程退出,则直接进行备份,将共享内存段数据存入磁盘。

  上述四个单元具体实现既可以合一设置,也可以独立的进程方式实现,具体实施时可以根据设计需要灵活选择组织方式。

  图3示出根据本发明内存数据库数据处理方法的一种实施方式的流程图,包括内存数据库的创建过程,该创建过程包括:

  步骤302:将内存数据库进程与内存数据分离;

  步骤304:创建共享内存段,并将内存数据存入共享内存段,将内存数据库数据区地址指向所述共享内存段地址;

  步骤306:当所述内存数据库进程启动时,连接所述共享内存段。

  在一种实施方式中,共享内存段包括共享内存注册信息段和共享内存数据段;将内存数据存入共享内存段具体可包括:将内存数据库数据区地址初始化为共享内存数据段地址;初始化数据字典和内存表,即将内存数据库的数据字典信息注册到共享内存注册信息段,将内存数据存入内存表。

  在另一种实施方式中,还可包括将创建后的共享内存数据段数据写入磁盘的数据备份过程。该备份过程是根据共享内存注册信息,定位到内存数据库的共享内存数据段,并能定位到具体的内存表,将内存表内的数据备份到磁盘,从而支持内存数据库服务器的下电备份操作。

  图4示出根据本发明内存数据库数据处理方法的一种实施方式中的重启过程的流程图,包括:

  步骤402:根据配置信息检查共享内存数据段是否存在,监测注册信息和数据信息是否完整;

  步骤404:如果共享内存数据段已经存在,初始化内存数据库数据字典和数据区地址,则直接将内存数据库进程连接到共享内存数据段;

  步骤406:在共享内存段不存在时,则创建共享内存段,并将存储在磁盘的备份数据加载到共享内存数据段中。

  本发明内存数据库数据处理方法的实施方式中,内存数据库的实现包括下列情况:

  1、内存数据库初次启动,这种情况下共享内存段尚未创建;

  2、内存数据库退出后重新启动,内存数据库之前使用的共享内存数据段仍然驻留在操作系统内;

  3、服务器重新上电后内存数据库进程启动,共享内存数据段磁盘备份已经存在,即下电前已经通过数据备份工具将共享内存数据段数据备份到磁盘。

  图5示出根据本发明内存数据库数据处理方法的实施方式中的具体流程图,其流程包括:

  步骤502:读取配置信息;内存数据库进程首先从配置管理单元获取内存数据库配置和共享内存段配置信息;

  步骤504:检查共享内存段是否存在;内存库管理单元依据共享内存段配置,检测共享内存注册段和共享内存数据段是否存在,如果检测到这些共享内存段,则表明该内存数据库已经启动过,转步骤516;否则转步骤506;

  步骤506:通知共享内存段管理单元创建共享内存段;创建共享内存段;如果未检测到共享内存段,内存库管理单元通知共享内存段管理单元申请共享内存段,共享内存段包括共享内存注册段和共享内存数据段;

  步骤508:将共享内存数据段初始化为内存数据库数据区地址;申请成功后共享内存段管理单元将共享内存数据段信息发送给内存库管理单元,内存库管理单元连接共享内存数据段,并根据配置信息创建空的数据字典,仅将内存库数据区地址写入数据字典;

  步骤510:是否有内存数据库数据备份;检测共享内存数据段存入磁盘的备份数据是否已经存在,若是转步骤512,否则转步骤514;

  步骤512:加载数据到共享内存数据段;说明下电前已经通过数据备份工具将共享内存数据段数据备份到磁盘,内存数据库管理单元将备份在磁盘数据加载到内存数据库数据区内,实际为加载到共享内存数据段内;

  步骤514:初始化内存表、更新数据字典及注册段;扫描内存数据库数据区,检查数据合法性、统计内存表记录数以及重建内存表上索引;将内存表记录数、状态、偏移等更新到数据字典,初始化内存表以及更新数据字典,最后将数据字典信息写入到共享内存注册段,流程结束;

  步骤516:将共享内存数据段初始化为内存数据库数据区地址;将共享内存数据段初始化为内存库数据区地址;

  步骤518:根据注册段信息初始化内存库字典;直接将共享内存注册段内的注册信息同步到数据字典,这些信息包括内存对象占用的数据区长度、在数据区的偏移以及状态等信息;

  步骤520:初始化内存表;重建内存表,在内存表上索引重建结束后,将内存表置为可用;流程结束。

  内存数据运行期间,如果数据字典发生更新则将更新数据同步到共享内存注册段。

  综上所述,采用本发明的方案,可以有效提高全内存数据库的容灾能力,具有很强的通用性。本发明已在短消息中心系统中应用,起到明显的优化作用。

  以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

  内存数据库 5:

  一种内存数据库集群的同步方法及内存数据库主机

  第一、技术领域

  本发明涉及数据库技术领域,尤其涉及一种内存数据库集群的同步方法及内存数据库主机。

  第二、背景技术

  内存数据库是指将数据放在内存中直接操作的数据库,一般以集群的方式部署,这样的集群称为内存数据库集群。内存数据库集群包括内存数据库主机和内存数据库从机,两者之间需要保持数据的同步。进一步地,同步分为全量同步和增量同步,全量同步是指内存数据库从机一次性将内存数据库主机的全部数据进行同步,增量同步是指内存数据库从机只对其与内存数据库主机之间不同的部分数据进行同步,应理解地,针对大数据的同步,执行全量同步的效率要低于增量同步,因此优先尝试增量同步。

  在现有技术中,内存数据库主机会在初始化时创建一个增量同步缓存区来保存临时数据,如图1所示,当内存数据库从机与内存数据库主机之间因网络问题导致闪断重连后,内存数据库从机会向内存数据库主机发送增量同步请求指令以请求对数据进行增量同步;内存数据库主机根据增量同步请求指令中的运行号和同步偏移地址判断内存数据库从机是否满足进行增量同步的条件,如当内存数据库从机的运行号等于内存数据库主机的运行号且同步偏移地址小于增量同步缓存区的缓存上限地址时判定为满足进行增量同步的条件,此时内存数据库主机将增量同步缓存区中同步偏移地址以后的数据发送给内存数据库从机以实现增量同步,又如当内存数据库从机的运行号不等于内存数据库主机的运行号或同步偏移地址大于增量同步缓存区的地址容量时判定为不满足进行增量同步的条件,此时内存数据库主机将内存中所有的数据生成内存数据库镜像文件发送给内存数据库从机以实现全量同步。

  然而,上述现有技术存在以下问题:(1)在业务高峰期或大并发数据情况下极有可能在闪断期间数据量会超过增量同步缓存区的缓存大小,导致增量同步缓存区循环覆盖缓存,造成数据丢失,影响主从机之间数据的一致性;(2)在同步偏移地址超出增量同步缓存区的范围时会进行全量同步,这将影响同步效率以及内存数据库主机的处理性能。

  第三、发明内容

  本发明实施例所要解决的技术问题在于,提供一种内存数据库集群的同步方法及内存数据库主机,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。

  为了解决上述技术问题,本发明实施例提供一种内存数据库集群的同步方法,包括:

  获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址;

  判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量;

  若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步;

  若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  相应地,本发明实施例还提供了一种内存数据库主机,包括:

  指令获取模块,用于获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址;

  容量判断模块,用于判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量;

  第一发送模块,用于若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步;

  第二发送模块,用于若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  实施本发明实施例,具有如下有益效果:本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。

  第四、附图说明

  为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

  图1是本发明实施例中的一种现有内存数据库集群的同步方法的示意图;

  图2是本发明实施例中的一种内存数据库集群的示意图;

  图3是本发明实施例中的一种内存数据库集群的同步方法的流程示意图;

  图4是本发明实施例中的另一种内存数据库集群的同步方法的流程示意图;

  图5是本发明实施例提供的一种内存数据库主机的结构示意图;

  图6是本发明实施例提供的一种增量同步缓存区的示意图;

  图7是本发明实施例提供的一种持久化数据保存文件的示意图。

  第五、具体实施方式

  下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

  为了便于理解本发明实施例,下面先结合图2介绍下本发明实施例的应用场景,如图所示的内存数据库集群至少包括一个内存数据库主机和多个内存数据库从机,内存数据库主机不断写入数据,内存数据库从机与内存数据库主机保持数据同步,同步的方式包括上文提及的全量同步和增量同步,这里不再赘述。需要说明的是,本发明实施例的内存数据库可以包括任意类型的内存数据库,例如Redis内存数据库等,其中,Redis是一种开源的、支持网络、基于内存的Key-Value数据库。

  图3是本发明实施例中的一种内存数据库集群的同步方法的流程示意图。该方法实现于内存数据库主机,如图所示可以包括:

  S101,获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址。

  在本发明实施例中,所述同步请求指令为增量同步请求指令;所述同步偏移地址本质上是一个存储地址,用于记录上一次数据同步的结束位置。

  具体地,内存数据库主机接收内存数据库从机发送来的增量同步请求指令,该增量同步请求指令中携带有同步偏移地址。

  应理解地,内存数据库主机在初始化时会创建一个增量同步缓存区。其中,内存数据库主机在向内存写入数据的时候,同时会把数据写入增量同步缓存区。需要指出的是,增量同步缓存区是以环形存储的方式写入数据,即写入的数据超过增量同步缓存区的缓存大小时,会循环覆盖之前的数据,从而达到节省存储空间的目的,因而增量同步缓存区主要用于保存临时数据。

  还应理解地,内存数据库主机在每次向内存写入数据时,会将该数据记录到持久化数据保存文件中,例如Aof文件。具体实现过程中,内存数据库主机可以通过勾选配置文件中的appendonly选项实现上述功能。需要指出的是,不同于增量同步缓存区中写入的数据,持久化数据保存文件中记录的数据是文本格式(.txt),而不是二进制数据格式。内存数据库主机在向内存写入数据时,同时会将这些数据一行一行地记录在持久化数据保存文件中,因而持久化数据保存文件中记录的数据基本与内存中写入的数据一致。

  S102,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。

  其中,所述当前需要同步到的数据可以是内存数据库主机的内存中最新写入的一个数据,该数据的存储地址与同步偏移地址的差值为一段地址,该段地址对应的数据就是本次需同步到内存数据库从机的数据。

  具体地,内存数据库主机判断当前需要同步到的数据的存储地址与同步偏移地址的差值是否大于增量同步缓存区的地址容量。应理解地,若该差值小于增量同步缓存区的地址容量,则说明计划同步到内存数据库从机的数据都可以在增量同步缓存区缓存的临时数据中找到;若该差值大于增量同步缓存区的地址容量,则说明本次需同步到内存数据库从机的数据超出了增量同步缓存区缓存的临时数据,其中一部分数据已经被覆盖保存,无法在增量同步缓存区中找到,因而在现有技术中,为了保证数据同步的一致性,内存数据库主机不会再执行增量同步,转而执行全量同步,从而对同步效率以及内存数据库主机的处理性能造成影响。

  进一步地,增量同步请求指令除包括同步偏移地址外还包括内存数据库从机的运行号。其中运行号用于指示内存数据库当前正处于的工作流,若各个内存数据库的运行号相同,则说明这些内存数据库处于同一个工作流,反之处于不同的工作流,应理解地,处于不同工作流的内存数据库不能通过增量同步来保持数据的一致性。因此,内存数据库主机应该在确定内存数据库从机的运行号等于其运行号后,再判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。

  相反地,内存数据库主机在确定内存数据库从机的运行号不等于其运行号时,生成内存数据库镜像文件,并将其发送给内存数据库从机以实现全量同步。例如:一个新加入内存数据库集群的内存数据库从机,其运行号肯定不同于内存数据库主机的运行号,该内存数据库从机不能通过增量同步与内存数据库主机保持数据的一致性,在向内存数据库主机发送增量同步请求指令后,内存数据库主机执行内存数据库镜像文件全量同步。其中内存数据库镜像是包括内存数据库主机的内存中所有数据的一个数据包,内存数据库从机通过加载内存数据库镜像可以在其内存中写入内存数据库主机的内存中的所有数据,故为全量同步。具体实现过程中,内存数据库主机确定内存数据库从机的运行号不等于其运行号时,先向内存数据库从机发送全量同步消息以指示内存数据库从机做好全量同步的准备,接着生成内存数据库镜像文件,再将生成的内存数据库镜像文件通过FTP(File Transfer Protocol,文件传输协议)方式发送给内存数据库从机,最后内存数据库从机加载该内存数据库镜像,实现全量同步。

  S103,若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  具体地,内存数据库主机在判定当前需要同步到的数据的存储地址与同步偏移地址的差值不大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在增量同步缓存区中找到同步偏移地址对应的位置,接着将增量同步缓存区中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图6,图中最大地址表示增量同步缓存区中最新写入的数据的地址,增量同步缓存区中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。

  S104,若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  具体地,内存数据库主机在判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在持久化数据保存文件中找到同步偏移地址对应的位置,接着将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图7,图中最大地址表示持久化数据保存文件中最新记录的数据的地址,持久化数据保存文件中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。可见,本发明实施例不同于现有技术的是,针对上述情况,可以通过持久化数据保存文件增量同步的方式代替增量同步缓存区增量同步的方式,进而保证了主从机数据的一致性,同时也避免了进行全量同步,从而提高了同步效率以及改善了内存数据库主机的处理性能。

  需要指出的是,正常情况下,同步偏移地址是不会超出持久化数据保存文件的范围的,只有在主从机通讯异常或数据错乱时,同步偏移地址才会超出持久化数据保存文件的范围,进一步地,在此情况下,内存数据库主机会选择执行内存数据库镜像文件全量同步。

  由上可知,本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。

  图4是本发明实施例中另一种内存数据库集群的同步方法的流程示意图。该方法实现于内存数据库主机,可以包括:

  S201,在初始化时创建增量同步缓存区以保存临时数据。

  具体地,内存数据库主机在初始化时会创建一个增量同步缓存区。其中,内存数据库主机在向内存写入数据的时候,同时会把数据写入增量同步缓存区。需要指出的是,增量同步缓存区是以环形存储的方式写入数据,即写入的数据超过增量同步缓存区的缓存大小时,会循环覆盖之前的数据,从而达到节省存储空间的目的,因而增量同步缓存区主要用于保存临时数据。

  S202,在每次向内存写入数据时,将该数据记录到持久化数据保存文件中。

  具体地,内存数据库主机在每次向内存写入数据时,会将该数据记录到持久化数据保存持久化数据保存文件中。具体实现过程中,内存数据库主机可以通过勾选配置文件中的appendonly选项实现上述功能。需要指出的是,不同于增量同步缓存区中写入的数据,持久化数据保存文件中记录的数据是文本格式(.txt),而不是二进制数据格式。内存数据库主机在向内存写入数据时,同时会将这些数据一行一行地记录在持久化数据保存文件中,因而持久化数据保存文件中记录的数据基本与内存中写入的数据一致。

  S203,获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址和所述内存数据库从机的运行号。

  在本发明实施例中,所述同步请求指令为增量同步请求指令;所述同步偏移地址本质上是一个存储地址,用于记录上一次数据同步的结束位置。

  具体地,内存数据库主机接收内存数据库从机发送来的增量同步请求指令,该增量同步请求指令中携带有同步偏移地址和内存数据库从机的运行号。

  S204,判断所述内存数据库从机的运行号是否等于本机的运行号。

  其中,运行号用于指示内存数据库当前正处于的工作流,若各个内存数据库的运行号相同,则说明这些内存数据库处于同一个工作流,反之处于不同的工作流,应理解地,处于不同工作流的内存数据库不能通过增量同步来保持数据的一致性。

  具体地,内存数据库主机判断内存数据库从机的运行号是否等于本机的运行号,若否,则执行步骤S205,若是,则执行步骤S206。

  S205,生成内存数据库镜像文件,并将其发送给所述内存数据库从机以实现全量同步。

  例如:一个新加入内存数据库集群的内存数据库从机,其运行号肯定不同于内存数据库主机的运行号,该内存数据库从机不能通过增量同步与内存数据库主机保持数据的一致性,在向内存数据库主机发送增量同步请求指令后,内存数据库主机执行内存数据库镜像文件全量同步。其中内存数据库镜像是包括内存数据库主机的内存中所有数据的一个数据包,内存数据库从机通过加载内存数据库镜像可以在其内存中写入内存数据库主机的内存中的所有数据,故为全量同步。具体实现过程中,内存数据库主机确定内存数据库从机的运行号不等于其运行号时,先向内存数据库从机发送全量同步消息以指示内存数据库从机做好全量同步的准备,接着生成内存数据库镜像文件,再将生成的内存数据库镜像文件通过FTP(File Transfer Protocol,文件传输协议)方式发送给内存数据库从机,最后内存数据库从机加载该内存数据库镜像,实现全量同步。

  S206,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。

  其中,所述当前需要同步到的数据可以是内存数据库主机的内存中最新写入的一个数据,该数据的存储地址与同步偏移地址的差值为一段地址,该段地址对应的数据就是本次需同步到内存数据库从机的数据。

  具体地,内存数据库主机判断当前需要同步到的数据的存储地址与同步偏移地址的差值是否大于增量同步缓存区的地址容量,若否,则执行步骤S207,若是,则执行步骤S208。应理解地,若该差值小于增量同步缓存区的地址容量,则说明计划同步到内存数据库从机的数据都可以在增量同步缓存区缓存的临时数据中找到;若该差值大于增量同步缓存区的地址容量,则说明本次需同步到内存数据库从机的数据超出了增量同步缓存区缓存的临时数据,其中一部分数据已经被覆盖保存,无法在增量同步缓存区中找到,因而在现有技术中,为了保证数据同步的一致性,内存数据库主机不会再执行增量同步,转而执行全量同步,从而对同步效率以及内存数据库主机的处理性能造成影响。

  S207,将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  具体地,内存数据库主机先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在增量同步缓存区中找到同步偏移地址对应的位置,接着将增量同步缓存区中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图6,图中最大地址表示增量同步缓存区中最新写入的数据的地址,增量同步缓存区中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。

  S208,将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  具体地,内存数据库主机先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在持久化数据保存文件中找到同步偏移地址对应的位置,接着将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图7,图中最大地址表示持久化数据保存文件中最新记录的数据的地址,持久化数据保存文件中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。可见,本发明实施例不同于现有技术的是,针对上述情况,可以通过持久化数据保存文件增量同步的方式代替增量同步缓存区增量同步的方式,进而保证了主从机数据的一致性,同时也避免了进行全量同步,从而提高了同步效率以及改善了内存数据库主机的处理性能。

  需要指出的是,正常情况下,同步偏移地址是不会超出持久化数据保存文件的范围的,只有在主从机通讯异常或数据错乱时,同步偏移地址才会超出持久化数据保存文件的范围,进一步地,在此情况下,内存数据库主机会选择执行内存数据库镜像文件全量同步。

  由上可知,本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。

  图5是本发明实施例中一种内存数据库主机的结构示意图。如图所示本发明实施例中的内存数据库主机至少可以包括指令获取模块310、容量判断模块320、第一发送模块330以及第二发送模块340,其中:

  指令获取模块310,用于获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址。

  在本发明实施例中,所述同步请求指令为增量同步请求指令;所述同步偏移地址本质上是一个存储地址,用于记录上一次数据同步的结束位置。

  具体地,指令获取模块310接收内存数据库从机发送来的增量同步请求指令,该增量同步请求指令中携带有同步偏移地址。

  容量判断模块320,用于判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。

  其中,所述当前需要同步到的数据可以是内存数据库主机的内存中最新写入的一个数据,该数据的存储地址与同步偏移地址的差值为一段地址,该段地址对应的数据就是本次需同步到内存数据库从机的数据。

  具体地,容量判断模块320判断当前需要同步到的数据的存储地址与同步偏移地址的差值是否大于增量同步缓存区的地址容量。应理解地,若该差值小于增量同步缓存区的地址容量,则说明计划同步到内存数据库从机的数据都可以在增量同步缓存区缓存的临时数据中找到;若该差值大于增量同步缓存区的地址容量,则说明本次需同步到内存数据库从机的数据超出了增量同步缓存区缓存的临时数据,其中一部分数据已经被覆盖保存,无法在增量同步缓存区中找到。

  进一步地,增量同步请求指令除包括同步偏移地址外还包括内存数据库从机的运行号。其中运行号用于指示内存数据库当前正处于的工作流,若各个内存数据库的运行号相同,则说明这些内存数据库处于同一个工作流,反之处于不同的工作流,应理解地,处于不同工作流的内存数据库不能通过增量同步来保持数据的一致性。因此,容量判断模块320具体用于在确定内存数据库从机的运行号等于其运行号时,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。

  第一发送模块330,用于若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  具体地,第一发送模块330在判定当前需要同步到的数据的存储地址与同步偏移地址的差值不大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在增量同步缓存区中找到同步偏移地址对应的位置,接着将增量同步缓存区中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图6,图中最大地址表示增量同步缓存区中最新写入的数据的地址,增量同步缓存区中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。

  第二发送模块340,用于若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。

  具体地,第二发送模块340在判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在持久化数据保存文件中找到同步偏移地址对应的位置,接着将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图7,图中最大地址表示持久化数据保存文件中最新记录的数据的地址,持久化数据保存文件中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。可见,本发明实施例不同于现有技术的是,针对上述情况,可以通过持久化数据保存文件增量同步的方式代替增量同步缓存区增量同步的方式,进而保证了主从机数据的一致性,同时也避免了进行全量同步,从而提高了同步效率以及改善了内存数据库主机的处理性能。

  可选地,请参阅图5,如图所示本发明实施例中的内存数据库主机还可以包括第三发送模块350,用于当所述内存数据库从机的运行号不等于本机的运行号时,生成内存数据库镜像文件,并将其发送给所述内存数据库从机以实现全量同步。

  具体地,第三发送模块350在确定内存数据库从机的运行号不等于其运行号时,生成内存数据库镜像文件,并将其发送给内存数据库从机以实现全量同步。例如:一个新加入内存数据库集群的内存数据库从机,其运行号肯定不同于内存数据库主机的运行号,该内存数据库从机不能通过增量同步与内存数据库主机保持数据的一致性,在向内存数据库主机发送增量同步请求指令后,第三发送模块350执行内存数据库镜像文件全量同步。其中内存数据库镜像是包括内存数据库主机的内存中所有数据的一个数据包,内存数据库从机通过加载内存数据库镜像可以在其内存中写入内存数据库主机的内存中的所有数据,故为全量同步。具体实现过程中,第三发送模块350确定内存数据库从机的运行号不等于其运行号时,先向内存数据库从机发送全量同步消息以指示内存数据库从机做好全量同步的准备,接着生成内存数据库镜像文件,再将生成的内存数据库镜像文件通过FTP(File Transfer Protocol,文件传输协议)方式发送给内存数据库从机,最后内存数据库从机加载该内存数据库镜像,实现全量同步。

  又可选地,请参阅图5,如图所示本发明实施例中的内存数据库主机还可以包括缓存区创建模块360,用于在初始化时创建增量同步缓存区以保存临时数据。

  具体地,缓存区创建模块360在初始化时会创建一个增量同步缓存区。其中,内存数据库主机在向内存写入数据的时候,缓存区创建模块360同时会把数据写入增量同步缓存区。需要指出的是,增量同步缓存区是以环形存储的方式写入数据,即写入的数据超过增量同步缓存区的缓存大小时,会循环覆盖之前的数据,从而达到节省存储空间的目的,因而增量同步缓存区主要用于保存临时数据。

  又可选地,请参阅图5,如图所示本发明实施例中的内存数据库主机还可以包括文件记录模块370,用于在每次向内存写入数据时,将该数据记录到持久化数据保存文件中。

  具体地,内存数据库主机在每次向内存写入数据时,文件记录模块370会将该数据记录到持久化数据保存持久化数据保存文件中。具体实现过程中,文件记录模块370可以通过勾选配置文件中的appendonly选项实现上述功能。需要指出的是,不同于增量同步缓存区中写入的数据,持久化数据保存文件中记录的数据是文本格式(.txt),而不是二进制数据格式。内存数据库主机在向内存写入数据时,文件记录模块370同时会将这些数据一行一行地记录在持久化数据保存文件中,因而持久化数据保存文件中记录的数据基本与内存中写入的数据一致。

  由上可知,本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。

  在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

  此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

  流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

  在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

  应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

  本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

  以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

《内存数据库 技术文档5篇.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)