Vecteur

Author:HostGIS
Last Updated:

08/08/2008

Découper votre donnée

Si vous vous retrouvez à utiliser plusieurs couches et qu’elles utilisent toutes la même source de données mais que que vous faites un filtre pour n’avoir que quelques enregistrements, vous pouvez surement faire mieux. Si le critère est statique, une approche est de pré-découper les données.

L’utilitaire ogr2ogr peut sélectionner certains objets d’une source de données, et les sauver dans une nouvelle source. Ainsi, vous pouvez découper votre jeu de données en plusieurs autres plus petits qui sont déjà filtrés, et enlever l’instruction FILTER.

Shapefiles

Utilisez shptree pour générer un index spatial sur votre shapefile. C’est rapide et facile (“shptree foo.shp”) et génère un fichier .qix. MapServer le détectera et l’utilisera automatiquement.

MapServer vient aussi avec l’utilitaire sortshp. Il réorganise un shapefile, en le triant suivant les valeurs d’une de ces colonnes. Si vous effectuez souvent des filtrespar critères et que c’est presque toujours suivant une colonne spécifique, cela peut rendre le processus un peu plus efficace.

Malgré le fait que les shapefiles soit un format avec un accès très rapide, PostGIS est plutôt rapide également, particulièrement si vous utilisez les index judicieusement et avez assez de mémoire pour le cache.

PostGIS

La plus grosse augmentation de performance se fait via l’indexation. Assurez-vous qu’il y a un index GIST sur la colonne géométrie, et que chaque enregistrement a aussi une clé primaire indexée. Si vous utilisez shp2pgsql, alors ces instructions devrait créer les index nécessaires :

ALTER TABLE table ADD PRIMARY KEY (gid);
CREATE INDEX table_the_geom ON table (the_geom) USING GIST;

PostgreSQL supporte aussi la réorganisation des données dans une table, de manière à ce qu’elle soit physiquement triée par index. Cea permet à PostgreSQL d’être plus efficace dans la lecture des données indexées. Utiliser la commande CLUSTER, c’est à dire.

CLUSTER the_geom ON table;

Ensuite, il y a de nombreuses optimisations que vous pouvez effectuer sur le serveur de base de données lui-même, indépendamment de sa cartouche spatiale. La manière la plus simple est d’augmenter la valeur de max_buffers dans le fichier postgresql.conf, qui permet à PostgreSQL d’utiliser plus de mémoire pour le cache. Plus d’informations peuvent être trouvées sur le site web de PostgreSQL.

Bases de données en général (PostGIS, Oracle, MySQL)

Par défaut, MapServer ouvre et ferme une nouvelle connexion à la base de données pour chacune des couches dans le mapfile ayant pour source une base. Si vous lisez plusieurs couches à partir d’une même base de données, ce comportement n’a aucun sens. Et avec certaines bases de données (Oracle), établir des connections prend sufffisamment de temps pour que ce soit significatif.

Essayer d’ajouter cette ligne dans vos couches de base de données :

PROCESSING "CLOSE_CONNECTION=DEFER"

Cela indique à MapServer de na pas fermer la connexion à la base de données pour chaque couche après qu’il ait fini de parcourir le mapfile et cela pourra parfois vous faire gagner quelques secondes sur les temps de générations de cartes.