动态更新 AGS Cache

    作者:Flyingis

    提升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.更新尽量在夜晚网络低峰期。
动态更新 AGS Cache

你可能感兴趣的:(cache)