La modélisation d’une géodatabase contribue à produire un schéma clair et à réduire le travail de maintenance. C’est une étape nécessaire afin d’assurer une bonne conception, et qui contribue directement à l’optimisation de la géodatabase. Le problème c’est que, souvent, on néglige cette étape de conception du schéma. Même si on passe par cette étape, de toutes manières la geodatabase va croître pendant son cycle de vie et sa performance aura tendance à diminuer naturellement.
Plus vous avez d’entités dans une geodatabase, plus de temps la géodatabase prend pour exécuter une requête. C’est pourquoi, dans cette série d’articles, on décrira les outils pour vous aider à régler la géodatabase pour travailler de manière optimale. Certains outils ne seront utilisés qu’au moment de la création de la géodatabase, d’autres vous devrez les exécuter fréquemment.
Ces articles vont couvrir trois thèmes. Premièrement, nous allons en apprendre davantage sur l’indexation des classes d’entités et comment cela peut aider à accélérer l’interrogation. Deuxièmement, nous allons voir le concept de compression, où nous allons apprendre comment cela peut réduire la taille de la géodatabase. Enfin, nous allons voir comment compacter les geodatabases et aider à ainsi à accélérer les requêtes pour une géodatabase fréquemment éditée.
L’indexation est une fonctionnalité qui permet d’accélérer la requête de données, selon un attribut ou une collection d’attributs, dans une table de base de données.
La compression est un processus par lequel les données dupliquées dans des jeux de données de géodatabase sont simplifiées afin de réduire leur taille.
Le compactage est un processus par lequel une géodatabase, souvent éditée, est nettoyé des éléments inutilisés et orphelins.
Indexation d’une geodatabase
L’indexation est le principe de base de l’optimisation des bases de données. C’est un outil très puissant et efficace qui peut aider à accélérer la recherche d’enregistrements. Sans indexation, une table est balayée entièrement pour récupérer un enregistrement particulier. Donc, si nous avons un ensemble de données avec n enregistrements, le pire scénario est que l’enregistrement que nous essayons de localiser soit le dernier enregistrement de cette table, et donc nous avons besoin de rechercher à travers les n enregistrements afin de l’atteindre. Imaginez une classe d’entités avec un million d’entités, si le temps nécessaire pour lire chaque entité est d’une milliseconde, cela signifie que nous devrons attendre 17 minutes pour balayer l’ensemble des données.
Bien sûr, le temps de réponse dépend de la place de l’enregistrement que vous cherchez. Si il est situé au début de la table, il faudra beaucoup moins de temps pour l’atteindre.
L’indexation est à peu près similaire à la façon dont vous organisez vos fichiers par ordre alphabétique. Quand vous cherchez un document, s’il commence par la lettre D, vous ne cherchez que parmi les documents commençant par D. Pour activer l’indexation, la géodatabase crée une autre table pour l’attribut à indexer.
Indexation fonctionne de façon similaire avec presque n’importe quel type de champ: texte, nombres, dates, et même avec le type de données spatiales comme la géométrie des entités. Les index créés sur les colonnes « shape » sont appelés index spatiaux, qui suivent le même concept que les indices sur les attributs.
Tous les deux réduisent le domaine de recherche des requêtes pour obtenir une plus grande performance.
Indexer un attribut
Supposons que vous avez commencé à effectuer des requêtes d’attribut sur votre géodatabase, quelles optimisations pouvez vous apporter pour une meilleure performance?. Nous allons commencer par l’ajout d’un index d’attribut.La question est, sur lequel attribut doit_on créer un index? Habituellement, cette question doit se poser pendant l’étape de modélisation de la géodatabase, où les index sont ajoutés dans le diagramme entité-relation. Les index sont créés sur les attributs qui sont fréquemment interrogés. Si vous avez sauté cette étape, vous pouvez les créer pendant l’exploitation en routine de votre base de données. Dans la géodatabase Cadastre, le champ Nom du Propriétaire est un bon candidat pour créer un index si vous recherchez souvent par Nom-Prénom des propriétaires. Pour créer un index d’attribut, procédez comme suit:
1. Ouvrez ArcCatalog.
2. Recherchez la géodatabase dans la fenêtre arborescence du catalogue.
3. Faites un clic droit sur la table contenant vos propriétaire, puis sélectionnez Propriétés…
4. Dans la boîte de dialogue Propriétés de la classe d’entité, sélectionnez l’onglet Index.
5. La fenêtre Index d’attributs montre les index existants pour cette classe d’entités.
Comme vous pouvez le voir, il y a un indice de FDO_OBJECTID (la clé primaire), qui est un index très important qui ne peut pas être retiré. La géodatabase utilise cet index pour identifier de façon unique chaque entité. Lorsque vous cliquez sur FDO_OBJECTID, dans la section Champs, vous voyez le champ pour lequel cet index est créé, comme le montre la capture d’écran ci-dessus.
6. Cliquez sur Ajouter… pour ajouter un nouvel index sur attribut.
7. Dans la boîte de dialogue Ajouter un Index sur attributx, tapez un nom de votre choix pour identifier ce nouvel index.
8. Dans la liste de Champs disponibles, sélectionnez le champ qui vous intéresse, dans cet exemple NOM_PRENOM, et cliquez sur la flèche droite pour l’ajouter à la liste, comme vous pouvez le voir dans la capture d’écran ci-dessous:
9. Cliquez sur OK, le nouvel index apparaît sur la liste des index de la tablke.
10. Cliquez sur Appliquer et quittez la fenêtre en cliquant sur OK
Maintenant, quand vous effectuerez une requête sur l’attribut Nom_prénom, ArcGis utilisera cet index pour accélérer la requête.
La table utilisée dans cet exemple comporte 23053 lignes.
On a construit un petit modèle de traitement avec Model Builder, comportant une requête de sélection du type nom_prenom like ‘JEAN DUPONT*’, correspondant au dernier propriétaire de la table.
Le modèle a pris 1,27 secondes pour s’exécuter sans index supplémentaire.
Une fois ajouté l’index sur le champ nom_prénom, le même modèle s’est exécuté en 0,76 secondes, soit un gain de 40% de temps de réponse.
Ajout d’un index spatial
Lorsque vous créez une classe d’entités, un index spatial est automatiquement créé et optimisé pour cette classe d’entités. A tout moment, vous pouvez supprimer et recréer l’index spatial en effectuant les étapes suivantes:
1. Ouvrez ArcCatalog et accédez à la géodatabase .
2. Faites un clic droit sur la classe d’entités concernée et sélectionnez Propriétés
3. Cliquez sur l’onglet Index.
4. Dans la section index spatial, cliquez sur Supprimer pour supprimer l’index spatial.
5. Cliquez sur Créer si vous souhaitez créer à nouveau l’index spatial.
6. Fermez ArcCatalog.
La suppression et recréation de l’index spatial est un bon exercice sur une géodatabase qui est souvent modifiée, car cela assure la cohérence des requêtes spatiales.
Optimisation des indexations
Bien que l’indexation soit un excellent outil pour l’optimisation, il peut être contreproductif s’il est mis en œuvre de manière incorrecte. Lorsque vous indexez une colonne, la géodatabase crée une structure cachée supplémentaire qui doit être gérée et actualisée fréquemment. Plus vous avez d’index, plus de travail est nécessaire lors des mises à jour de la geodatabase. Des index supplémentaires peuvent ralentir les opérations de mise à jour telles que INSERT, UPDATE et DELETE, parce que la géodatabase doit régénérer les index correspondants.
Évitez de créer des index sur des colonnes avec très peu de valeurs distinctes, parce que souvent ils ne vous donneront pas d’améliorations de la performance. Il est bon de créer des index sur des colonnes avec des valeurs uniques ou presque uniques. Vous pouvez calculer le pourcentage d’amélioration des performances d’une indexation en utilisant la formule suivante:
Dans la formule précédente, a est l’attribut d’être indexé et ind(a) est l’indice d’efficacité de l’indexation; 100% étant le maximum et 0% le plus faible. d(a) est le nombre de valeurs distinctes dans la colonne d’attribut a et n(a) est le nombre de valeurs totales de a. Notez que si a est une clé primaire, ind(a) est de 100%.
Cela explique aussi pourquoi les champs de type CATÉGORIE ont un faible score sur les performances d’indexation avec cette formule.