外文翻译-一种日志优化算法在地震前兆观测系统数据同步中的应用_第1页
外文翻译-一种日志优化算法在地震前兆观测系统数据同步中的应用_第2页
外文翻译-一种日志优化算法在地震前兆观测系统数据同步中的应用_第3页
外文翻译-一种日志优化算法在地震前兆观测系统数据同步中的应用_第4页
外文翻译-一种日志优化算法在地震前兆观测系统数据同步中的应用_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一种日志优化算法在地震前兆观测系统数据同步中的应用刘庆杰 1 , 王晨 2 , 王茂发 1 1) 防灾科技学院灾害信息工程系,三河,河北,中国2) 中国地震局地球研究所,北京,中国摘 要 在基于用户自定义操作日志进行数据库同步的地震前兆台网观测系统中,台站和区域中心数据库因为存在数据多次预处理和数据重新采集的原因,操作日志表存在同一预处理数据和采集数据的多次更新、删除的记录,这种针对同一数据的多条操作日志记录会影响整个前兆数据交换的效率。针对该问题,我们在最新的地震前兆台网数据交换方案中,提出一种自定义操作日志的优化算法,通过计算合并自定义的操作日志,在操作日志表中,只保留数据同步需要的该数据的最后一次操作记录,从而大大减少网络数据流量,提高数据库同步的效率。关键词 数据交换; 数据操作日志; 日志优化; 数据事务隔离A log optimization algorithm application in the earthquake precursor system data synchronization Liu Qingjie1, Wang Chen2, Wang Maofa11) Demartment Of Disaster Information Engineering,Institute Of Disaster Prevention Science And Technology,San He,He Bei Mrovince,China()2) Institute of Geophysics ,China Earthquake Administration,BeiJing, ChinaAbstractIn based on user-defined operation database synchronization logs earthquake precursor network observation system, stations and regional centers databases operation log table exists the same datamultiple update, delete records, because of data pre-processing and data re-collection.The same data with multiple log operations affect the efficiency of the precursor data exchange. For this problem, We propose an optimization algorithm for the operation log, By calculating and merging record in the operation log table and leaving the last operation log of data records, We can greatly reduce the network traffic and improve the efficiency of database synchronization. KeywordsData exchange; Operation log; Log optimization; Data Transaction Isolation1引言在目前运行的地震前兆台网观测系统中,数据库之间的数据同步依靠的是 Oracle的 DB-link加触发器实现的 Oracle原厂数据库同步机制,由于数据交换的路径复杂、数据源多、数据源类型复杂,加上需要配合台站的注册注销机制,很容易造成因为数据不一致引起的触发器死锁现象,造成因为 DB-link的通道阻塞,从而使这个数据交换失效。在最新的基于 N层架构设计的前兆数据管理系统中,我们使用了全新的数据交换策略基于用户记录的数据库操作日志实现的、全过程能够实现自己控制的数据交换策略。这种基于用户操作日志的数据同步已被广泛使用,传统日志将更新动作及相关数据按时间顺序进行保存,日志存储了每一次更新涉及的数据的全局唯一主键。由于前兆数据可能有同一数据的多次预处理的业务需求,而对同一记录的多次更新动作,对于上级数据而言只有最后一次修改是有效的,日志压缩通过计算合并日志记录,只保留与数据交换相关的日志信息,从而减少网络数据流量,提高数据交换的效率,具有一定的推广价值。2数据交换与数据操作日志2.1 数据同步的路径在基于分布式的地震前兆台网观测系统中,数据库之间的同步是观测系统的一个核心技术。在地震前兆台网观测系统中,数据从非节点台站数据库同步到节点台站数据库,从节点台站数据库同步到区域中心数据库,从区域中心数据库同步到国家中心数据库,从国家中心数据库分发到各个学科中心数据库,学科中心形成产品数据,回流到国家中心数据库。下图展示了前兆台网观测系统数据同步的部分数据流向的路径。区 域仪 器国 家区 域学 科指 定 交 换增 量 数 据增 量增 量 ( 学 科 特 有 产 品 )采 集增 量指 定 数 据增 量区 域 扩 展指 定 交 换指 定 交 换指 定 交 换学 科 扩 展增 量指 定 交 换台 站 扩 展仪 器采 集增 量指 定 交 换台 站 扩 展增 量指 定 交 换仪 器采 集国 家 扩 展增 量指 定 交 换增 量 数 据指 定 数 据国 家图 1前兆观测系统数据同步路径图从上图可以知道,地震前兆台网观测系统属于典型的双向同步数据库系统。2.2 数据同步时间数据库同步根据同步时间分为实时数据同步和异步数据同步。同步数据同步是就是数据源一旦进行数据更新,就实时将变化数据同步到目标数据库的技术。同步数据同步可以保证数据源和数据目的地之间实时的数据一致性,在分布式环境下可以保障应用的完整性,降低开发的技术难度,降低了应用的复杂性。当数据源发生数据变化时,即刻捕获变化数据,并将变化数据传播到数据目的地。因为有高实时要要求,实时数据同步技术一般应用在数据更新频率相对低、数据变化相对小、高带宽、高可靠的局域网或者专网环境中的数据同步。异步数据同步是一种延时分发变化数据存取和延时分发数据更新的数据库同步技术,具有高可靠性和按需同步的灵活性,但相比实时数据同步技术实现起来要复杂一些。使用异步数据同步,增量数据的日志保存在同步源数据库中,用户可以根据网络状况、数据优先级、路径、用户需求等各种条件灵活的进行全部或者部分的数据同步。地震前兆台网观测系统是一个低带宽、高数据产出、多路径、同步内容变化频繁的横跨全国的大型分布式应用系统,因此采用异步数据同步技术更符合地震前兆观测的需求和实际的网络状况。2.3 日志优化技术在个数据库产品中的应用通过数据库操作日志技术进行分布式数据库之间的数据同步在各大主流数据库产品中被广泛采用:Sybase的副本定制、DB2 的数据连接桥、Oracle 的通过DBLink快照刷新、微软 SQLServer的复制/ 订阅服务等。这些技术都是通过捕获增量日志来获取增量数据,然后在同步的两端或者多端进行单向或者双向的数据同步。基于日志的数据库同步中被各大主流数据库广泛采用,已经成为数据库同步使用的标准技术,也是关系数据同步可靠性、灵活性、扩展性的关键技术。数据同步的效率对于各种应用系统的可用性有关键性的影响,决定数据库库同步效率的原因是多方面的、网络的带宽与阻塞程度、数据更新的频率、数据量的大小等。常规的基于数据库厂商提供的主要用来进行事务保障的数据库日志,保存了每一条变化数据涉及到的各种版本的数据。然而,在异步数据同步模式下,源数据库端的某一条记录频繁修改时,日志记录将根据每次变化记录多条日志项,当这些数据库日志传播到同步目的数据库后会导致同一记录的多次修改,而有效的仅仅是最后一次修改,造成大量的资源浪费和占用。由于对于数据的修改只有最后一条日志是有效的,因此如果能够优化数据库日志,就能过减少数据同步的数据量、减少网络带宽占用、减少不必要的数据更新,从而提高数据同步的效率。地震前兆台网观测系统的数据库同步需求路径多、同步的内容调整频繁、网络状况一般、同步源和目标地注册注销频繁、单向和双向同步并存、点到点同步与点到多点同步并存、部分不同与全部同步并存,然而数据库厂商提供的日志操作接口有一定的黑盒性,不能按照需求变化的进行精确的日志操作来满足应用需求,因此,在实际应用中,采用自定义定义的数据库日志来捕获数据变化,通过自定义的日志操作接口和数据操作接口来完成高灵活性、扩展性、可靠性的数据同步方案。这种用户自定义的数据库操作日志也叫做虚拟日志或者模拟日志。3 日志优化原理与步骤3.1 数据库日志用户自定义操作日志是前兆数据交换的基础,是整个数据库中增量数据更新活动的记录的集合。对于任何需要交换的数据的任何更新操作(如insert、udate、delete),都要把该数据库操作对应的数据的主键、表名、动作、台站编号、测点编号等信息保存下来,记录到虚拟日志操作表中。地震前兆台网数据统一访问平台子系统的访问组件实现的拦截器功能,通过检查数据访问接口的同步标志,便可以将数据库操作日志记录保存到虚拟日志操作表中。定义数据操作日志表中对表 P中主键为 id的记录的修改序列为 Sequence(T,v),通过对 Sequence (T, v)进行压缩,可以有效降低在数据同步过程中的数据传输量。定义表 T 中关键字为 v 的记录为 tv,对 tv的修改只能是 insert、update、delete,所有可能对 tv的修改状态迁移如图 1 所示。图 2 操作日志状态迁移图其中,节点表示对 tv的可能修改操作(insert、umdate、delete);有向边 e表示对 tv的可能修改状态迁移。有向边 e4表示 tv数据被删除;有向边 e2 表示 tv 可能经过若干次更新。定义集合 Mm,表示上图记录状态迁移构成的集合。Mm= ID,I UU,I UU D,D I UU,UU,UU D,UU DI其中,表示对记录 tv进行的 N次数据操作;m 为对记录 tv的可能操作集合。那么,不论什么状态的Sequence (T, v)都可以被散列为 N个 m构成的集合。3.2 优化原理为 insert、delete、update 三种操作节点赋值,定义 I=1、U=0、D=-1,定义 Value(m)为路径中所有节点值之和。那么,有如下结论:(1)若Value(m)=1,表示在m操作发生前,数据表中不存在tv,该日志是在m 操作的过程中被添加到数据表中的。(2)若Value(m)=-1,表示在m操作发生前,数据表中已存在tv,该日志是在m操作的过程中被删除的。(3)若Value(m)=0,虽然无法确定该tv是否存在于数据表中,但能够确认如果m发生之前该tv存在与数据表,那么 m操作发生之后,该数据依然存在。由于 Sequence (T, k)是有 N个 m构成的序列集合,上面的结论同样使用于 Sequence (T, v)序列集合。3.3 日志优化方法在需要交换的数据进行更新操作时时,要进行数据库操作日志的记录,对于每一个Sequence (T, v),计算Value(Sequence (T, k)。(1)Value(Sequence (T, k)=1,首先检索操作日志表,判断是否存在该记录的日志,有则保留原有操作日志,不写入操作日志表;否则,添加该记录对应的insert日志。(2)如果Value(Sequence (T, k)=-1,首先检索操作日志表,判断是否存在该记录的日志,有则保留原有操作日志,不写入操作日志表;否则,添加该记录对应的delete日志。(3)如果Value(Sequence (T, k)=0, 首先检索操作日志表,判断是否存在该记录的日志,有则保留原有操作日志,不写入操作日志表;否则,添加该记录对应的update日志。通过优化虚拟日志,在更新较多的系统中,能够比较明显降低数据同步时网络的数据传输量。因为虚拟日志操作表中只存储了更新数据的表名、关键字和操作方法,并不记录具体的操作数据,跟传统的数据库日志比,所占的存储空间可以忽略不计。根据上面的日志优化方法,通过计算Value(Sequence (T, k)值,能够将用户的多次对tv的操作进行合并,只让最后一次的结果起作用,避免资源浪费,提交了数据同步的效率。4日志优化在台网观测数据交换子系统的具体实现4.1 操作日志表设计地震前兆观测系统中的数据同步有指定仪器的数据同步,而指定仪器的增量数据同步过程中,需要在虚拟操作日志表中过滤出指定仪器的操作日志,因为数据操作日志表必须有过滤出指定仪器的信息字段。根据这个要求,前兆数据数据交换需要的操作日志表结构如表1: 字段名 字段含义 数据类型RecordIndex 日志编号 Number(38)TableName 数据表名称 Varchar2(50)Operation 动作类型 Varchar2(20)UUID 数据的全局唯一标识 Varchar2(255)StationID 台站编号 Varchar2(5)PointID 设备的序号 Varchar(1)表1 数据交换操作日志表结构4.2 操作日志表优化算法伪代码表示(1)Insert 动作优化的伪代码表示Read all trace and parameter initialization Loop from begin currentLogId-maxIdfind current Datas pk if find identical logkeep the current log endifelse insert current Datas log insert action end elseend loop(2)Update 动作优化的伪代码表示Read all trace and parameter initialization Loop from begin currentLogId-maxIdfind current Datas pk if find identical logkeep the current log endifelse insert current Datas log update actionend else end loop(3)Delete 动作日志优化的伪代码描述Read all trace and parameter initialization Loop from begin currentLogId-maxIdfind current Datas pk if find identical logkeep the current log endifelse insert current Datas log delete action end elseend loop4.3日志表优化算法在前兆项目中的实现在前兆数据管理系统中,数据的进出库操作全部通过数据统一访问平台来实现,数据统一访问平台通过提供基于数据对象视图的分布式 DAO组件来实现数据的CRUD操作。在 DAO组件的对象数据访问接口上,有是否交换标志,通过业务层的调用来控制交换数据。日志优化代码需要在所有的 DAO接口方法上实现调用,考虑到代码重用和软件解耦,将日志优化代码封装为三个外部的拦截器,在每一个带有交换标志的 DAO接口方法上,通过Interceptors 注解实现日志优化代码的调用。(1)Insert拦截器的实现代码AroundInvoke public Object save(InvocationContext ctx) throws Exception Object o=ceed();Object params=ctx.getParameters();boolean isExchange =(Boolean)params1;if(isExchange)Class c=params0.getClass();Method method=c.getMethod(getId, new Class);String id=(String) method.invoke(params0, new Object);String stationid=;tryMethod method2=c.getMethod(getStationid, new Class);stationid=(String)method2.invoke(params0, new Object);catch(NoSuchMethodException ex)stationid=xxxxx;String pointid=;tryMethod method3=c.getMethod(getPointid, new Class);pointid=(String)method3.invoke(params0, new Object);catch(NoSuchMethodException ex)pointid=x; String tableName=(c.getAnnotation(Table.class).name();GlExchangeOperations log=new GlExchangeOperations();log.setTablename(tableName);log.setUuid(id);log.setOperation(insert);log.setStationid(stationid);log.setPointid(pointid);em.persist(log);return o; (2)Update拦截器的实现代码AroundInvokepublic String getTableName(InvocationContext ctx,String uuid) String results=new String3;String tableName = ;try String beanClassName = ctx.getTarget().getClass().getName();String EntityClassName = beanClassName.substring(0,beanClassName.indexOf(DAOImpl).replace(impl, entity);System.out.println(EntityClassName);Class c=Class.forName(EntityClassName);Object o=em.find(c, uuid);String stationid=;tryMethod method2=c.getMethod(getStationid, new Class);stationid=(String)method2.invoke(o, new Object);catch(NoSuchMethodException ex)stationid=xxxxx; catch (IllegalArgumentException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace(); catch (InvocationTargetException e) e.printStackTrace();String pointid=;tryMethod method3=c.getMethod(getPointid,new Class);pointid=(String)method3.invoke(o,new Object );catch(NoSuchMethodException ex)pointid=x; catch (IllegalArgumentException e) e.printStackTrace();catch (InvocationTargetException e) e.printStackTrace();results0=tableName;results1=stationid;results2=pointid; catch (ClassNotFoundException e) e.printStackTrace();return results;(3)Delete拦截器的实现代码AroundInvokepublic Object update(InvocationContext ctx) throws Exception Object o = ceed();Object params = ctx.getParameters();boolean isExchange = (Boolean) params1;if (isExchange) Class c=params0.getClass();Method method=c.getMethod(getId, new Class);String id=(String) method.invoke(params0, new Object);String stationid=;tryMethod method2=c.getMethod(getStationid, new Class);stationid=(String)method2.invoke(params0, new Object);catch(NoSuchMethodException ex)stationid=xxxxx;String pointid=;tryMethod method3=c.getMethod(getPointid, new Class);pointid=(String)method3.invoke(params0, new Object);catch(NoSuchMethodException ex)pointid=x;String tableName=(c.getAnnotation(Table.class).name();GlExchangeOperations log=new GlExchangeOperations();log.setTablename(tableName);log.setUuid(id);log.setOperation(update);log.setStationid(stationid);log.setPointid(pointid);em.persist(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论