cache 精要--zz

Cache该技术可以大大提升ArcGIS Server的数据访问速度,其原理是将所有图层切片保存在服务器,客户端请求时直接访问cache好的图片,这里分为两种情况,一是所有图层都做cache,二是部分图层做cache,部分图层仍通过ArcGIS Server9服务生成,即multi_layer,它们可能会经常被更新(基于b/s浏览器端更新,或在c/s客户端更新,或通过移动终端更新),这样做虽然可以从一定程度上解决访问速度问题,但在有些情况下,对地图的实时性要求不是非常高,或业务并不需要经常编辑部分图层,那么我们可以通过定时更新cache的方式,让客户端访问的总是已经cache好的地图,既保证客户端浏览速度最大化,又满足系统一定的实时性要求。 这个技术 应该和google map的数据发布原理差不多了。
     arctoolbox和arccatalog都可以管理ArcGIS Server的cache,我们也可以利用geoprocessing tool编写python脚本,实现ArcGIS Server的cache的生成、更新。这里需要注意两点:
1.如果客户端要浏览实时数据,并且实时性要求非常高,不建议使用动态更新cache,multi_layer方式更好。
2.如果cache特别大,并且全图的数据、符号经常改变,不建议使用动态更新cache,指定地图局部范围的更新更适合动态更新。
    生成cache的数据量越大、放大缩小分级越多,生成cache的时间呈指数上升,使用动态更新cache,就需要将更新的时间控制在一定的时间内,如果时间太长就没有意义了,会影响地图浏览和应用。
对python script控制arctoolbox不熟,可以多翻翻ArcGIS Desktop Help,另外可以看看《diving in 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)

更新的脚本已经写好了,最后是如何定时更新,这里要用到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.更新尽量在夜晚网络低峰期。

2,

ArcGIS map services 在发布地图时可以使用Cache来显著提升性能。一个从cache中获取静态的切片来代替动态暄染的地图的地图服务被称作缓存地图服务。地图cache是一个包含了不同级别的地图切片的目录。ArcGIS Desktp以及ArcGIS Server Web ADF程序可以使用通过虚拟目录来在地图服务中使用切片缓存。你可以通过ArcCatalog或者scriptable geoprocessing从一个已知的的地图服务中创建Cache.

    一个缓存的地图服务一个能够利用静态图片来快速提供地图的服务。一个完整的缓存地图服务使用以下几个组件来完成其工作:

缓存:这是由包含了不同等级集合的缓存地图图片以及描述其Cache的框架的文件(Conf.xml)组成的地图服务缓存目录,

WEB服务器:WEB服务器运行着实际的地图服务,一个虚拟的地图缓存目录与真实的缓存目录相对应,同时使用切片处理服务(tile handler service),而其虚拟路径是不能直接访问的。

The Cache

    (1)一个single fused cache模式下,包含了所有的图层的所有的级别,其小切片在其内部叫super-tiles。

   (2)multi-layer cache包含的图片来自于每一层的很多小的碎片。在两种情况下,super-tiles,分割成根据用户定义的适合程序应用的尺寸的无数的小切片。

    使用两种类型的Cache在客户端的表现有很大的不同,fused cache看上去像一个整体的图层不允许元素的选择,标签的选择不能被校正,同时其可视性也不能在客户端被操作,multi-layer方式下在客户端其图层可以控件可见性,同样标签,以及元素的选择同样都是可以的。

   默认的情况下,选择fused caches,程序使用fused cache而不使用其地图服务,通过其切片处理服务来直接从Cache目录中进行图片的拖动。

Cache组织:Cache目录结构

    地图服务缓存目录必须位于其父级目录,也就是服务缓存目录中,一个服务缓存目录是在ArcGIS Server中注册成一个目录,在这里保存了地图缓存目录。

    一个single fused cache被组织成一个三维的网格,从而与其目录结构相对应,其目录结构中上层目录(用标签标明了不同的级别)包含的下级目录是按照不同行来分布的,在这个底层目录中包含了所有的图片,multi-layer缓存在顶层有另外一个附加的目录级别。这些切片是同一级比例尺寸,其像素尺寸用户可选择,128,512,1024像素尺寸。切片是PNG-24的图片,图片根据默认的透明度设置背景颜色。如果地图文件中没有背景颜色设置,那么其背景图片将被设置成253.253.253.这在ArcMap中可以被修改。
    使用缓存地图服务最大的好处是可以动态的改进客户端用来显示复杂的地图所花费的时间,一个客户端使用缓存地图服务获取和显示地图时仅仅只是受到其联系的带宽的限制,比如说,一个简单的2D的地图需要4秒去请求获取,使用动态地图服务可以使地图使用阴影和其他高级的图像属性渲染和显示地图,以及使用缓存地图服务只需要1秒钟就可以显示。因此使用缓存地图服务消除了需要牺牲图像质量来换取显示的代价。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值