NL:Taginfo/Architecture

From OpenStreetMap Wiki
Jump to: navigation, search
Beschikbare talen — Taginfo/Architecture
Afrikaans Alemannisch aragonés asturianu azərbaycanca Bahasa Indonesia Bahasa Melayu Bân-lâm-gú Basa Jawa Baso Minangkabau bosanski brezhoneg català čeština dansk Deutsch eesti English español Esperanto estremeñu euskara français Frysk Gaeilge Gàidhlig galego Hausa hrvatski Igbo interlingua Interlingue isiXhosa isiZulu íslenska italiano Kiswahili Kreyòl ayisyen kréyòl gwadloupéyen kurdî latviešu Lëtzebuergesch lietuvių magyar Malagasy Malti Nederlands Nedersaksies norsk norsk nynorsk occitan Oromoo oʻzbekcha/ўзбекча Plattdüütsch polski português română shqip slovenčina slovenščina Soomaaliga suomi svenska Tiếng Việt Türkçe Vahcuengh vèneto Wolof Yorùbá Zazaki српски / srpski беларуская български қазақша македонски монгол русский тоҷикӣ українська Ελληνικά Հայերեն ქართული नेपाली मराठी हिन्दी অসমীয়া বাংলা ਪੰਜਾਬੀ ગુજરાતી ଓଡ଼ିଆ தமிழ் తెలుగు ಕನ್ನಡ മലയാളം සිංහල ไทย မြန်မာဘာသာ ລາວ ភាសាខ្មែរ ⵜⴰⵎⴰⵣⵉⵖⵜ አማርኛ 한국어 日本語 中文(简体)‎ 吴语 粵語 中文(繁體)‎ ייִדיש עברית اردو العربية پښتو سنڌي فارسی ދިވެހިބަސް
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.