NL:Taginfo/Architecture

From OpenStreetMap Wiki
Jump to navigation Jump to search
Taginfo-architecture.png

Taginfo verzamelt informatie uit verschillende bronnen en brengt die samen op één plaats. Dit wordt in verscheidene stappen uitgevoerd. Er zijn een aantal shell-scripts om dit alles te organiseren (in de map sources).

In de eerste stap worden gegevens uit externe bronnen opgehaald een voorbewerkt. Voor elke bron wordt een script uitgevoerd dat dit doet. Het downloadt de gegevens (wikipagina's, configuratiebestanden uit opslagplaatsen van bewerkingscode, etc.) en parst die. Het resultaat wordt weggeschreven naar één database van Sqlite voor elke bron. Elke database bevat een tabel genaamd source met de meta-informatie van deze bron (naam, laatste bijwerking, ...) en een tabel genaamd stats die enkele belangrijke statistieken bevat, en, afhankelijk van de bron, een aantal andere tabellen. Voor elke bron worden SQL=scripts pre.sql en post.sql uitgevoerd vóór en ná het importeren in de database. Voor de meeste bronnen wordt het importeren van de gegevens gedaan met slechts een aantal shell- en Ruby-scripts, maar voor het genereren van de database van statistieken van OSM wordt een C++ programma, genaamd tagstats gebruikt dat deze statistieken veel sneller kan maken en met minder benodigd geheugen dan enig ander script zou kunnen.

Voor het toevoegen van een aanvullende bron, is alles wat u hoeft te doen is een paar scripts toevoegen die een database voor Sqlite genereren met zijn gegevens en er voor te zorgen dat die wordt aangeroepen vanuit update_all.sh. Uw scripts hoeven niet in Ruby te zijn, elke taal kan worden gebruikt. Bekijk de bestaande scripts eens en u zult zien hoe het wordt gedaan.

In een tweede stap worden enkele gegevens van al deze databases van Sqlite verzameld in een aanvullende database (taginfo-master.db). Deze omvat de inhoud van de hierboven vermelde tabellen source en stats, een lijst van talen, populaire sleutels voor de cloud van tags, en de gegevens die worden gebruikt voor de suggesties in het zoekvak.

In een volgende stap worden gegevens geschreven naar de database taginfo-search.db. Het gebruikt de FTS3 full text search extensie voor Sqlite. Deze gegevens zijn meestal een kopie van de gegevens uit andere databases maar op een dusdanige manier georganiseerd dat zoeken heel snel gaat.

Nadat alle databases zonder fouten zijn gemaakt, worden zij verplaatst naar de juiste locatie zodat de webgebruikersinterface en API er toegang tot hebben en de taginfo webservice wordt opnieuw gestart zodat het de nieuwe databases opent. De component webservice is geschreven in Ruby met behulp van het Sinatra webframework. Het verkrijgt in de basis toegang tot de bij de stap van importeren gemaakte databases en geeft de juiste gegevens weer. Alle complexe verwerking is bij het importeren al gedaan.

De gemaakte databases bij de stappen van importeren worden gecomprimeerd (met behulp van bzip2) en op ene plaats neergezet waar zij kunnen worden gedownload, om gebruikers toegang te verschaffen tot de verzamelde informatie.