Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

Changeset 39


Ignore:
Timestamp:
26/09/2011 17:04:16 (6 years ago)
Author:
nbozon
Message:

Section 10,111,12 and 13 corrected/re-corrected

Location:
trunk/workshop-foss4g
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/workshop-foss4g/indexing.rst

    r33 r39  
    11.. _indexing: 
    22 
    3 Partie 14 : les indexes spatiauux 
     3Partie 14 : Les indexes spatiaux 
    44================================= 
    55 
    6 Rapellez-vous que les indexes spatiaux est l'une des trois fonctionnalités clées d'une base de données spatiales. Les indexes sont ce qui rend possible l'utilisation de grandes quantités de données dans une base. Sans indexation, chaque recherche d'une entité nécessitera d'accéder séquentiellement à tout les enregistrement de la base de données. L'indexation rend plus rapide les recherche en organisant les données dans des arbre de recherches qui peuvent être parcouru efficacement pour retrouver une entité particuliÚre. 
     6Rapellez-vous que les indexes spatiaux sont l'une des trois fonctionnalités clés d'une base de données spatiales. Les indexes rendent possible l'utilisation de grandes quantités de données dans une base. Sans indexation, chaque recherche d'une entité nécessitera d'accéder séquentiellement à tout les enregistrement de la base de données. L'indexation rend plus rapide les recherche en organisant les données dans des arbres de recherche qui peuvent être parcouru efficacement pour retrouver une entité particuliÚre. 
    77 
    8 Les indexes spatiauxs ont l'un des plus grands atouts de PostGIS. Dans les exemples précédents, nous construissions nos jointures spatiales en comparant la totalité des tables. Ceci peut s'averrer trÚs coûteux : réaliser la jointure de deux tables de 10000 enrigstrements sans index nécessitera de comparer 100000000 valeurs, avec les indexes le comparaisons requises seront 20000. 
     8Les indexes spatiaux sont l'un des plus grands atouts de PostGIS. Dans les exemples précédents, nous construissions nos jointures spatiales en comparant la totalité des tables. Ceci peut s'averrer trÚs coûteux : réaliser la jointure de deux tables de 10000 enregistrements sans index nécessitera de comparer 100000000 valeurs, avec les indexes les comparaisons requises seront 20000. 
    99 
    1010Lorsque nous avons chargé la table  ``nyc_census_blocks``, l'outils pgShapeLoader crée automatiquement un indexe spatial appelé ``nyc_census_blocks_the_geom_gist``. 
     
    2222   La commande ``DROP INDEX`` supprime un index existant de la base de données. Pour de plus amples informations à ce sujet, consultez la `documentation officielle de PostgreSQL <http://docs.postgresql.fr/9.1/sql-dropindex.html>`_. 
    2323    
    24 Maintenant, regardons le temps d'exécution dans le coin en bas à droite  de l'interface de requêtage de pgAdmin et lançons la commande suivante. Notre requête recherche les bloques de la rue Broad. 
     24Maintenant, regardons le temps d'exécution dans le coin en bas à droite de l'interface de requêtage de pgAdmin et lançons la commande suivante. Notre requête recherche les blocs de la rue Broad. 
    2525 
    2626.. code-block:: sql 
     
    3838  360610007003006 
    3939   
    40 La table ``nyc_census_blocks`` est trÚs petite (seulement quelque millier d'enregistrements) donc même sans l'index, la requête prends **55 ms** sur mon ordinateur de test. 
     40La table ``nyc_census_blocks`` est trÚs petite (seulement quelque millier d'enregistrements) donc même sans l'index, la requête prends **55 ms** sur l'ordinateur de test. 
    4141 
    4242Maintenant remettons en place l'indexe et lançons de nouveau la requête. 
     
    4646  CREATE INDEX nyc_census_blocks_the_geom_gist ON nyc_census_blocks USING GIST (the_geom); 
    4747 
    48 .. note:: l'utilisation de la clause ``USING GIST`` spécifie à PostgreSQL de créer une structure (GIST) pour cet indexe. Si vous recevez un mesage d'erreur ressemblant à ``ERROR: index row requires 11340 bytes, maximum size is 8191`` lors de la création, cela signifie sans doute que vous avez omis la clause ``USING GIST``. 
     48.. note:: l'utilisation de la clause ``USING GIST`` spécifie à PostgreSQL de créer une structure (GIST) pour cet indexe. Si vous recevez un message d'erreur ressemblant à ``ERROR: index row requires 11340 bytes, maximum size is 8191`` lors de la création, cela signifie sans doute que vous avez omis la clause ``USING GIST``. 
    4949 
    50 Sur mon ordinateur de test le temps d'exécution se réduit à **9 ms**. Plus votre table est grande, plus la différence de temps d'exécution pour une requête utilisant les indexes sera augmenté. 
     50Sur l'rdinateur de test le temps d'exécution se réduit à **9 ms**. Plus votre table est grande, plus la différence de temps d'exécution pour une requête utilisant les indexes augmentera. 
    5151 
    5252Comment les indexes spatiaux fonctionnent 
    5353----------------------------------------- 
    5454 
    55 Les indexes des base de données standards crée un arbre hierarchique basé sur les valeurs de la colonne à indexer. Les indexes spatiaux sont un peu différents - ils ne sont pas capable d'indexer des entité gémétriques elles-même mais indexe leur étendues. 
     55Les indexes des base de données standards crée un arbre hierarchique basé sur les valeurs de la colonne à indexer. Les indexes spatiaux sont un peu différents - ils ne sont pas capables d'indexer des entités géométriques elles-même mais indexe leur étendues. 
    5656 
    5757.. image:: ./indexing/bbox.png 
    5858 
    59 Dans la figure ci-dessus, le nombre de lignes qui intersectent l'étoile jaune est *unique*, la ligne rouge. Mais l'étendue des entités qui intersectent la boîte jaune sont *deux*, la boîte rouge et la bleu. 
     59Dans la figure ci-dessus, le nombre de lignes qui intersectent l'étoile jaune est *unique*, la ligne rouge. Mais l'étendue des entités qui intersectent la boîte jaune sont *deux*, la boîte rouge et la boîte bleue. 
    6060 
    6161La maniÚre dont les bases de données répondent de maniÚre efficaces à la questions "quelle ligne intersectent l'étoile jaune ?" correspond à d'abort répondre à question ; "quelle étendue intersecte l'étendue jaune" en utilisant les indexes (ce qui est trÚs rapide) puis réalise le calcul exacte de "quelles lignes intersectent l'étoile jaune" **seulement en utilisant les entités retourné par le premier test**. 
    6262 
    63 Pour de grandes tables, il y a un systÚme en "deux étape" d'évaluation en utilisant dans un premier temps l'approximation à l'aide d'indexes, puis en réalisant le test exact sur un quantité bien moins importantes de données ce qui réduit drastiquement le temps de calcul nécessaire à cette deuxiÚme étape. 
     63Pour de grandes tables, il y a un systÚme en "deux étapes" d'évaluation en utilisant dans un premier temps l'approximation à l'aide d'indexes, puis en réalisant le test exact sur une quantité bien moins importante de données ce qui réduit drastiquement le temps de calcul nécessaire à cette deuxiÚme étape. 
    6464 
    65 Ã€ la fois PotGIS et Oracle Spatial partage la même notion d'index structuré sous la forme "d'arbres R" [#RTree]_. Les arbres R classent les données sous forme de rectangles, de sous-rectangles etc. Cette structure d'index gÚre automatiquement la densité et la taille des objets. 
     65PotGIS et Oracle Spatial partage la même notion d'index structuré sous la forme "d'arbres R" [#RTree]_. Les arbres R classent les données sous forme de rectangles, de sous-rectangles etc. Cette structure d'index gÚre automatiquement la densité et la taille des objets. 
    6666 
    6767.. image:: ./indexing/index-01.png 
    6868 
    69 Requête avec seulement des index 
    70 -------------------------------- 
     69Requête avec seulement des indexes 
     70---------------------------------- 
    7171 
    72 La plupart des fonctions utilisées par PostGIS (:command:`ST_Contains`, :command:`ST_Intersects`, :command:`ST_DWithin`, etc) prennent en compte les index automatiquement. Mais certaines fonctions (comme par exemple : :command:`ST_Relate`) ne les utilisent pas. 
     72La plupart des fonctions utilisées par PostGIS (:command:`ST_Contains`, :command:`ST_Intersects`, :command:`ST_DWithin`, etc) prennent en compte les indexes automatiquement. Mais certaines fonctions (comme par exemple : :command:`ST_Relate`) ne les utilisent pas. 
    7373 
    74 Pour utiliser une recherche par étendue utilisant les indexes (et pas de filtres), vous pouvez utiliser l'opérateur :command:`&&`. Pour les géométries, l'opérateur :command:`&&` signifie "l'étendue recouvre ou touche" de la même maniÚre que l'opérateur :command:`=` sur des entiers signifi que les valeurs sont égales. 
     74Pour utiliser une recherche par étendue utilisant les indexes (et pas de filtres), vous pouvez utiliser l'opérateur :command:`&&`. Pour les géométries, l'opérateur :command:`&&` signifie "l'étendue recouvre ou touche" de la même maniÚre que l'opérateur :command:`=` sur des entiers signifie que les valeurs sont égales. 
    7575 
    7676Essayons de comparer une requête avec seulement un indexe pour la population du quartier 'West Village'. En utilisant la commande :command:`&&` notre requête ressemble à ce qui suit : 
     
    102102  27141 
    103103 
    104 Un plus faible nombre de résultat ! La premiÚre requête nous renvoit tout les bloques qui intersectent l'étendue du quartier, la seconde nous renvoit seulement les bloques qui intersectent le quartier lui-même. 
     104Un plus faible nombre de résultats ! La premiÚre requête nous renvoit tout les bloqcs qui intersectent l'étendue du quartier, la seconde nous renvoit seulement les blocs qui intersectent le quartier lui-même. 
    105105 
    106106Analyse 
     
    109109Le plannificateur de requête de PostgreSQL choisit intelligemment d'utiliser ou non les indexes pour réaliser une requête. Il n'est pas toujours plus rapide d'utiliser un index pour réaliser une recherche : si la recherche doit renvoyer l'ensemble des enregistrements d'une table, parcourir l'index pour récupérer chaque valeur sera plus lent que de parcourir linéairement l'ensemble de la table. 
    110110 
    111 Afin de savoir dans quelle situation il est nécessaire d'utiliser les idexes (lire une petite partie de la table plutÃŽt qu'une grande partie), PostgreSQL conserve des statistiques relatives à la distribution des données dans chaque colonne indexée. Par défaut, PostgreSQL rassemble les statistiques sur une base réguliÚre. Nénamoins, si vous changez dramatiquement les contenu de vos tables dans une période courte, les statisuqes ne seront alors plus à jour. 
     111Afin de savoir dans quelle situation il est nécessaire d'utiliser les idexes (lire une petite partie de la table plutÃŽt qu'une grande partie), PostgreSQL conserve des statistiques relatives à la distribution des données dans chaque colonne indexée. Par défaut, PostgreSQL rassemble les statistiques sur une base réguliÚre. Nénamoins, si vous changez dramatiquement le contenu de vos tables dans une période courte, les statisuqes ne seront alors plus à jour. 
    112112 
    113 Pour vous assurez que les statistiques correspondent bien au contenu de la table actuelle, il est courrant d'utiliser la commande ``ANALYZE`` aprÚs un grand nombre de modifications ou de suppression de vos donnée. Cela force le systÚme de gestion des statistiques à récupérer l'ensemble des données des colonnes indexées. 
     113Pour vous assurez que les statistiques correspondent bien au contenu de la table actuelle, il est courrant d'utiliser la commande ``ANALYZE`` aprÚs un grand nombre de modifications ou de suppression de vos données. Cela force le systÚme de gestion des statistiques à récupérer l'ensemble des données des colonnes indexées. 
    114114 
    115115La commande ``ANALYZE`` demande à PostgreSQL de parcourir la table et de mettre à jour les statistiques utilisées par le plannificateur de requêtes (la plannification des requêtes sera traité utiltérieurement). 
     
    126126Le nettoyage des données est tellement important pour une utilisation efficace du serveur de base de données PostgreSQL qu'il existe maintenant une option "autovacuum". 
    127127 
    128 Activée par défaut, le processus autovacuum à la fois néttoit (récupÚre l'espace libre) et analyse (met à jour les statistiques) de vos tables suivant un interval donnée déterminé par l'activité des bases de données. Bien que cela soit pour les bases de données hautement transactionnelles, il n'est pas supportable de devoir attendre que le processus autovacuum se lance lors de la mise à jour ou la suppression massive de données. Dans ce cas, il faut lancer la commande ``VACUUM`` manuellement. 
     128Activée par défaut, le processus autovacuum à la fois nettoit (récupÚre l'espace libre) et analyse (met à jour les statistiques) de vos tables suivant un interval donnée déterminé par l'activité des bases de données. Bien que cela soit pour les bases de données hautement transactionnelles, il n'est pas supportable de devoir attendre que le processus autovacuum se lance lors de la mise à jour ou la suppression massive de données. Dans ce cas, il faut lancer la commande ``VACUUM`` manuellement. 
    129129 
    130 Le nettoyage et l'analyse de la base de données peut être réalisée séparément si nécessaire. Utiliser la commande ``VACUUM`` ne mettra pas à jour les statistiques alors que lancer la commande ``ANALYZE`` ne récupÚrera pas l'espace libre des lignes d'une table. Chacune de ces commandes peut être lancé sur l'intégralité de la base de données, sur une table ou sur une seule colonne. 
     130Le nettoyage et l'analyse de la base de données peut être réalisé séparément si nécessaire. Utiliser la commande ``VACUUM`` ne mettra pas à jour les statistiques alors que lancer la commande ``ANALYZE`` ne récupÚrera pas l'espace libre des lignes d'une table. Chacune de ces commandes peut être lancé sur l'intégralité de la base de données, sur une table ou sur une seule colonne. 
    131131 
    132132.. code-block:: sql 
  • trunk/workshop-foss4g/spatial_relationships_exercises.rst

    r22 r39  
    11.. _spatial_relationships_exercises: 
    22 
    3 Partie 11 : exercises sur les relations spatiales 
     3Partie 11 : Exercises sur les relations spatiales 
    44=========================================== 
    55 
     
    1919* :command:`ST_Within(geometry A, geometry B)` retourne vrai si A est hors de B 
    2020 
    21 Souvenez-vous les tables à notre disposition : 
     21Souvenez-vous les tables à votre disposition : 
    2222 
    2323 * ``nyc_census_blocks``  
     
    5252     01050000202669000001000000010200000002000000093235673BE82141F319CD89A22E514170E30E0ADFE82141CB2D3EFFA52E5141 
    5353      
    54  * **"Quel sont les quartiers et villes sont dans Atlantic Commons ?"** 
     54 * **"Quel sont les quartiers et villes qui sont dans Atlantic Commons ?"** 
    5555      
    5656   .. code-block:: sql 
     
    9191   
    9292 
    93  * **"Approximativement combien de personnes vivent dans (ou à un dans une zone de 50 meters autour) Atlantic Commons ?"** 
     93 * **"Approximativement combien de personnes vivent dans (ou dans une zone de 50 meters autour) Atlantic Commons ?"** 
    9494  
    9595   .. code-block:: sql 
Note: See TracChangeset for help on using the changeset viewer.