一个使用C#和ArcPy实现的版本压缩工具(一)


ArcGIS版本压缩功能设计与开发

ArcGIS版本化数据管理机制中,增量数据最初是保存在 增量表 即A表和D表中的。当我们压缩版本时,增量表中的数据才会进入到基表(对归档后的数据而言,实质上是视图,只不过给用户的感觉还是一个数据表)。

传统做法

我们固然可以使用ArcGIS Engine去实现版本压缩功能,ArcGIS Engine也提供了相应的接口。
在版本化数据更新流程中,我们去创建一个子版本,将数据更新提交到子版本中,确认无误后可以进行版本协调,解决冲突,完成数据更新过程。子版本不再需要时,可以将其删除。
久而久之,随着更新的数据越来越多,增量表变得越来越大,版本世系表中也会保存越来越多的更新记录,导致进行浏览和编辑的速度越来越慢。性能下降,对用户而言,就是体验不好。
此时,一个行之有效的解决办法是进行版本压缩,将增量表中的记录压缩到基表中。最理想的压缩结果是增量表是记录为0,版本世系表中也只保留一条DEFAULT版本的记录
如果不进行数据压缩,或压缩进行得不彻底,性能方面的问题可能将会一直存在。
基于ArcGIS Engine去开发版本压缩功能,是一种可行的方案。但是,考虑到以下几点:

  1. 版本压缩一般是在服务器端进行的,不需要客户端去看或取得操作结果
  2. 彻底的版本压缩一般是在非使用时段进行的,可以设置其定时执行
  3. 普通的版本压缩,应当在每次更新数据完成后自动执行,而非当增量表已经太大时执行
  4. 版本压缩过程一般需要伴协调更新数据、删除子版本、重建空间索引、分析数据集等操作
  5. ArcGIS Engine开发代码行数较多,且受ArcGIS产品版本影响较大
  6. 服务器端一般都会安装ArcGIS,且自带Python解释器和ArcPy开发包

我们认为,使用ArcGIS Engine开发,不如使用ArcPy更佳。且该功能应当能够以某种服务的方式,提供给客户端调用。

预期功能

  • 手动版本压缩,提供普通、自动、彻底三种模式
  • 定时执行,可设置启动时间,触发执行,且支持重复
  • 触发启动,可接收客户端传来的压缩命令,立刻启动压缩进程
  • 压缩前要进行版本数据提交,可指定冲突定义和解决策略
  • 其他辅助功能,如记录操作日志、开机自启

从技术选型上,我们决定使用ArcPy来实现针对ArcSDE的操作,如压缩、协调版本、删除子版本、重建空间索引、分析数据集等功能,而使用C#来做界面,实现对Python脚本的触发。

界面设计

版本压缩功能界面

转载自:https://blog.csdn.net/a_dev/article/details/88599264

You may also like...