矢量¶
- 作者
主机地理信息系统
- 最后更新
2008/08/08
拆分数据¶
如果您发现自己制作了多个层,所有层都使用相同的数据集,但是过滤只使用一些记录,那么您可能会做得更好。如果条件是静态的,一种方法是预拆分数据。
这个 ogr2ogr 实用程序可以从数据源中选择某些功能,并将其保存到新的数据源。因此,可以将数据集拆分为几个较小的数据集,这些数据集已经被有效筛选,并删除filter语句。
形状文件¶
使用 shptree 在形状文件上生成空间索引。这是快速和简单的(“shptree foo.shp”),并生成一个.qix文件。MapServer将自动检测并使用索引。
MapServer还附带了 sortshp 实用工具。这将重新组织形状文件,并根据其中一列中的值对其进行排序。如果您通常是按条件筛选的,并且几乎总是按特定列筛选,那么这可以使流程稍微高效一些。
虽然shapefiles是一种非常快速的数据格式, PostGIS 速度也相当快,特别是如果您很好地使用索引,并且有内存用于缓存。
PostGIS¶
对性能的最大提升就是索引。确保在“几何”列上有一个gist索引,并且每个记录也应该有一个索引主键。如果使用shp2pgsql,那么这些语句应该创建必要的索引:
ALTER TABLE table ADD PRIMARY KEY (gid);
CREATE INDEX table_the_geom ON table (the_geom) USING GIST;
PostgreSQL还支持重新组织表中的数据,以便按索引进行物理排序。这使得PostgreSQL能够更有效地读取索引数据。使用cluster命令,例如:
CLUSTER the_geom ON table;
除地理空间组件外,还可以在数据库服务器本身上执行许多优化。最简单的是增加 max_buffers 在 postgresql.conf 文件,允许PostgreSQL使用更多的内存进行缓存。有关更多信息,请访问 PostgreSQL website .
一般数据库(postgis、oracle、mysql)¶
默认情况下,mapserver为mapfile中的每个数据库驱动层打开和关闭一个新的数据库连接。如果有多个层从同一个数据库中读取,这就没有什么意义。而且,随着一些数据库(Oracle)的建立,连接需要足够的时间才能变得重要。
尝试将此行添加到数据库层:
PROCESSING "CLOSE_CONNECTION=DEFER"
这会导致MapServer在处理完 Mapfile 之前无法关闭每个层的数据库连接,这可能会减少几秒钟的映射生成时间。