矢量

作者

主机地理信息系统

最后更新

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_bufferspostgresql.conf 文件,允许PostgreSQL使用更多的内存进行缓存。有关更多信息,请访问 PostgreSQL website .

一般数据库(postgis、oracle、mysql)

默认情况下,mapserver为mapfile中的每个数据库驱动层打开和关闭一个新的数据库连接。如果有多个层从同一个数据库中读取,这就没有什么意义。而且,随着一些数据库(Oracle)的建立,连接需要足够的时间才能变得重要。

尝试将此行添加到数据库层:

PROCESSING "CLOSE_CONNECTION=DEFER"

这会导致MapServer在处理完 Mapfile 之前无法关闭每个层的数据库连接,这可能会减少几秒钟的映射生成时间。