一种内存数据库主备同步方法及系统的制作方法

文档序号:6585573阅读:170来源:国知局
专利名称:一种内存数据库主备同步方法及系统的制作方法
技术领域
本发明涉及数据库领域,特别是涉及一种内存数据库主备同步方法及系统。
背景技术
内存数据库是近年出现的一种新型数据库,随着计算机内存的价格大幅度降低, 把数据放在内存中以提高整个系统的处理能力变得可行。在通讯行业,随着3G时代的到来,迅速实时处理数据成为普遍的需求,系统的安 全、稳定、大容量、高的吞吐量及快速的响应能力是对内存数据库的基本要求。数据库系统 的安全通常是采用复制的方式实现,当主数据库出现问题时,备用数据库能够自动接管并 迅速提供服务。但使用内存数据库后,在系统复制备份方面也提出了新的挑战。因为主数据库 (Master)要求很高的数据吞吐量,常常优化其并发处理能力,在实际系统中,要求采用多个 应用进程进行处理。但在客户端(Client),其处理一定是串行的,因为Client必须按照序列号LSN产 生的顺序重新做数据库操作。这样导致客户端无法跟上Master端的情况发生。不仅如此, 还可能导致大量数据包聚集在Master的TCP缓冲区中,甚至导致应用程序阻塞在发送命令 处,最终影响系统稳定性和应用程序性能。目前,不论是商用的内存数据库还是自行研发的内存数据库,都是采用传统数据 库的复制方式。内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计 了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处 理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大特 点是其“主拷贝”或“工作版本”常驻内存,即活动事务只与实时内存数据库的内存拷贝打交 道。显然,这要求较大的内存量,但并非任何时刻整个数据库都存放在内存,即内存数据库 系统还是要处理I/O。尽管内存数据库已不是传统磁盘数据库的概念,但是内存数据库本质 上还是数据库,也具有一般数据库的基本功能完成各种数据操作,如查询处理、存取、完整 性检查;对存取的控制和安全性检验;永久数据的管理,包括数据库的定义、存储、维护等。在内存数据库的复制方面,一般采用传统数据库的复制方式,即每个需要复制的 Client向Master端登记。随着Master端应用程序不断产生数据变化,其操作记录以LOG 信息的方式由TCP/IP协议发送到每个Client,Client根据LOG信息重新执行LOG信息中 记录的操作,从而保证Client的数据和Master端的数据一致。这样在Master端出现问题 时,客户端能够接管继续为应用程序提供服务。在传统的数据库复制系统中,主数据库侦测到自身的变化,主动把变化的LOG信 息发送到各个注册的客户端。因为LOG文件和数据库主要都放在磁盘上,当大量的数据写 入数据库中时,主数据库端和客户端都无法及时把所有的数据写入到磁盘中,使得应用程 序的效率降低,但主数据库端和客户端的数据基本上能够维持同步。
在内存数据库的复制系统中,如果在主数据库端存在很多个并发进程,每个进程 都有大量的数据写入到数据库中,客户端由于必须串行的缘故,肯定不能和主数据库端保 持同步,如果仍然采用传统数据库的复制方式,则可能导致两个问题,一是系统阻塞在Send 函数处;二是大量数据聚集在主数据库端的TCP发送缓冲区中等待发送。如果阻塞在Send函数中,那么整个系统的性能将受到影响。如果阻塞在TCP的缓 冲区中,那么当客户端出现问题需要重新请求时,这些数据都必须废弃,但由于这些数据已 经被操作系统管理,都会发送到客户端,而由客户端忽略。主数据库端则需要重新发送数 据,从而导致整个系统性能降低。

