著录项信息
专利名称 | 内存数据库和物理数据库间的数据同步方法 |
申请号 | CN201010285234.7 | 申请日期 | 2010-09-16 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2011-01-12 | 公开/公告号 | CN101944114A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 深圳天源迪科信息技术股份有限公司 | 申请人地址 | 广东省深圳市高新技术产业园区南区南七道T3大厦B三层
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 深圳天源迪科信息技术股份有限公司 | 当前权利人 | 深圳天源迪科信息技术股份有限公司 |
发明人 | 蒋述庭;杨东洋;汪东升 |
代理机构 | 深圳市德力知识产权代理事务所 | 代理人 | 林才桂 |
摘要
本发明涉及一种内存数据库和物理数据库间的数据同步方法,包括:步骤1、以SQL操作的形式表示对源数据库的操作,将SQL操作分解为SQL语法和相应的SQL参数,注册操作源数据库的SQL语法和SQL参数,并将注册的SQL语法和SQL参数存储于SQL管理区中加以管理;步骤2、对于源数据库的数据变动,以SQL语法结合SQL参数的形式生成逻辑日志;步骤3、根据注册的SQL语法和SQL参数,将步骤2中的逻辑日志在目的数据库重做。本发明的内存数据库和物理数据库间的数据同步方法利用了一次prepare和多次execute机制,大大的提高了同步效率;降低了逻辑日志的大小,减少了系统传输损耗和磁盘空间的浪费;支持了同步应用和对应SQL的变化,支持了系统的升级和扩展。
1.一种内存数据库和物理数据库间的数据同步方法,其特征在于,包括:
步骤1、以SQL操作的形式表示对源数据库的操作,将SQL操作分解为SQL语法和相应的SQL参数,注册操作源数据库的SQL语法和SQL参数,并将注册的SQL语法和SQL参数存储于SQL管理区中加以管理;
步骤2、对于源数据库的数据变动,以SQL语法结合SQL参数的形式生成逻辑日志;
步骤3、根据注册的SQL语法和SQL参数,将步骤2中的逻辑日志在目的数据库重做;
步骤3中,每条逻辑日志关联一个SQL语法,在执行目的数据库的重做时,首先通过管理区中注册的SQL语法查找准备后的SQL语法,如果没有则进行SQL语法的准备,然后再执行SQL语法对目的数据库重做;
对于从内存数据库到物理数据库的数据同步:
步骤1中,当系统中能够操作内存数据库的应用进程开始运行时,该应用进程首先注册SQL语法和SQL参数到内存数据库,同时生成一份拷贝存储于SQL管理区中,该拷贝供执行物理数据库的日志重做用;
步骤2中,捕获系统中的应用进程对内存数据库的操作,以SQL语法结合SQL参数的形式生成逻辑日志;
步骤3中,根据注册的SQL语法和SQL参数,将步骤2中的逻辑日志在物理数据库中重做;
步骤2中生成逻辑日志后,系统还对生成的逻辑日志进行收集:对应于应用进程的每个线程关联一个事务缓冲区,用来存储一个事务所生成的逻辑日志;对应于每个应用进程关联一个应用缓冲区,用来存储该应用进程所有实例所生成的逻辑日志;然后每个应用进程再把所生成的逻辑日志存储到消息队列中;从消息队列中获取应用进程的逻辑日志并放在系统缓冲区中,并把系统缓冲区中的逻辑日志写入到内存数据库的日志文件中。
2.如权利要求1所述的内存数据库和物理数据库间的数据同步方法,其特征在于,使每个应用进程对内存数据库的操作对应一个SQL操作组,每个SQL操作组包括若干个SQL操作,每个SQL操作由SQL语法和SQL参数组组成。
3.如权利要求2所述的内存数据库和物理数据库间的数据同步方法,其特征在于,还包括:对于系统中所有需要进行数据同步的应用进程,建立应用名和对应的应用进程的关系、应用进程和对应的SQL操作组的关系。
4.如权利要求1所述的内存数据库和物理数据库间的数据同步方法,其特征在于,步骤3中,首先加载并解析内存数据库的日志文件,通过解析日志文件得到步骤2中所生成的逻辑日志,然后根据注册的SQL语法和SQL参数,把生成的逻辑日志在物理数据库中重做。
5.如权利要求1所述的内存数据库和物理数据库间的数据同步方法,其特征在于,步骤3中,在执行物理数据库的重做时,首先在管理区中注册的SQL语法中查找准备后的SQL语法,如果没有则进行SQL语法的准备,然后再执行SQL语法对物理数据库重做。
6.如权利要求1所述的内存数据库和物理数据库间的数据同步方法,其特征在于,对于从物理数据库到内存数据库的数据同步:
步骤1中,根据物理数据库的日志文件,在SQL管理区中设置SQL语法表和SQL参数表,分别用来注册操作物理数据库的SQL语法和SQL参数;
步骤2中,根据物理数据库的日志文件,设置逻辑日志表,当物理数据库的数据有变化时,通过物理数据库提供的触发器机制,将变化的数据写到逻辑日志表;
步骤3中,实时扫描逻辑日志表,根据注册的SQL语法和SQL参数,把步骤2对应的逻辑日志在内存数据库进行重做。
7.如权利要求6所述的内存数据库和物理数据库间的数据同步方法,其特征在于,步骤3中,在执行内存数据库的重做时:
步骤3.1、获取到逻辑日志后,根据SQL语法表获取准备后的SQL语法;
步骤3.2、如果获取准备后的SQL语法成功,直接执行步骤3.3;如果获取准备后的SQL语法失败,则在SQL语法表中获取SQL语法,然后执行内存数据库的准备操作,并在SQL参数表中获取参数,然后执行内存数据库的参数绑定操作,从而完成内存数据库的重做;
步骤3.3、根据逻辑日志拆分出所有的SQL参数,依次设置到SQL语法中,然后执行内存数据库的重做。
内存数据库和物理数据库间的数据同步方法\n技术领域\n[0001] 本发明涉及数据处理方法,尤其涉及一种内存数据库和物理数据库间的数据同步方法。\n背景技术\n[0002] 现代通信对计算机技术依赖性越来越强,在电信运营商的不断发展中,建立起各类信息系统,包括运营网络系统、综合营帐系统、计费系统、办公自动化系统、客户服务系统、大客户管理系统、经营分析与决策系统等等,这些系统积累了海量的有价值的数据资料,通过对这些资料进行数据挖掘、查询分析和联机分析,可以识别市场机会、制定市场策略,进一步改善客户关系。但是,这些数据资料过于庞大了,记录条数动辄以亿计,以中国移动为例,其全国移动电话用户总数已经超过三亿,许多省公司的用户规模都超过千万,对于如此庞大的数据量,传统的基于磁盘的物理数据库(RMDB)管理系统越来越难以应付,于是内存数据库(MDB)在电信领域出现了。\n[0003] 由于市场与技术的快速发展,电信业务在不断扩充,其运营和管理不断优化,传统的一些支撑系统的架构已经逐渐不能满足日益增长的业务要求和客户需求,引入一些新的技术来解决我们生产中遇到的问题是必然的。通过采用内存数据库来代替以前的共享内存技术,使得原来在内存中不标准的东西,包括接口、格式和管理都标准化了。\n[0004] 内存数据库,就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。同时内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。\n[0005] 相对于利用程序开发手段调用内存处理来说,内存数据库自有其优势。首先,内存数据库是产品化的数据库管理软件,极大缩短了开发周期;其次,内存数据库有着开放的平台和接口,程序开发和移植更加灵活便捷,也便于维护和二次开发;第三,可以通过使用统一的SQL语言方便地查询内存中的数据;最后,能在数据库中保障数据的安全性和完整性。\n这些优势,对于快速部署和简化维护都是有利的。\n[0006] 电信营业数据和计费系统中的数据总是在不断的变化中,这就涉及内存数据库中的数据和物理数据库(磁盘数据库)数据的同步问题。系统中的数据同步包括两部分:从内存数据库到物理数据库同步(反向同步)和从物理数据库到内存数据库的同步(正向同步)。\n[0007] 1、正向同步。这部分数据同步采用增量表的方式,营业系统或CRM(客户关系管理)新增或更新的数据将生成到物理数据库的增量表中,然后同步程序把这些数据同步到内存数据库中。由于增量表的数据量很小,以及数据同步的实时性强,不会影响计费程序。\n[0008] 2、反向同步。由于物理数据库的计费后台批价、累账数据几乎都加载到了内存数据库中,所以物理数据库对应的数据表将主要用于对内存数据库的数据备份和周边应用的数据查询。为了保证周边应用获取数据的正确性,把内存表的变动生成逻辑日志,然后由同步程序实时的向物理数据库中同步。\n[0009] 现有的数据同步方式需要记录大量的逻辑日志,数据同步效率不高,因此亟需改进。\n发明内容\n[0010] 本发明的目的在于提供一种高效率的内存数据库和物理数据库间的数据同步方法。\n[0011] 为实现上述目的,本发明提供一种内存数据库和物理数据库间的数据同步方法,包括:\n[0012] 步骤1、以SQL操作的形式表示对源数据库的操作,将SQL操作分解为SQL语法和相应的SQL参数,注册操作源数据库的SQL语法和SQL参数,并将注册的SQL语法和SQL参数存储于SQL管理区中加以管理;\n[0013] 步骤2、对于源数据库的数据变动,以SQL语法结合SQL参数的形式生成逻辑日志;\n[0014] 步骤3、根据注册的SQL语法和SQL参数,将步骤2中的逻辑日志在目的数据库重做。\n[0015] 其中,步骤3中,每条逻辑日志关联一个SQL语法,在执行目的数据库的重做时,首先通过管理区中注册的SQL语法查找准备后的SQL语法,如果没有则进行SQL语法的准备,然后再执行SQL语法对目的数据库重做。\n[0016] 一方面,对于从内存数据库到物理数据库的数据同步:\n[0017] 步骤1中,当系统中能够操作内存数据库的应用进程开始运行时,该应用进程首先注册SQL语法和SQL参数到内存数据库,同时生成一份拷贝存储于SQL管理区中,该拷贝供执行物理数据库的日志重做用;\n[0018] 步骤2中,捕获系统中的应用进程对内存数据库的操作,以SQL语法结合SQL参数的形式生成逻辑日志;\n[0019] 步骤3中,根据注册的SQL语法和SQL参数,将步骤2中的逻辑日志在物理数据库中重做。\n[0020] 其中,使每个应用进程对内存数据库的操作对应一个SQL操作组,每个SQL操作组包括若干个SQL操作,每个SQL操作由SQL语法和SQL参数组组成。\n[0021] 其中,还包括:对于系统中所有需要进行数据同步的应用进程,建立应用名和对应的应用进程的关系、应用进程和对应的SQL操作组的关系。\n[0022] 其中,步骤2中生成逻辑日志后,系统还对生成的逻辑日志进行收集:对应于应用进程的每个线程关联一个事务缓冲区,用来存储一个事务所生成的逻辑日志;对应于每个应用进程关联一个应用缓冲区,用来存储该应用进程所有实例所生成的逻辑日志;然后每个应用进程再把所生成的逻辑日志存储到消息队列中;从消息队列中获取应用进程的逻辑日志并放在系统缓冲区中,并把系统缓冲区中的逻辑日志写入到内存数据库的日志文件中。\n[0023] 其中,步骤3中,首先加载并解析内存数据库的日志文件,通过解析日志文件得到步骤2中所生成的逻辑日志,然后根据注册的SQL语法和SQL参数,把生成的逻辑日志在物理数据库中重做。\n[0024] 其中,步骤3中,在执行物理数据库的重做时,首先在管理区中注册的SQL语法中查找准备后的SQL语法,如果没有则进行SQL语法的准备,然后再执行SQL语法对物理数据库重做。\n[0025] 另一方面,对于从物理数据库到内存数据库的数据同步:\n[0026] 步骤1中,根据物理数据库的日志文件,在SQL管理区中设置SQL语法表和SQL参数表,分别用来注册操作物理数据库的SQL语法和SQL参数;\n[0027] 步骤2中,根据物理数据库的日志文件,设置逻辑日志表,当物理数据库的数据有变化时,通过物理数据库提供的触发器机制,将变化的数据写到逻辑日志表;\n[0028] 步骤3中,实时扫描逻辑日志表,根据注册的SQL语法和SQL参数,把步骤2对应的逻辑日志在内存数据库进行重做。\n[0029] 其中,步骤3中,在执行内存数据库的重做时:\n[0030] 步骤3.1、获取到逻辑日志后,根据SQL语法表获取准备后的SQL语法;\n[0031] 步骤3.2、如果获取准备后的SQL语法成功,直接执行步骤3.3;如果获取准备后的SQL语法失败,则在SQL语法表中获取SQL语法,然后执行内存数据库的准备操作,并在SQL参数表中获取参数,然后执行内存数据库的参数绑定操作,从而完成内存数据库的重做;\n[0032] 步骤3.3、根据逻辑日志拆分出所有的SQL参数,依次设置到SQL语法中,然后执行内存数据库的重做。\n[0033] 综上所述,本发明的内存数据库和物理数据库间的数据同步方法利用了一次prepare和多次execute机制,大大的提高了同步效率;降低了逻辑日志的大小,减少了系统传输损耗和磁盘空间的浪费;支持了同步应用和对应SQL的变化,支持了系统的升级和扩展。\n附图说明\n[0034] 下面结合附图,通过对本发明的具体实施方式详细描述,将使本发明的技术方案及其他有益效果显而易见。\n[0035] 附图中,\n[0036] 图1为本发明内存数据库和物理数据库间的数据同步方法的流程图;\n[0037] 图2为应用了本发明内存数据库和物理数据库间的数据同步方法的一较佳实施例的反向同步系统的结构示意图;\n[0038] 图3为图2所示的反向同步系统的反向同步的数据流图;\n[0039] 图4为应用了本发明内存数据库和物理数据库间的数据同步方法的一较佳实施例的正向同步系统的数据流图。\n具体实施方式\n[0040] 图1所示为本发明内存数据库和物理数据库间的数据同步方法的流程图。该方法包括:步骤1、以SQL操作的形式表示对源数据库的操作,将SQL操作分解为SQL语法和相应的SQL参数,注册操作源数据库的SQL语法和SQL参数,并将注册的SQL语法和SQL参数存储于SQL管理区中加以管理;步骤2、对于源数据库的数据变动,以SQL语法结合SQL参数的形式生成逻辑日志;步骤3、根据注册的SQL语法和SQL参数,将步骤2中的逻辑日志在目的数据库重做。\n[0041] 步骤3中,每条逻辑日志关联一个SQL语法,在执行目的数据库的重做时,首先通过管理区中注册的SQL语法查找准备后的SQL语法,如果没有则进行SQL语法的准备,然后再执行SQL语法对目的数据库重做。本发明通过把SQL语句拆分成SQL语法和动态参数,逻辑日志由SQL语法编号和动态参数组成,这样大大的降低了逻辑日志的大小,减少了系统传输损耗和磁盘空间的浪费。同时充分利用了SQL语法的一次prepare(准备)和多次execute(执行)机制,大大的提高了同步效率,减少了数据同步的时间延迟。\n[0042] 本发明的内存数据库和物理数据库间的数据同步方法适用于同时具有内存数据库和物理数据库的系统,这样的系统可以由若干台主机组成,内存数据库和物理数据库可以同时设置在于一台主机上,也可以分别设置在不同的主机上。例如,这样的系统可以是电信的营业数据和计费系统。系统中可以支持各种应用(应用程序)的运行,系统中处于运行状态的应用称为应用进程。本发明的内存数据库和物理数据库间的数据同步方法,同时支持从内存数据库到物理数据库同步(反向同步)和从物理数据库到内存数据库的同步(正向同步)。\n[0043] 图2所示为应用了本发明内存数据库和物理数据库间的数据同步方法的一较佳实施例的反向同步系统的结构示意图。此较佳实施例通过应用本发明的方法,在具有内存数据库和物理数据库间的系统中实现了支持数据的反向同步和正向同步,根据数据同步的方向,该较佳实施例可以划分为反向同步系统和正向同步系统两部分。\n[0044] 首先参照图2来详细说明该较佳实施例的反向同步系统。\n[0045] 1反向同步\n[0046] 在此较佳实施例中,反向同步是基于数据库的日志重做机制来实现,从而可支持多进程和多线程的混合编程模式。反向同步程序(反向同步系统)对外提供操作内存数据库API(Application Programming Interface,应用程序编程接口)和动态库的二次开发包(mdbutil开发包,用于连接内存数据库),应用基于该接口开发的反向同步程序(反向同步系统)支持内存数据库到物理数据库的同步。系统中的应用进程(应用1)对内存数据库的操作,被内存数据mdbutil开发包捕获并记录于内存数据库的逻辑日志中,然后通过反向同步程序(反向同步系统)进行日志的持久化(写入日志文件)和物理数据库的日志重做。mdbutil开发包由应用管理、SQL管理和日志管理三大模块组成。所有的管理信息都存储在系统的共享存储区,保证了系统信息的安全。反向同步系统的结构具体说明如下。\n[0047] 1.1系统结构\n[0048] 1.1.1应用管理\n[0049] 管理主机(系统)中所有需要同步的应用进程,对于系统中所有需要进行数据同步的应用进程,维护建立应用名和对应应用进程的关系、应用进程和对应SQL操作组的关系。反向同步程序启动时首先调用mdbutil的初始化动作,同时对应的应用名、进程信息注册到同步系统中。\n[0050] 1.1.2SQL管理\n[0051] SQL管理模块负责内存数据库中的SQL语法和对应参数的管理。也就是说,对应于本发明的步骤1,将表示SQL操作的SQL语句分解为SQL语法和对应的参数的形式,同时,当应用开始在内存中形成应用进程时,应用进程注册该应用更改内存数据库时可能用到的SQL语法和对应的参数到内存数据库,同时生成一份拷贝存储在SQL管理区,该拷贝供执行物理数据库的日志重做用。以SQL语言来描述,SQL管理区中的主要的数据结构如下:\n[0052] //SQL 语法\n[0053] typedef struct\n[0054] {\n[0055] TUINT8id:8; //应用编号\n[0056] TUINT8oper:8; //操作序号\n[0057] TINT8sql[MDBUTIL_SYNC_SQL_LEN-2];//SQL语句\n[0058] }SSQLSyntax;\n[0059] //SQL参数\n[0060] typedef struct\n[0061] {\n[0062] TUINT32type; //参数类型\n[0063] TUINT32size; //参数大小\n[0064] }SSQLParam;\n[0065] //SQL参数组\n[0066] typedef struct\n[0067] {\n[0068] TINT32num; //参数数目\n[0069] TINT32unused; //占位符\n[0070] SSQLParam array[MDBUTIL_SYNC_SQL_PARAM_NUM];\n[0071] }SSQLParams;\n[0072] //SQL操作\n[0073] typedef struct\n[0074] {\n[0075] SSQLSyntax syntax; //SQL语法\n[0076] SSQLParams params; //SQL参数\n[0077] }SDMLOper;\n[0078] //SQL操作组\n[0079] typedef struct\n[0080] {\n[0081] SSemLock lock; //原子锁\n[0082] TUINT32 id:8; /应用编号\n[0083] TUINT32 flag:8; //使用标志\n[0084] TUINT32 num:16; //SQL数目\n[0085] TUINT32 unused; //占位符\n[0086] SDMLOper group[MDBUTIL_SYNC_SQL KIND_SIZE];\n[0087] }SDMLOperGroup;\n[0088] 数据结构的定义由小到大,使每个应用进程对内存数据库的操作都会对应一个SQL操作组(SDMLOperGroup)。每个SQL操作组包括若干个SQL操作,每个SQL操作都是由SQL语法(SSQLSyntax)和SQL参数组(SSQLParams)组成。\n[0089] 1.1.3日志管理\n[0090] 主要负责逻辑日志的生成、打包(逻辑日志的收集)、落地(生成日志文件,日志文件是所有逻辑日志的综合)和重做(对物理数据库)。对应于本发明的步骤2,反向同步程序捕获系统中的应用进程对内存数据库的操作,以SQL语法结合SQL参数的形式生成逻辑日志。以SQL语言来描述,本发明所采用的逻辑日志的结构定义如下:\n[0091] //逻辑日志头\n[0092] typedef struct\n[0093] {\n[0094] TUINT32 id:8; //应用编号\n[0095] TUINT32 oper:8; //SQL编号\n[0096] TUINT32 len:16; //日志长度\n[0097] TUINT32 seq; //日志序号\n[0098] }SLogicHead;\n[0099] //type-length-value\n[0100] typedef struct\n[0101] {\n[0102] TUINT32 type:4; //数据类型\n[0103] TUINT32 len:12; //数据长度\n[0104] TUINT8 value[2]; //数值\n[0105] TUINT8 unused[MDBUTIL_SYNC_PARAM_LEN];\n[0106] }STLV;\n[0107] //逻辑日志体\n[0108] typedef struct\n[0109] {\n[0110] STLV tlv[1]; //数组\n[0111] }SLogicBody;\n[0112] //逻辑日志\n[0113] typedef struct\n[0114] {\n[0115] SLogicHead head;\n[0116] SLogicBody body;\n[0117] }SLogicLog;\n[0118] //公共缓冲头\n[0119] typedef struct\n[0120] {\n[0121] TUINTL id; //编号\n[0122] TUINT32 num; //数目\n[0123] TUINT32 len; //长度\n[0124] }SLogBufHead;\n[0125] //事务逻辑日志缓冲头\n[0126] typedef struct\n[0127] {\n[0128] SLogBufHead com; //公共部分\n[0129] TUINT32 start; //开始时间\n[0130] TUINT32 group; //操作组\n[0131] TUINT64 unused;\n[0132] }STransLogBufHead;\n[0133] //事务逻辑日志缓冲\n[0134] typedef struct\n[0135] {\n[0136] STransLogBufHead head; //缀冲头\n[0137] TINT8buf[MDBUTIL_SYNC_PLACE HOLD];//数据缓冲\n[0138] }STransLogBuf;\n[0139] 其中,逻辑日志是操作数据库的最小单位,事务日志是同步操作的最小单位,事务日志是由一个或多个逻辑日志组成。\n[0140] 1.1.3.1逻辑日志\n[0141] 逻辑日志由日志头和日志体两部分组成,其中日志体由一组参数(数目可以为0)组成,每个参数由TLV(type-length-value,类型一长度-值)结构来存储。日志头由id(编号)、oper(操作)、len(长度)和seq(序号)组成,其中id和oper用来指向唯一的SQL操作,len表示逻辑日志的长度,seq表示事务中的序号。\n[0142] 1.1.3.2事务日志\n[0143] 事务是逻辑日志的组合,由缓冲头和缓冲区两部分组成。缓冲头由id、num(数目)、len、start(开始时间)和group(操作组)组成,其中id是执行内存数据库的事务序号。逻辑日志是按照执行顺序存储到缓冲区中。\n[0144] 按照本发明的步骤3,生成逻辑日志可以根据SQL管理区中注册的SQL语法和SQL参数在物理数据库中重做,由于生成逻辑日志为SQL语法结合SQL参数的结构,充分利用了SQL语法的一次prepare(准备)和多次execute(执行)机制,大大的提高了同步效率。\n[0145] 以上为反向同步系统的系统结构,说明了本发明中应用与SQL语句(分解为语法和参数),SQL语句和逻辑日志的关系,应用对内存数据库的操作以分解为SQL语法和参数的SQL语句来表示,同时使用SQL语法和参数来生成逻辑日志。相较于现有的数据同步方法,本发明的同步程序支持应用和SQL操作的动态的增加,从而支持了系统进行平滑的升级。通过SQL语法和参数的拆分,大大的减少了数据传输,提高了同步的执行效率。\n[0146] 对于从内存数据库到物理数据库同步的过程来说,逻辑日志重做是整个同步的核心内容,有逻辑日志打包,逻辑日志的落地以及逻辑日志在物理数据库的执行等等。\n[0147] 如图3所示,其为图2所示的反向同步系统的反向同步的数据流图,图3中通过动态的逻辑日志来展示同步的工作模式。\n[0148] 1.2数据流转\n[0149] 数据流转主要是表示日志由少到多的收集过程,从逻辑日志到事务缓冲(T Buf),再到应用缓冲(App Buf),再到消息队列(Queue),到系统缓冲(SysBuf),到日志文件(Log file),最终执行到物理数据库。整个收集过程类似于海水的形成,小溪、河流、江和海。\n[0150] 首先对应于应用进程(应用1,应用2......)的每个线程关联一个事务缓冲区,用来存储一个事务的逻辑日志;对应于每个应用有一个应用缓冲区,用来存储该应用所有实例的日志;然后由每个应用再把逻辑日志存储到消息队列中。反向同步程序从消息队列中获取应用日志并放在系统缓冲区(SysBuf)中,并把系统缓冲区中的逻辑日志写入到日志文件中。最后同步程序加载并解析日志文件,把逻辑日志在物理数据库中重做。\n[0151] 数据的整个流转过程,充分利用了SQL语法的一次prepare(准备)和多次execute(执行)机制。大大的提高了同步效率,减少了数据同步的时间延迟。每条逻辑日志会关联一个SQL语法,在执行物理数据库操作时,首先查找prepare后的SQL语法,如果没有则进行SQL语法的prepare,然后再进行SQL语法execute。通过SQL语法的延迟,支持了应用和SQL的动态增加。\n[0152] 1.3动态同步\n[0153] 参考现有的数据同步系统,如果捕获的逻辑日志是SQL语句(没有动态参数),那么系统本身就支持动态的同步。但是现有的这种同步方式一方面增加了记录逻辑日志量,浪费了大量的磁盘存储空间;同时没有充分利用数据库的一次prepare和多次execute机制,数据同步效率不高,不足以支撑实时交易系统应用。\n[0154] 而在本发明中,首先通过把SQL语句拆分成SQL语法和动态参数,逻辑日志由SQL语法编号和动态参数组成。这样大大的降低了逻辑日志的大小,减少了系统传输损耗和磁盘空间的浪费。同时利用了一次prepare和多次execute机制,大大的提高了同步效率,在执行物理数据库的重做时,首先在管理区中注册的SQL语法中查找准备后的SQL语法,如果没有则进行SQL语法的准备,然后再执行SQL语法对物理数据库重做。\n[0155] 其次本发明中应用和SQL的动态增加,支持了同步应用和对应SQL的变化,支持了系统的升级和扩展;通过延迟物理数据库SQL语法的prepare,保证了新加入的SQL语法可以重做。SQL的动态增加和延迟SQL语法的prepare,共同完成了反向的动态同步。其实整个同步过程也是一次prepare多次execute。\n[0156] 2正向同步\n[0157] 在此较佳实施例中,正向同步系统(正向同步程序)是基于物理数据库的触发器机制实现,这是由于物理数据库的存储方式和操作方式有别于内存数据库。首先,由于物理数据库的本身性能不高,触发器本身的性能损耗对物理数据库应用性能影响不大;其次,物理数据库的操作入口较多,前台、数据库终端、应用的OCI接口(ORACLE调用接口)等等都可以作为物理数据库的操作入口,因此触发器可以作为物理数据库数据变动的唯一入口。\n当物理数据库的数据有变化时,通过物理数据库自身提供的触发器机制,将变化的数据写到物理数据库的逻辑日志表。然后由正向同步程序(正向同步系统)实时扫描物理数据库的逻辑日志表,并把对应逻辑日志在内存数据库进行重做。\n[0158] 如图4所示,其为应用了本发明内存数据库和物理数据库间的数据同步方法的一较佳实施例的正向同步系统的数据流图。在此较佳实施例中,应用(前台、数据库终端、应用的OCI接口等等)对物理数据库的操作通过触发器机制反映到物理数据库的逻辑日志表,正向同步程序(正向同步系统)通过接口表与物理数据库进行联系,接口表由物理数据库的逻辑日志表及SQL管理区的SQL语法表和SQL参数表组成。\n[0159] 从物理数据库到内存数据库的数据同步时,按照本发明的步骤1,根据物理数据库的日志文件,在SQL管理区中设置SQL语法表和SQL参数表,分别用来注册操作物理数据库的SQL语法和SQL参数;然后按照本发明步骤2,根据物理数据库的日志文件,设置逻辑日志表,当物理数据库的数据有变化时,通过物理数据库提供的触发器机制,将变化的数据写到逻辑日志表;按照本发明步骤3,实时扫描逻辑日志表,根据注册的SQL语法和SQL参数,把步骤2对应的逻辑日志在内存数据库进行重做。该较佳实施例中,接口表的设计如下:\n[0160] 2.1接口表设计\n[0161] 2.1.1逻辑日志表\n[0162] \n[0163] \n[0164] 2.1.2SQL语法表\n[0165] \n[0166] 2.1.3SQL参数表\n[0167] \n[0168] \n[0169] 2.1按照本发明步骤3执行内存数据库的重做时的数据流\n[0170] 2.1.1正向同步程序获取到逻辑日志后,根据SQL语法表中的TABLE_ID和OPR_TYPE获取prepare后的SQL语法。\n[0171] 2.1.2获取prepare后的SQL语法成功,直接执行下一步。否则,根据TABLE_ID和OPR_TYPE在SQL语法表获取SQL语法,然后执行内存数据库的prepare操作;在SQL参数表中获取参数,然后依次执行内存数据库的参数绑定操作,从而完成内存数据库的重做。\n[0172] 2.1.3根据逻辑日志中的SYN_DATA,拆分出所有的参数,依次设置到SQL语法中,然后执行内存数据库的execute操作,最终完成了内存数据的重做,使内存数据库的数据与物理数据库中的数据同步。\n[0173] 本发明的内存数据库和物理数据库间的数据同步方法实现了内存数据库和物理数据库的数据桥梁,对外提供统一的数据视图;通过在应用和数据库之间加入数据控制层,能够在完成正常的数据操作的同时,把数据变动复制到目的数据库中。\n[0174] 综上所述,本发明的内存数据库和物理数据库间的数据同步方法利用了一次prepare和多次execute机制,大大的提高了同步效率;降低了逻辑日志的大小,减少了系统传输损耗和磁盘空间的浪费;支持了同步应用和对应SQL的变化,支持了系统的升级和扩展。\n[0175] 以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明后附的权利要求的保护范围。
法律信息
- 2012-07-25
- 2011-03-09
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201010285234.7
申请日: 2010.09.16
- 2011-01-12
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2009-02-18
|
2008-09-25
| | |
2
| |
2008-05-28
|
2007-12-11
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |