Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 21 November 2013 12:12

diletant2
Participant occasionnel
Date d'inscription: 10 Feb 2010
Messages: 36

Optimisation de la relation MapServer - Ms Sql Server

Bonjour,

Je viens de connecter MapServer à SQL Server en utilisant le driver MSSQLSpatial d'OGR.

Je me pose des questions sur comment optimiser le transfert des données depuis SQL Server et leur "requetabilité" par MapServer.

Sachant que les données à cartographier sont issues :
- d'une jointure entre 2 tables sur un champ à clé unique
- j'ai plusieurs layers en fonction des modalités prises par 2 champs attributaires (where champ1 = val1 and champ2=val2)

exemple de (pseudo)requête pour 1 layer :

Code:

select geometry from table1, table2 where id=id and champ1=val1 and champ2=val2

Les tables SQL ont déjà des index sur les 4 champs utilisés : geometry, id, champ1, champ2

Est-ce qu'il faut mieux créer des vues SQL pour chaque requête, i.e chaque layer ?

Code:

DATA 'select geometry from vue1'

ou bien inscrire la requête SQL pour chaque layer ?

Code:

DATA 'select geometry from table1, table2 where id=id and champ1=val1 and champ2=val2'

est-ce qu'il faut mieux récupérer tout le lot de données et faire appliquer des filtres par MapServer ?

Code:

DATA 'select geometry from table1, table2 where id=id'
FILTERITEM "champ1"
FILTER "val1"

à partir du lot de données reçues depuis Sql Server, comment fait MapServer pour optimiser le requêtage ultérieur ?
sur la géométrie ? sur les champs attributaires ?

Merci pour vos réponses

Hors ligne

 

#2 Fri 22 November 2013 13:55

diletant2
Participant occasionnel
Date d'inscription: 10 Feb 2010
Messages: 36

Re: Optimisation de la relation MapServer - Ms Sql Server

La question se pose d'autant plus que quand je regarde les requêtes SQL passées à la base de données par Mapserver, elles sont du style :

Code:

select geometry from ...

sans jamais de clause géographique additionnelle :

Code:

where STIntersects(...)

Cela voudrait-il dire que MapServer récupère un lot de géométries depuis la source de donnes (OGR) puis applique le critère de zone (tile, bbox, etc) de la carte à dessiner ?
A ce moment-là, cela signifie que MapServer ne peut plus profiter d'un système d'index géographique quelconque ! d'où des performance moindres...??

Dernière modification par diletant2 (Fri 22 November 2013 13:56)

Hors ligne

 

#3 Sat 23 November 2013 19:48

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Optimisation de la relation MapServer - Ms Sql Server

Bonsoir,

Je suis étonné (mais pas développeur) de ce problème de filtre spatiaux non utilisé par MapServer pour requêter la base car il me semble bien que ce soit le cas pour les bases postgis !

Pour avoir de bonne performance, il faut que les données en base soit le plus proche de ce qui sera affichée in fine. Les jointures sont donc à proscrire et il vaut mieux mettre en place une procédure de pré-traitement pour que les données soient prêtes lors de leur lecture par MapServer.

Maintenant il y a des contraintes que l'on ne maitrise pas et ceci n'est pas toujours facile. Normalement si tu utilises un paramètre FILTER dans ton objet LAYER MapServer ajoutera la clause WHERE qui va bien. Donc la mettre dans ce paramètre ou dans les DATA ne devrait rien changer.

En relisant ton dernier message, je me demande si tu visualises toutes les requêtes car de mémoire les requêtes SQL de MapServer sont du type

select champ1, champ2, geometry FROM (<ici la requête SQL du paramètre DATA>) as foo ...


Utiliser une vue pour la jointure ou l'écrire dans MapServer ne doit pas faire de différence.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

Pied de page des forums

Powered by FluxBB