动态更新 AGS Cache

本文介绍如何通过定时更新ArcGIS Server的地图缓存来提高客户端访问速度,探讨了全图层缓存与部分图层缓存的不同应用场景,并提供了一个Python脚本示例用于缓存的动态更新。

提升ArcGIS Server访问速度最佳的方式是Cache,将所有图层切片保存在服务器,客户端请求时直接访问cache好的图片,这里分为两种情况,一是所有图层都做cache,二是部分图层做cache,部分图层仍通过ags服务生成,即multi_layer,它们可能会经常被更新(基于b/s浏览器端的更新,或在c/s客户端更新,或通过mobile无线移动的更新),这样做虽然可以从一定程度上解决访问速度问题,但在有些情况下,对地图的实时性要求不是非常高,或业务并不需要经常编辑部分图层,那么我们可以通过定时更新cache的方式,让客户端访问的总是已经cache好的地图,既保证客户端浏览速度最大化,又满足系统一定的实时性要求。

    我们知道,arctoolbox以及arccatalog都可以管理ags cache,那我们可以利用geoprocessing tool编写脚本,实现ags cache的生成、更新。这里需要注意两点:

    1.如果客户端要浏览实时数据,并且实时性要求非常高,不建议使用动态更新cache,multi_layer方式更好。
    2.如果cache特别大,并且全图的数据、符号经常改变,不建议使用动态更新cache,指定地图局部范围的更新更适合动态更新。

    对大数据量的图层做过cache的工程师知道,数据量越大、放大缩小分级越多,生成cache的时间呈指数上升,使用动态更新cache,就需要将更新的时间控制在一定的时间内,如果时间太长就没有意义了,甚至会影响应用。

    Python脚本编写比较简单:

#  This script updates all tiles in an ArcGIS Server 9.2 map cache

#  Access the geoprocessing tools
import arcgisscripting
gp = arcgisscripting.create()

#  Set up all of the variables for the update tool
server_name =  " myserver1 "
object_name =  " Precipitation "
data_frame =  " Layers "
layers =  ""
constraining_extent =  ""
scales =  " 32000000;16000000;8000000;4000000;2000000 "
update_mode =  " Recreate All Tiles "
thread_count =  " 2 "
antialiasing =  " NONE "

#  Run the Update Map Server Cache tool
try:
print  ' Starting Cache Update '
gp.UpdateMapServerCache(server_name, object_name, data_frame, layers, constraining_extent, scales, update_mode, thread_count, antialiasing)
print  ' Finished Cache Update '

#  Get the error messages if the tool fails
except:
gp.AddMessage(gp.GetMessages(2))
print gp.GetMessages(2)

    如果对python script控制arctoolbox不熟,建议看ArcGIS Desktop Help。

    更新的脚本已经写好了,最后是如何定时更新,这里要用到windows任务管理,这是windows非常普通的一个功能,但在实际中使用的很少,“开始--所有程序--附件--系统工具--任务计划”,创建一个新的任务,除此之外,还可以用命令行创建任务,schtasks命令:
    http://technet2.microsoft.com/windowsserver/en/library/1d284efa-9d11-46c2-a8ef-87b297c68d171033.mspx?mfr=true

    更新cache需要关注另外三个问题:

    1.更新过程两次重启ags服务,一次在更新之前,一次在更新完成后,重启过程服务将暂时不能使用。
    2.更新过程要消耗一定的实例,如果采用池化方式,应该注意thread_count小于maximun number of instances。
    3.更新尽量在夜晚网络低峰期。

本文转自Flyingis博客园博客,原文链接:http://www.cnblogs.com/flyingis/archive/2008/03/11/1100198.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值