FR:Taginfo/Architecture

From OpenStreetMap Wiki
Jump to navigation Jump to search

Taginfo recueille des informations de plusieurs sources et les rassemble en un seul endroit. Cela se fait en plusieurs étapes. Il existe quelques scripts shell pour organiser tout cela (dans le répertoire sources).

Dans la première étape, les données provenant de sources externes sont acquises et prétraitées. Pour chaque source, un script est exécuté pour cela. Il télécharge les données (pages wiki, fichiers de configuration à partir des référentiels de code de l'éditeur, etc.) et les analyse. Le résultat est écrit dans une base de données Sqlite pour chaque source. Chaque base de données contient une table appelée source avec les méta informations de cette source (nom, dernière mise à jour, ...) et une table appelée stats contenant quelques statistiques importantes, et en fonction de la source quelques autres tables. Pour chaque source, les scripts pre.sql et post.sql sont exécutés avant et après l'importation dans la base de données. Pour la plupart des sources, l'importation de données se fait avec quelques scripts shell et Ruby uniquement, mais pour générer les statistiques de la base de données OSM, un programme C++ appelé tagstats est utilisé pour créer ces statistiques beaucoup plus rapidement et avec moins de surcharge de mémoire que n'importe quel script.

Pour ajouter une source supplémentaire, tout ce que vous avez à faire est d'ajouter quelques scripts qui génèrent une base de données Sqlite avec ses données et de vous assurer qu'elle est appelée depuis update_all.sh. Vos scripts n'ont pas besoin d'être en Ruby, n'importe quel langage peut être utilisé. Jetez un œil aux scripts existants et vous verrez comment cela est fait.

Dans un deuxième temps, certaines des données de toutes ces bases de données Sqlite sont agrégées dans une base de données supplémentaire (taginfo-master.db). Cela inclut le contenu des tables source et stats mentionnées ci-dessus, une liste de langues, des clés populaires pour le nuage de tags et les données utilisées pour les suggestions dans la zone de recherche.

Dans une étape ultérieure, les données sont écrites dans la base de données taginfo-search.db. Cela utilise l'extension de recherche de texte intégral FTS3 pour Sqlite. Ces données sont principalement une copie des données d'autres bases de données mais organisées de manière à effectuer une recherche rapide.

Une fois que toutes les bases de données ont été créées sans erreur, elles sont déplacées au bon emplacement afin que l'interface utilisateur Web et l'API y aient accès et que le service Web taginfo soit redémarré afin d'ouvrir les nouvelles bases de données. Le composant de service Web est écrit en Ruby à l'aide du framework Web Sinatra. Il accède simplement aux bases de données créées lors de l'étape d'importation et affiche les bonnes données. Tout le traitement complexe a déjà été effectué lors de l'importation.

Pour permettre aux utilisateurs d'accéder aux informations collectées, les bases de données créées lors des étapes d'importation sont compressées (à l'aide de bzip2) et placées dans un endroit où elles peuvent être téléchargées.