1基于ArcSDE存档机制的历史数据管理
存档是将空间数据库的所有变化都保存下来,记录其变化的时间和变化前后的状态,基于ArcSDE存档机制能够实现无冗余空间历史数据备份,实现任意时刻数据的查看,以及某时间段内历史数据动态回放显示[1]。
1.1基本原理
该方法首先对数据启用存档前会为数据集创建一个新存档类。启用存档时,将数据集或对象类的Default版本中的属性及行信息复制到该存档类中。存档类与原始数据集具有相同的架构,但新增3个属性,分别记录数据生存期的起始时间、终止时间和唯一标识。启用数据集存档后,保存或提交到Default版本的所有更改还会另外在存档类中进行保存。当启用存档时,表示Default版本的所有行都将按同一时间戳被复制到存档类。所有行都打上了一个时间戳,终止时间为一个理论最大值(12/31/9999)。并且,无论何时,只要某一个要素的终止时间是该理论最大值,表示它为当前现势数据。当编辑内容保存或者提交到Default版本时,ArcSDE会自动将改动作用到存档类。
1.2数据更新
数据更新是以新要素替换数据库中与之相对应的旧要素的过程。具体而言,新增要素时,复制一份新增要素到存档类,起始时间赋值为当前系统时间,终止时间赋值为理论最大值;修改要素时,存档类中修改前的要素终止时间改为当前系统时间,复制修改后的要素到存档类中,生存期属性赋值同新增要素处理方式一致;删除要素时,将存档类中需要被删除的要素的终止时间改为当前系统时间。每一次的数据更新,都会产生历史数据。
1.3历史数据管理
该方法利用了ArcSDE提供的历史标记查看历史数据。选择历史标记的方法有2种:①从历史标记列表中挑选;②从特定日期和时间中挑选。选择历史标记后,就可以查看该标记对应的历史数据。同时该方法还允许直接设置存档表中的属性过滤条件来显示需要查看的历史数据。
2基于属性扩展的历史数据管理
2.1设计原理
基于属性扩展的历史数据管理方法借鉴了ArcSDE存档机制[12],通过扩展Geodatabase矢量数据的属性字段并完善数据更新流程,实现了基础测绘数据在多种库体中进行历史管理、回滚、备份和迁移的目的。此外,该方法较ArcSDE存档机制在数据迁移和稳定性等方面均具备本质差别,ArcSDE存档机制本质上是不支持数据迁移的,脱离原环境历史数据与现势数据的关联也就不复存在且极易受数据异常等影响导致历史信息的丢失。基于属性扩展的历史数据管理方法支持数据在ArcSDE和FileGeodatabase之间进行迁移,较局限于ArcSDE环境下的归档管理更为稳定。
1)属性扩展。基础空间要素数据库中的要素类的属性设计遵循《浙江省省级基础地理信息系统——空间数据库要素类、子类设计》及其补充规定。在此基础上,每类数据增加几个字段。
2)辅助表设计。为了记录基础空间要素数据库的更新信息及管理历史数据,需建立更新版本辅助表(ZJGIS_UPDVR)。
3)版本号说明。FROM_VERSION表示要素生存期内起始版本的版本号,从0起编,TO_VERSION表示要素生存期内终止版本的版本号,如果是最新的数据,其值为99999。如首批数据在完成初始入库后其FROM_VERSION为0,TO_VERSION为99999。更新数据在入库后,在更新范围内新入库的数据其FROM_VERSION为1,TO_VERSION为99999,在更新范围内保存为历史数据的要素其FROM_VERSION为0,TO_VERSION为1,即其从版本0诞生至版本1消亡。
2.2更新流程
实现基于属性扩展的历史数据管理必须满足一定的更新流程,该流程包括:更新环境初始化、更新数据初始化、新建更新业务、更新数据入库以及关闭更新业务。更新环境初始化是在待更新数据库中创建一个要素类,记录每次更新的业务信息以及更新范围。更新数据初始化包含2个操作:①为所有数据添加[FROM_VERSION]和[TO_VERSION]字段;②对[FROM_VERSION]字段赋值0,对[TO_VERSION]字段赋值99999。新建更新业务主要是填写更新的元数据信息,同时将更新范围内的数据“压入”历史。通过对更新范围内的数据修改其TO_VERSION字段,来标记数据是否将要消亡。对于跨越更新范围边界的要素,将该要素的TO_VERSION设为当前版本,并复制其更新范围外的部分赋FROM_VERSION为当前版本号,TO_VERSION为99999,以保证任何时刻的历史数据都是完整的。更新数据入库功能将本地GDB数据更新源,通过调用ArcGIS提供的FeatureClassToFeatureClass的GP工具,导入到相应的图层中,实现更新数据的入库。流程控制方面,既包含程序自动控制也包含人工干预。程序自动控制是指更新完成后,通过关闭更新业务,将本次更新业务的更新状态设为“已完成”,并且在结束更新业务之前,系统自动在基础库中修改From_Version和To_Version为空的要素,From_version设为当前版本号,To_Version设为99999。人工干预是指作业员可以根据更新的日志信息,判断数据更新业务的成败,以决定是否重新进行数据更新工作。
2.3历史数据管理
1)历史数据回溯。数据更新即产生历史数据,回溯是查看历史数据在某个历史时刻的状态。基于属性扩展的历史数据回溯有2种方式:①选定业务版本号;②选定历史时刻。回溯功能的具体实现与存档机制查看某时刻的方法类似,区别在于存档机制是通过时间字段进行筛选,属性扩展是通过数字(版本号)字段进行筛选。从执行效率上看,通过数字进行查询的属性扩展优于存档机制[13]。图1反映了同一个要素在不同历史时刻的情况。图1历史数据回溯对比图
2)历史数据回滚。回滚就是使数据恢复到某一个历史时刻的状态,当某时刻的数据有误或者不满足质量要求时,需要将数据恢复到该时刻之前的状态,即删除错误时刻之后创建的数据,并将在该时刻消亡的数据进行恢复。基于ArcSDE存档机制的方法在进行历史数据管理时没有实现数据回滚,在数据生产过程中,多次更新后,若某次更新有误,则必然会导致数据生产的返工。基于属性扩展的方法进行数据更新时对数据进行标记版本,而不是对数据进行物理删除,所以能够实现历史数据回滚。
3)离线备份。离线备份是将指定历史版本之前的数据导出存储。数据多次更新后,历史数据信息量不断增加最终会影响到回溯、回滚以及更新的工作效率,因此有必要将备而不用的历史数据进行离线备份。基于ArcSDE存档机制的方法能够实现历史数据的离线备份,但具体实施步骤非常复杂,而基于属性扩展的方法实现离线备份非常简便,仅需将在指定历史版本之前的数据选中并导出即可。
4)数据迁移。随着计算机技术的迅猛发展,软硬件的升级逐渐常态化,而无论是硬件设备还是软件版本的升级都必须进行数据的迁移。基于ArcSDE存档机制的方法依赖于SDE环境,一旦脱离该环境,则会破坏现势数据与历史数据之间的关系,无法继续进行历史数据的管理,所以每一次的数据迁移,都会导致历史数据的丢失。基于属性扩展的历史数据管理方法通过扩展Geodatabase矢量数据的属性字段以及业务辅助表进行历史数据维护,而这些信息包含于数据本身,因此可以在ArcSDE、本地GDB、MDB等任意Geodatabase格式下进行数据迁移。此外,属性扩展的方法也能适用于文件级数据库,且其效率和稳定性均优于ArcSDE。
3结语
本文在基于ArcSDE存档机制的历史数据管理的基础上,提出了基于属性扩展的历史数据管理方法,为历史数据的管理研究提供了有益参考。与ArcSDE存档机制相比,该方法具备了能将历史数据进行回溯、回滚、离线备份和迁移,减少数据库冗余等优点。同时该方法不受ArcSDE性能限制,其效率高于基于ArcSDE存档机制的历史数据管理方法。该方法已经在浙江省基础地理信息系统中得到广泛的应用。基于属性扩展的历史数据管理方法仍有不足之处,首先该方法基于自定义属性扩展实现历史管理,在其他数据处理环境下对数据进行编辑不会自动维护历史数据;其次该方法放弃了多用户操作模式,使数据更新只能单线程操作,在后续研究中有待在以上方面继续深入,使该方法为基础测绘数据管理工作作出更多贡献。
作者:盛琦 单位:浙江省地理信息中心
相关专题:中国煤炭工业医学杂志 金融论文题目