发明内容
本发明的目的是提供一种内存数据库主备同步方法及系统,用于在复制过程中一 次不会交互太多的数据,使复制过程不影响主数据库端应用程序的性能。本发明提供一种内存数据库主备同步方法,所述方法包括以下步骤建立主数据库端和客户端之间的主备关系;接收客户端复制主数据库中LOG信息请求;将所述主数据库端中LOG信息发送到所述客户端。优选地,每个LOG信息具有一个序列号LSN。优选地,所述主数据库端的应用程序不断产生LOG信息,最新的LSN称为 NEWEST-LSN。优选地,所述客户端接收到所述主数据库端发送的最新LOG信息,称为LAST-LSN。优选地,所述接收客户端复制主数据库中LOG信息请求中包括所述客户端需要的 最后一个LOG信息的序列号LSN,称为WAITING-LSN。优选地,所述接收客户端复制主数据库中LOG信息请求中,包括WAITING-LSN和 LAST-LSN ;将所述主数据库端中序列号在LAST-LSN和WAITING-LSN之间的LOG信息发送到 所述客户端。优选地,所述客户端根据NEWEST-LSN,调整WAITING-LSN,使得WAITING-LSN小于 或者等于NETOST-LSN。优选地,所述客户端在预定时间段内没有收到所述主数据库端发送的LOG信息, 将WAITING-LSN赋值为LAST-LSN,发送所述主数据库端。本发明还提供一种内存数据库主备同步系统,所述系统包括主数据库端和客户 端,以及主备关系建立单元。主备关系建立单元,用于建立主数据库端和客户端之间的主备关系;主数据库端包括主数据库端接收单元,用于接收客户端复制主数据库中LOG信息请求;主数据库端数据区,用于存储LOG信息;主数据库端发送单元,用于将所述主数据库端数据区中的LOG信息发送到所述客 户端。优选地,所述客户端包括
客户端接收单元,用于接收所述主数据库端发送单元发送的LOG信息;客户端数据区,用于存储所述客户端接收单元接收到的LOG信息;客户端发送单元,用于向所述主数据库端接收单元发送复制主数据库中LOG信息 请求。与现有技术相比,本发明具有以下优点本发明实施例所述内存数据库主备同步方法,由于采用由客户端向主数据库端主 动请求数据——LOG信息的方式,实现主数据库的复制——主备同步,这样在复制过程中一 次不会交互太多的数据。在客户端出现问题时,主数据库端可以根据客户端的主动请求,发 送需要发送的数据——LOG信息。当主数据库端数据产生速度大于客户端的处理速度时, 客户端只是单纯地落后于主数据库端。当主数据库端产生数据的速度降低时,客户端能够 逐步跟上,从而实现主备同步。


