还剩5页未读,继续阅读
文本内容:
数据转移方案一时间戳方式文档修订记录更改类型*S-START A-ADDED M-MODIFIED D-DELETED版本号日期主要完成人更改类型版本描述审核人草稿马玉会2022-12-14S V
1.0初稿马玉会2022-12-14A V
1.0完成稿版本1版本2目的
1.随着医院业务的发展,医院业务产生的数据量与日俱增,医院几年内产生的数据都存储在现有业务数据库中,业务数据库负荷不断增大,一张业务表甚至会存储几百万条记录,这造成业务应HIS用过程中检索数据速度太慢,直接影响了医院的效率为减轻现有业务数据库的压力,提高医院运行效率,现提出建立一套历史数据库,将现有业务数据库中过期的数据转移到历史库,减少业务库的数据量,提高系统的运行效率;另一方面,为减HIS轻报表查询对业务操作的影响,分离业务操作和报表查询关联数据库,业务查询关联业务数据库,报表查询关联历史数据库,历史库需要满足对数据的实时查询的需求,必须保持业务库数据与历史库数据的同步此外,历史数据库在满足业务库转移数据需求的同时,还要遵循一定的标准和规则,为后期的数据挖掘和决策支持提供基础转移方案
2.根据转移方式的不同,业务库与历史库之间的数据转移可以分两个阶段初始化转移和增量转移初始化转移采用全量抽取的方式(也可看做时间戳方式),抽取一定时间戳前所有的数据,增量转移采用基于时间戳的增量抽取方式,抽取一定时间戳区间的数据采用上述转移方案,需要在现有业务库表中添加时间戳字段抽取原理如下业务数据库数据仓库数据增量抽取的原理【备注】中提供的数据类型是二进制数字,它是数据库中自动生成的惟一二进制数字SQL Servertimestamp timestamp通常用作给表行加版本戳的机制存大小为个字节数据类型只是递增的数字,不保留日期或者时8Timestamp间是单个数据库的计数器,不是服务器的计数器Timestamp每一个数据库都有一个计数器,当对数据库中包含列的表执行插入或者更新操作时,该计数器值timestamp就会增加该计数器是数据库时间戳这可以跟踪数据库内的相对时间,而不是时钟相关联的实际时间一个表只能有一个歹人每次修改或者插入包含列的行时,就会在列中插入增量数据库时timestamp timestamptimestamp间戳值这一属性使列不适合作为键使用,特别是不能作为主键使用对行的任何更新都会更改timestamp值,从而更改键值如果该列属于主键,那末旧的键值将无效,进而引用该旧值的外键也将再也不有效timestamp如果该表在动态游标中引用,则所有更新均会更改游标中行的位置如果该列属于索引键,则对数据行的所有更新还将导致索引更新使用某一行中的列可以很容易地确定该行中的任何值自上次读取以后是否发生了更改timestamp如果对行进行了更改,就会更新该时间戳值如果没有对行进行更改,则该时间戳值将与以前读取该行时的时间戳值一致若要返回数据库的当前时间戳值,请使用@@DBTS添加时间戳
2.1为业务库中每一个数据库表添加时间戳字段,包括、、、、库,并记录每jc mzyj yszy一个库转移的开始时间戳和结束时间戳建议建立一个转移时间戳表,用于存储每次转移使用的时间戳区间标识序号库名开始时间戳结束时间戳转移标志转移成功11JC0X00000000000007D00x00000000001267C8转移成功22MZ0X00000000000007D00x00000000001267C8转移成功33YJ0X00000000000007D00x00000000001267C8转移成功44YS0X00000000000007D00x00000000001267C8转移成功55ZY0X00000000000007D00x00000000001267C8•••••••••••♦・♦♦♦♦・初始化转移
2.2初始化转移采用全量抽取的方式全量抽取类似于数据迁移或者数据复制,它将数据源中的表或者视图的数据原封不动的从数据库中抽取出来,并转换成历史库标准格式遍历所有数据库的所有表,如果库表中记录的时间戳在当前库时间戳,则转移数据记录,如果库表中记录的时间戳大于记录的数据库最大数据库则不进行转移例如库当前记录的最大时间戳为查询表中时间戳小于记录的jc0x00000000001267C8,yhlx最大时间戳的记录,如下select*from test..yhlx whereversion0x00000000001267C8然后将抽取出的记录数据进行规范化转换并插入到历史库中增量抽取
3.3增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或者修改的数据如何捕获变化的数据是增量抽取的关键时间戳是一种基于快照比较的变化数据捕获方式,在源上增加一个时间戳字段,系统中更新修改表数据的时候,系统会自动修改时间戳字段的值增量抽取时,读取数据库当前的最大时间戳,根据转移时间戳表中上一次转移的最大时间戳获取本次增量抽取的时间戳区间转移程序根据时间戳区间转移业务库变化的数据转移过程描述
3.保留每次数据转移的记录
3.1)在为数据库添加时间戳前,记录当前数据库的时间戳默认12000select@@DBTSo()0X00000000000007D0)为数据库表添加时间戳,添加完成后,记录当前数据的新的时间戳2select@@DBTSo)将)、)得到的时间戳存储到转移时间戳表中,包括库名、开始时间戳、结束时间戳、312转移成功标志等其中,)得到的时间戳作为开始时间戳,)得到的时间戳作为结束时间戳12标识序号库名开始时间戳结束时间戳转移标志11JC0X00000000000007D00x00000000001267C8••••••••••••••••••)数据初始化转移转移程序按照转移时间戳表进行数据转移,同步时间戳区间的变更数据转移4成功后,更新转移时间戳转移成功标志,并向转移时间戳表中插入一条记录,将当前的结束时间戳作为新纪录的开始时间戳标识序号库名开始时间戳结束时间戳转移标志成功11JC x00000000000007D00x00000000001267C822JC x0000000000126708如果转移失败,则只更新转移标志标识序号库名开始时间戳结束时间戳转移标志失败11JC x00000000000007D00x00000000001267C8)增量转移时,首先当前当前库的最大时间戳遍历转移时间戳表获取当前开始5select@@DBTS,时间戳最大的记录,并将获取的最大时间戳存储到该记录的结束时间戳中,同时置转移标志为空转移程序按照按照当前库最新的转移时间戳记录进行数据转移吗,同步时间戳区间的变更数据转移成功与失败的处理方式同)4o不保留每次数据转移的记录
4.2更新两次转移记录表
1.D在为数据库添加时间戳前,记录当前数据库的时间戳%)为数据库添加时间戳之后记录数据库最大时间戳为存储到转移时间戳表中2N1,标识序号库名开始时间戳结束时间戳转移标志N N11JC01)初始化转移,转移程序遍历数据库表中的数据库记录,依据转移时间戳表转移时间3戳在之间的数据N0~N1标识序号库名开始时间戳结束时间戳转移标志N N11JC01转移后,更新转移成功失败标志标识序号库名开始时间戳结束时间戳转移标志N N成功/失败11JC01)每次增量转移前,获取当前库最大时间戳为查询转移时间戳表判断当前库上4N ok次转移是否成功,如果转移标志为“成功”,将当前库的开始时间戳置为,结Nk-1束时间戳置为,转移标志置为空;N标识序号库名开始时间戳结束时间戳转移标志N N11JCk-1k如果转移标志为“失败”,当前库的开始时间戳不做更改,结束时间戳置为,转移标Nk志置为空标识序号库名开始时间戳结束时间戳转移标志N N11JCk-2k转移程序遍历数据库表中的数据库记录,依据转移时间戳表转移时间戳在或者N~Nk-1k之间的数据转移后,更新转移成功失败标志N~N k-2k更新一次转移记录表
2.)初始化转移获取当前库最大时间戳,遍历每张表抽取时间戳小于的所有记1N N00录进行数据转移,将抽取出来的数据同步到历史库中如果同步成功,更新当前库时间戳字段为如果同步失败,不更新,可以采取人N o工更新,或者第二天字段同步数据时将昨天失败和今天发生变更的数据一块同步标识序号库名时间戳N11JC0)增量转移每次增量转移前,获取当前库最大时间戳,假设转移时间戳表中存储的2Nk当前库时间戳为,遍历每张表抽取时间戳以为开始,小于N的所有记录N Nk-1k-1k进行数据转移,将抽取出来的数据同步到历史库中如果同步成功,更新当前库时间戳字段为;Nk标识序号库名时间戳N11JCk如果同步失败,不更新,可以采取人工更新,或者第二天自动同步数据时将昨天失败的和今天发生变化的数据一块同步标识序号库名上一次转移后的最大时间戳N11JCk-1。