摘要:ArcSDE的空间查询采用网格索引机制,因此索引网格单元大小的设置直接影响数据的响应和系统的性能。一般导入图层到SDE数据库时,其都会默认地自动建立好网格索引,该索引已基于图层的空间参考、图形的类型等相关信息,并进行了优化。
一、SDE空间索引简介
ArcSDE的空间查询采用网格索引机制,因此索引网格单元大小的设置直接影响数据的响应和系统的性能。一般导入图层到SDE数据库时,其都会默认地自动建立好网格索引,该索引已基于图层的空间参考、图形的类型等相关信息,并进行了优化。
ArcSDE最多提供三级索引,对于一般的数据我们只需建立一级网格索引即可,比如点状数据、或者是数据量不大而且单个图形所占用的最大范围与最小范围相差比例不是很大的情况。在SDE空间数据库中,第二级、第三级空间网格大小的值一般都是0,我们可以通过更改第二级、第三级网格大小的值来达到建立二、三级索引的目的。原则是后一级别空间网格的大小应是前一级网格大小的三倍以上,只有这样建立的索引才会有意义。
二、空间网格大小设置分析
我们知道图层数据在SDE数据库中是分别存储在B表、F表,相应的图层空间网格索引则存储在S表,里面以Feature ID序列存储着构成这个空间对象的切割部分。如果一个几何对象被空间网格分割成三部分,则在S表中将会存在三条Feature ID号相同的记录。
现在问题的关键在于到底应该用多大的线性比例来切割存储几何图形才能达到即节省存储空间,又以较快的速度显示出来呢?下面分两种情进行分析:
如果线性比例过大,如以10000作为线性比例切割几何对象,那么会存在这样的问题:10000*10000网格中会存储着多个记录,如果放大显示时,一些不在当前显示窗口的几何对象也会被读取出来,势必减慢显示速度。
如果线性比例过小,如以1作为线性比例切割几何对象,那么会存在这样的问题:一个较大的几何对象被分割成了多个部分存储在S表中,增大了存储空间,缩小操作显示一条记录时,则必须先进行多部分读取,然后进行拼接显示。另外对于大范围的记录,会导致 Feature Class is read-only mode,图层不再可读。
因此,对于线性比例的设置,无论过大或者过小都会影响存储和性能。在此顺便也解答一同事向我提出的小比例尺与大比例尺为什么要分层存储的问题:如果几何对象大小不一,相差比例很大,计算出来的线性比例总是不能令人满意,因此也就达不到性能上优化的目的。
三、如何设置空间网格大小
A、设置空间网格大小的几个原则:
1. 点层只需建立单级索引,而且Grid Cell Size 可以选择得大一些,因为点层处理效率是最高的;
2. 监视spatial index,如果数据变化频繁,则需要经常根据数据的变化情况重新评估索引的优劣;
3. 根据实际应用,将Grid Index 中Cell Size 调整为应用程序经常使用的窗口显示大小;
4. 对于未知应用,可以将Grid Index 中Cell Size 设置为图形平均覆盖范围的三倍大小;
B、获取图形信息的几种方法:
1、图形平均覆盖范围的计算方法:
select (avg(emaxx - eminx) + avg(emaxy - eminy)) / 2 from f<N> ;
例:select (avg(emaxx - eminx) + avg(emaxy - eminy)) / 2 from sde.f200;
2、图层各种统计信息查询方法:
sdelayer -o stats -l layer_name,spatial_column_name –u sde_user_name -p sde_user_password –I service_name;
这些信息是确定Grid Index 中Cell Size 大小的重要依据。
3、图形统计信息查询方法:
sdelayer -o si_stats -l layer_name,spatial_column_name –u sde_user_name -p sde_user_password –I service_name;
C、Grid Index 调整方法(注册版本后不可调整):
1. 通过Catalog 实现:
选中图层的Spatial 字段(默认情况下是shape 字段),修改起Grid Index 参数;
2. 通过SDE 命令行实现:
Sdelayer –o alter –l layer_name,spatial_column_name –g grid_size0,grid_size1,grid_size2 –u sde_user_name -p sde_user_password –I service_name;
试验中,发现对于一般的图层,在导入数据时,默认建立的Cell Size 已经比较优化。
四、总结
本文在分析空间网格大小设置对性能影响的基础上,简述了怎样优化SDE空间网格索引。对于提高系统的性能,优化网格索引只是其中的一个因素,如想知道更多关于空间信息访问优化的问题,可以参考:《基于Oracle与ArcSDE的空间信息访问优化》。
http://www.gissky.net/Article/1408.htm