图1为本发明第一实施例所述内存数据库主备同步方法流程图;图2为本发明第二实施例所述内存数据库主备同步方法流程图;图3为本发明第一实施例所述内存数据库主备同步系统结构图;图4为本发明实施例所述主数据库端的结构示意图;图5为本发明实施例所述客户端的结构示意图。
具体实施例方式本发明的目的是提供一种内存数据库主备同步方法及系统,用于在复制过程中一 次不会交互太多的数据,从而复制过程不影响主数据库端应用程序的性能。为了便于本领域技术人员的理解,以下具体介绍几个名词的解释。内存数据库将数据全部放在内存中的数据库。内存数据库主要是为了提高数据 库的处理能力而出现的。复制application)在生产网络中,为保证数据的安全,通常部署两套数据 库系统,其中一套实时或者定期把数据拷贝到另外一套数据库叫复制,也可以叫同步 (synchronization)0主数据库端(Master)在复制系统中,接收生产系统的数据的数据库,主数据库 端是可读写的。客户端(Client)也叫备用端(Standby),在复制系统中,从主数据库接收数据的 数据库,客户端通常是只读的。复制代理(Implication Agent)在复制系统中,负责建立和管理Master (或者 Client)连接,传输LOG信息的软件部分。Master端和Client都有复制代理。在本文中, 均简称代理(Agent)。共享内存(Share Memory)由操作系统分配的、可以供多个应用程序或者进程访 问的一块内存空间,共享内存通过映射到不同的进程的地址空间,使各个进程看起来和自 己进程中其他内存是一样的,访问方式也相同,各个进程通过使用锁或者其他同步方法控 制对共享内存的访问,以防止同时修改同一块地址从而导致数据不一致。在本文中,共享内
5存用来存放数据库的数据。为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。参见图1,该图为本发明第一实施例所述内存数据库主备同步方法流程图。本发明第一实施例所述内存数据库主备同步方法,包括以下步骤S100、建立Master端和Client端之间的主备关系。Master和Client均包括数据区、应用程序、复制代理(Agent)和LOG信息。在Master端,应用程序可以修改数据区数据,并通过LOG信息的形式记录下来。在Client端,应用程序只能读取数据区数据,而通常不做修改。为提高处理能力,数据区通常放在共享内存中,应用程序通过操作系统直接操作 共享内存,代理程序不控制应用程序对数据库的操作,各个应用程序主要通过操作系统的 锁来协调相互之间的操作,防止多个应用程序同时修改同一块数据,从而既保证系统能够 并发,又保证了数据的一致性。S200、接收Client端复制主数据库中LOG信息请求。每个LOG信息都具有一个序列号LSN。LSN(Log Sequence Numbers) :L0G序列号。每次对数据库有影响的操作到会以LOG 的方式记录下来,每个LOG分配一个序列号,这样按序列号重新执行LOG中的记录信息,可 以得到当前数据库一致的数据。所述Master端的应用程序不断产生LOG信息,最新的LSN称为NEWEST-LSN。所述接收Client端复制主数据库中LOG信息请求中包括所述Client端所期待的 最后一个LOG信息的序列号LSN,称为WAITING-LSN。WAITING-LSN小于或者等于NETOST-LSN,大于或者等于LAST-LSN。S300、将所述Master端LOG信息发送到所述Client端。所述Client端接收到所述Master端发送的最新LOG信息,称为LAST-LSN。LAST-LSN 在复制系统中,Client收到来自Master端的LOG信息,客户端接收的 最新的LSN为LAST-LSN,也叫已接收的LSN。本发明第一实施例所述内存数据库主备同步方法,由于采用由客户端主动向主数 据库端请求数据——LOG信息的方式,实现主数据库的复制——主备同步,这样在复制过程 中一次不会交互太多的数据。在Client端出现问题时,Master端可以根据Client端的主 动请求,发送需要发送的数据——LOG信息。当Master端数据产生速度大于Client端的处 理速度时,Client只是单纯地落后Master,而当Master端产生数据的速度降低时,Client 端能够逐步跟上,复制数据。参见图2,该图为本发明第二实施例所述内存数据库主备同步方法流程图。本发明第二实施例所述内存数据库主备同步方法,包括以下步骤1. Client端的Agent首先连接到Master端的Agent,Master的Agent接受连接 后,先确认两者之间的主备关系,并且把Master端的LOG信息NEWEST-LSN发送到Client 端。2. Client端在每收到一个来自于Master端的LOG信息时,分析LOG信息,从中提 取NETOST-LSN。当NETOST-LSN大于或者等于WAITING-LSN时,Client按一定的规则修改WAITING-LSN,并把 LAST-LSN 和 WAITING-LSN —起发送到 Master 端。3. Master 端接收到来自 Client 端的 LAST-LSN 和 WAITING-LSN 后,从 LOG 文件中 读取LOG,先把LOG指针移到LAST-LSN处,反复读取LOG信息并且发送到Client端,如果读 取的LOG信息中LSN大于或者等于WAITING-LSN时,则停止读取。通过以上反复循环,Master端的LOG信息分批发送到了 Client端,但因为是 Client端主动请求的,Master端不会有太多的数据累积在缓冲区中。在缓冲区是LAST-LSN 到WAITING-LSN之间的数据,而这些数据的大小是可以调整的。所述Client 端可以根据 NETOST-LSN,调整 WAITING-LSN,使得 WAITING-LSN 小于 或者等于NETOST-LSN。WAITING-LSN 和 LAST-LSN—起由 Client 发送到 Master。Master 收到以后,将从 LAST-LSN 到 WAITING-LSN 的 LOG 信息发送到 Client 端。LAST-LSN 和 WAITING-LSN 间的距 离不能太大也不能太小。以LOG文件为10MB计,两者相差约为5个文件,即大约50MB。WAITING-LSN还可以根据NEWEST-LSN调整,如果根据LAST-LSN计算出来的 WAITING-LSN 大于 NETOST-LSN,则 WAITING-LSN 等于 NETOST-LSN。Master端在发送LOG信息到Client端时,如果发生LOG文件切换(LOG文件以 10MB为单位),则把NEWEST-LSN也发送到CIient端。CIient端根据NEWEST-LSN调整 WAITING-LSN,防止 WAITING-LSN 大于 NEWEST-LSN。如果Master端的应用程序对数据库不做修改,即没有LOG文件产生。那么即使 Client端请求LOG信息,Master端也不会发送LOG信息,Client端将没有机会发送下一次 请求。因此,所述Client端可以设定在预定时间段内,如果没有收到所述Master端发送的 LOG信息,将WAITING-LSN赋值为LAST-LSN,发送到所述Master端。具体实现在Client端设置一个定时器,如果超过上述预定时间没有收到Master 端的LOG信息,即以当前LAST-LSN计算WAITING-LSN并发送到Master。为防止重复发送, Client端还需要记录SEND-LSN,即已经发送的LSN,如果LAST-LSN等于SEND-LSN则不发 送。如果超过一个时间阀值(例如1小时)内LAST-LSN仍然没有得到更新,Client 端向Master端发送状态信息,请求Mater端发送NEWEST-LSN,重新计算看是否应该发送 LAST-LSN和WAITING-LSN到Master,如果Master确实没有更新,则不发送,否则请求最新 的LOG信息。本发明还提供一种内存数据库主备同步系统,用于在复制过程中一次不会交互太 多的数据,使复制过程不影响主数据库端应用程序的性能。参见图3至图5,图3为本发明实施例所述内存数据库主备同步系统结构图;图4 为本发明实施例所述主数据库端的结构示意图;图5为本发明实施例所述客户端的结构示 意图。本发明实施例所述内存数据库主备同步系统,包括主数据库端1和客户端2,以及 主备关系建立单元3。主备关系建立单元3,用于建立主数据库端1和客户端2之间的主备关系。主数据库端1包括主数据库端接收单元11,用于接收客户端2复制主数据库中LOG信息请求;
主数据库端数据区12,用于存储LOG信息;主数据库端发送单元13,用于将所述主数据库端数据区12中的LOG信息发送到所 述客户端2。客户端2可以包括客户端接收单元21,用于接收所述主数据库端发送单元发送的LOG信息;客户端数据区22,用于存储所述客户端接收单元接收到的LOG信息;客户端发送单元23,用于向所述主数据库端接收单元发送复制主数据库中LOG信 息请求。Master端和Client端均包括数据区、应用程序、复制代理(Agent)程序和LOG信 肩、o为提高处理能力,数据区通常放在共享内存中,应用程序通过操作系统直接操作 共享内存即数据区,复制代理程序不控制应用程序对数据库的操作,各个应用程序主要通 过操作系统的锁来协调相互之间的操作,防止多个应用程序同时修改同一块数据,从而既 保证系统能够并发,有保证了数据的一致性。在Master端,应用程序可以修改数据库,并通过LOG信息或称LOG文件的形式记 录下来。在Client端,应用程序只能读取数据库,而通常不做修改。应用程序的工作步骤应用程序产生数据,先写L0G,再然后写数据区,写完后直 接返回,再处理新的业务,这样应用程序可以获得最大的性能提高。Master端的复制代理(Agent)负责从LOG中读取数据,然后通过TCP/IP协议把数 据发送到Client端的复制代理,Client端的复制代理收到Master端的数据后,也是先写 L0G,然后再更新数据区。这样的实现充分保证了应用程序的性能,同时最大限度地保证了 数据的安全。以上对本发明所提供的内存数据库主备同步方法及系统进行了详细介绍,本文中 应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助 理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想, 在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本 发明的限制。
权利要求
一种内存数据库主备同步方法,其特征在于,所述方法包括以下步骤建立主数据库端和客户端之间的主备关系;接收客户端复制主数据库中LOG信息请求;将所述主数据库端中LOG信息发送到所述客户端。
2.根据权利要求1所述的方法,其特征在于,每个LOG信息具有一个序列号LSN。
3.根据权利要求2所述的方法,其特征在于,所述主数据库端的应用程序不断产生LOG 信息,最新的LSN称为NEWEST-LSN。
4.根据权利要求3所述的方法,其特征在于,所述客户端接收到所述主数据库端发送 的最新LOG信息,称为LAST-LSN。
5.根据权利要求4所述的方法,其特征在于,所述接收客户端复制主数据库中LOG信息 请求中包括所述客户端需要的最后一个LOG信息的序列号LSN,称为WAITING-LSN。
6.根据权利要求5所述的方法,其特征在于,所述接收客户端复制主数据库中LOG信息 请求中,包括 WAITING-LSN 和 LAST-LSN ;将所述主数据库端中序列号在LAST-LSN和WAITING-LSN之间的LOG信息发送到所述 客户端。
7.根据权利要求5所述的方法,其特征在于,所述客户端根据NEWEST-LSN,调整 WAITING-LSN,使得 WAITING-LSN 小于或者等于 NETOST-LSN。
8.根据权利要求5所述的方法,其特征在于,所述客户端在预定时间段内没有收到所 述主数据库端发送的LOG信息,将WAITING-LSN赋值为LAST-LSN,发送所述主数据库端。
9.一种内存数据库主备同步系统,其特征在于,所述系统包括主数据库端和客户端,以 及主备关系建立单元。主备关系建立单元,用于建立主数据库端和客户端之间的主备关系; 主数据库端包括主数据库端接收单元,用于接收客户端复制主数据库中LOG信息请求; 主数据库端数据区,用于存储LOG信息;主数据库端发送单元,用于将所述主数据库端数据区中的LOG信息发送到所述客户端。
10.根据权利要求9所述的系统,其特征在于,所述客户端包括客户端接收单元,用于接收所述主数据库端发送单元发送的LOG信息;客户端数据区,用于存储所述客户端接收单元接收到的LOG信息;客户端发送单元,用于向所述主数据库端接收单元发送复制主数据库中LOG信息请求。
全文摘要
本发明涉及一种内存数据库主备同步方法,包括以下步骤建立主数据库端和客户端之间的主备关系;接收客户端复制主数据库中LOG信息请求;将所述主数据库端中LOG信息发送到所述客户端。本发明提供一种内存数据库主备同步方法及系统,用于在复制过程中一次不会交互太多的数据,使复制过程不影响主数据库端应用程序的性能。
文档编号G06F17/30GK101876997SQ200910246100
公开日2010年11月3日 申请日期2009年12月1日 优先权日2009年12月1日
发明者王征, 袁晓鹏 申请人:广州从兴电子开发有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1