Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
@alexiskinsella#DevoxxGTFS
INTÉGRER ET EXPLOITER LE FORMAT DE
DONNÉES OUVERT GTFS. FAILS ET SUCCÈS,
CE QUI MARCHE ET CE QU...
@alexiskinsella#DevoxxGTFS
Plan
1. Présentation
2. Intégration
3. Exploitation
Présentation du standard GTFS
@alexiskinsella#DevoxxGTFS
Signification
General Transit Feed Specification
@alexiskinsella#DevoxxGTFS
Normalisation
Normalisé par en 2005
@alexiskinsella#DevoxxGTFS
Définition
Format commun pour les informations d’horaires de
transports publics et données géog...
@alexiskinsella#DevoxxGTFS
Objectifs
Les flux de données GTFS permettent:
1. Aux agences de transport public de publier le...
@alexiskinsella#DevoxxGTFS
Horaires théoriques
La norme GTFS concerne les données théoriques
c’est à dire les horaires pla...
@alexiskinsella#DevoxxGTFS
Le format GTFS
Un jeu de données est composé d’une série de
fichiers textes (au format CSV) ras...
@alexiskinsella#DevoxxGTFS
Horaires temps réel
Le format de données est basé sur protobuf … Oui, c’est :)
La norme GTFS-re...
@alexiskinsella#DevoxxGTFS
Qui ?
Les données GTFS sont fournies par les agences de
transport:
…
@alexiskinsella#DevoxxGTFS
Pourquoi ?
Intérêt citoyen
Mouvance Open Data
Volonté politique (Etalab, …)
@alexiskinsella#DevoxxGTFS
Licences
Elles sont multiples …
• Open Database License (ODbL) v1.0
• SNCF Open Data
• …
Et cer...
@alexiskinsella#DevoxxGTFS
Licences
Droit d’audit
Comme prévu à l’article 15, la Communauté urbaine
de Lyon dispose d’un d...
@alexiskinsella#DevoxxGTFS
Disparité de l’accès aux données
Certains jeux de données sont en accès libre …
D’autres sont a...
@alexiskinsella#DevoxxGTFS
Disparité des jeux de données
Problèmes d’interprétation de la norme
Maturité des jeux de donné...
Un zip dans un zip ?
Intégration de données GTFS
@alexiskinsella#DevoxxGTFS
Facts
Entre 550Mo et 750Mo
Soit entre 11.866.989 et
15.747.594 lignes
@alexiskinsella#DevoxxGTFS
Intégration
Mieux vaut être efficace …
Mais comment intégrer toutes ces lignes ?
@alexiskinsella#DevoxxGTFS
Le temps de l’innocence
+ =
@alexiskinsella#DevoxxGTFS
Le temps de l’innocence
Ok, Google, tu me trouves un script d’import ?
@alexiskinsella#DevoxxGTFS
Avantages
Facile et rapide à mettre en place !
Fonctionne Out of the Box
@alexiskinsella#DevoxxGTFS
Inconvénients
Mais ce n’est pas très rapide tout ça …
@alexiskinsella#DevoxxGTFS
Benchmark simpliste …
Date Node.js MongoDB MongoDB Driver Durée
Juin 2014 0.10.22 2.6.1 1.3.19 ...
@alexiskinsella#DevoxxGTFS
Inconvénients
Ah Oui, Node.js fonctionne sur 1 core …
Dommage ma machine en a 8 !
Ah ! Et mongo...
@alexiskinsella#DevoxxGTFS
Benchmark simpliste …
Au fait, ça donne quoi sur un serveur ?
@alexiskinsella#DevoxxGTFS
Serveur rack 6U ?
@alexiskinsella#DevoxxGTFS
Ou plutôt un Raspberry PI ?
@alexiskinsella#DevoxxGTFS
Benchmark, la suite …
Sur un VPS 3 Cores, 4Go OVH
@alexiskinsella#DevoxxGTFS
Benchmark, la suite …
Environs 55 minutes
@alexiskinsella#DevoxxGTFS
Benchmark, la suite …
Malheureusement, ce n’est pas viable :/
@alexiskinsella#DevoxxGTFS
Benchmark, la suite …
Alors, peut-on faire mieux ?
@alexiskinsella#DevoxxGTFS
Benchmark, la suite
Clusteriser l’import et répartir le travail d’insertion ?
@alexiskinsella#DevoxxGTFS
Benchmark, la suite
Pourquoi pas, mais pas forcement trivial :/
On utilise bien tous les cores ...
Premature optimization
is the root of all evil
@alexiskinsella#DevoxxGTFS
Résultat
Beaucoup de temps perdu …
N’y a-t-il pas plus simple ?
@alexiskinsella#DevoxxGTFS
Benchmark, la suite
Finalement,
le vrai point de contention est l’écriture en base de données
M...
@alexiskinsella#DevoxxGTFS
Alternative …
Alors quelle solution ?
@alexiskinsella#DevoxxGTFS
Alternative …
Sharder MongoDB ?
Pas une solution si on a qu’un seul serveur à
disposition …
@alexiskinsella#DevoxxGTFS
Alternative …
Réfléchissons à nouveau !
@alexiskinsella#DevoxxGTFS
Alternative …
Relationnel, comme les bases de données SQL ?
GTFS -> Export de données relationn...
@alexiskinsella#DevoxxGTFS
Une alternative à MongoDB …
@alexiskinsella#DevoxxGTFS
Des atouts …
• Base de données relationnelle
• Insertion multi cores
• Support géo-spatial fort...
@alexiskinsella#DevoxxGTFS
Des défauts …
• Version 5.7 en Beta
• Support géo-spatial incomplet …
• Création coûteuse des i...
@alexiskinsella#DevoxxGTFS
Contourner les défauts
• Créer les index en fin de traitement
• Un schéma par dataset GTFS
• Ut...
@alexiskinsella#DevoxxGTFS
Une alternative à Node.js …
Remplacer Node.js par Golang
@alexiskinsella#DevoxxGTFS
Des avantages …
• Ultra performant
• Gestion de la concurrence efficace
@alexiskinsella#DevoxxGTFS
Des inconvénients …
• Un IDE plutôt spartiate
• Un driver MySQL encore jeune
@alexiskinsella#DevoxxGTFS
Le résultat ?
Temps de traitement:
9m10s en local
20m15s sur serveur
Index & structures de donn...
Exploitation de données GTFS
@alexiskinsella#DevoxxGTFS
Exploiter les données
Pour en faire quoi ?
@alexiskinsella#DevoxxGTFS
Objectif
Trouver les stations les plus proches d’un point géographique
et afficher les prochain...
@alexiskinsella#DevoxxGTFS
Problème
Chercher toutes les informations en base est très coûteux.
@alexiskinsella#DevoxxGTFS
Problème
Entre 3 secondes et 6 secondes pour une zone dense dans
Paris avec un rayon de 1000 mè...
@alexiskinsella#DevoxxGTFS
Optimisations
Optimiser l’accès aux données ?
Oui, mais comment ?
@alexiskinsella#DevoxxGTFS
Optimisations MySQL
Avec InnoDB, 2 paramètres influent essentiellement les
performances:
• inno...
@alexiskinsella#DevoxxGTFS
Optimisations MySQL
•Travailler la performance des requêtes
•Utiliser des structures de données...
@alexiskinsella#DevoxxGTFS
MySQL - Types des données
Réécrire les fichiers de données GTFS pour changer les clés
« varchar...
@alexiskinsella#DevoxxGTFS
Une solution complémentaire ?
Utiliser un cache ?
@alexiskinsella#DevoxxGTFS
Pour quelles données ?
@alexiskinsella#DevoxxGTFS
La solution ?
Mise en place de Redis en tant que cache mémoire
@alexiskinsella#DevoxxGTFS
Problème
Le serveur utilisé dispose de resources mémoire limitées
@alexiskinsella#DevoxxGTFS
Solution
LevelDB & dérivés
@alexiskinsella#DevoxxGTFS
Solution
SSDB est une base de données en mode client / serveur
compatible avec le protocole Red...
@alexiskinsella#DevoxxGTFS
SSDB - Performance
@alexiskinsella#DevoxxGTFS
Le code
Et le code source alors ?
@alexiskinsella#DevoxxGTFS
Node.js & Express
L’API a été codée initialement avec Node.js & Express
Particulièrement intére...
@alexiskinsella#DevoxxGTFS
Node.js - Inconvénients
Néanmoins, Node.js n’aime pas les traitements coûteux en mémoire et CPU...
@alexiskinsella#DevoxxGTFS
Node.js
Après diverses optimisations, les temps de traitement varient
toujours fortement.
Entre...
@alexiskinsella#DevoxxGTFS
Node.js
Les solutions …
@alexiskinsella#DevoxxGTFS
Node.js
Recoder l’API avec Golang !
@alexiskinsella#DevoxxGTFS
Résultat
Temps de traitement réduits et plus réguliers
entre 550 ms et 770 ms
@alexiskinsella#DevoxxGTFS
Golang - Avantages
Driver MySQL performant
Langage très performant pour la manipulation de donn...
@alexiskinsella#DevoxxGTFS
Golang - Inconvénients
Dans un style très impératif,
il est peu adapté à la manipulation de don...
@YourTwitterHandle@YourTwitterHandle@alexiskinsella#DevoxxGTFS
Q & A
Pour aller plus loin
@alexiskinsella#DevoxxGTFS
Performances & Structures des données
Améliorer les structures de données exploitées.
Par exemp...
@alexiskinsella#DevoxxGTFS
Performances & Structures des données
Supprimer les données inutiles ou en doublon
@alexiskinsella#DevoxxGTFS
Base de données
Explorer les capacités de PostgreSQL vs MySQL
Performance, PostGIS, …
@alexiskinsella#DevoxxGTFS
Fouiller le web
Le web regorge de resources sur le sujet …
GitHub en particulier !
@alexiskinsella#DevoxxGTFS
Quelques sources de données …
•Data.gouv.fr: https://www.data.gouv.fr/fr/search/?q=gtfs
•GTFS D...
@alexiskinsella#DevoxxGTFS
Xebia France
http://blog.xebia.fr/
@alexiskinsella#DevoxxGTFS
Resources
• Open data stickers:
http://upload.wikimedia.org/wikipedia/commons/c/cc/Open_Da
ta_s...
Devoxx france 2015 - Intégrer et exploiter le format de données ouvert GTFS. Fails et succès, ce qui marche et ce qui ne m...
Devoxx france 2015 - Intégrer et exploiter le format de données ouvert GTFS. Fails et succès, ce qui marche et ce qui ne m...
Devoxx france 2015 - Intégrer et exploiter le format de données ouvert GTFS. Fails et succès, ce qui marche et ce qui ne m...
Prochain SlideShare
Chargement dans…5
×

Devoxx france 2015 - Intégrer et exploiter le format de données ouvert GTFS. Fails et succès, ce qui marche et ce qui ne marche pas !

626 vues

Publié le

Initié par un Googler en 2005, le format de données GTFS est supporté par une majorité des régies de transports en commun au travers le monde. Activement supporté par Google, il est à la base de nombreux outils utilisés au quotidien par les voyageurs du monde entier. Malgré tout ce format de données n'est pas exempt de défauts, et pose de nombreuses problématiques. Venez découvrir les spécificités de ce format de données, mais également les challenges à relever pour l'intégrer et l'exploiter. Les fails à éviter, ainsi qu'un retour d'expérience basé sur plusieurs tentatives d'architectures.

  • Soyez le premier à commenter

Devoxx france 2015 - Intégrer et exploiter le format de données ouvert GTFS. Fails et succès, ce qui marche et ce qui ne marche pas !

  1. 1. @alexiskinsella#DevoxxGTFS INTÉGRER ET EXPLOITER LE FORMAT DE DONNÉES OUVERT GTFS. FAILS ET SUCCÈS, CE QUI MARCHE ET CE QUI NE MARCHE PAS ! @alexiskinsella Xebia, http://blog.xebia.fr Alexis Kinsella
  2. 2. @alexiskinsella#DevoxxGTFS Plan 1. Présentation 2. Intégration 3. Exploitation
  3. 3. Présentation du standard GTFS
  4. 4. @alexiskinsella#DevoxxGTFS Signification General Transit Feed Specification
  5. 5. @alexiskinsella#DevoxxGTFS Normalisation Normalisé par en 2005
  6. 6. @alexiskinsella#DevoxxGTFS Définition Format commun pour les informations d’horaires de transports publics et données géographiques associées.
  7. 7. @alexiskinsella#DevoxxGTFS Objectifs Les flux de données GTFS permettent: 1. Aux agences de transport public de publier leur données. 2. Aux développeurs d’écrire des applications qui les consomment.
  8. 8. @alexiskinsella#DevoxxGTFS Horaires théoriques La norme GTFS concerne les données théoriques c’est à dire les horaires planifiés.
  9. 9. @alexiskinsella#DevoxxGTFS Le format GTFS Un jeu de données est composé d’une série de fichiers textes (au format CSV) rassemblés au sein d’un fichier zip.
  10. 10. @alexiskinsella#DevoxxGTFS Horaires temps réel Le format de données est basé sur protobuf … Oui, c’est :) La norme GTFS-realtime complète la norme GTFS. Elle vient amender les données théoriques par des données temps réel. Le format de données est basé sur protobuf … Oui, c’est Google :)
  11. 11. @alexiskinsella#DevoxxGTFS Qui ? Les données GTFS sont fournies par les agences de transport: …
  12. 12. @alexiskinsella#DevoxxGTFS Pourquoi ? Intérêt citoyen Mouvance Open Data Volonté politique (Etalab, …)
  13. 13. @alexiskinsella#DevoxxGTFS Licences Elles sont multiples … • Open Database License (ODbL) v1.0 • SNCF Open Data • … Et certaines réservent des surprises !
  14. 14. @alexiskinsella#DevoxxGTFS Licences Droit d’audit Comme prévu à l’article 15, la Communauté urbaine de Lyon dispose d’un droit d’audit sur le système d’information du Licencié. « Oups ! »
  15. 15. @alexiskinsella#DevoxxGTFS Disparité de l’accès aux données Certains jeux de données sont en accès libre … D’autres sont accessibles après inscription et authentification :/ Pour d’autres, il faut déjà les trouver !
  16. 16. @alexiskinsella#DevoxxGTFS Disparité des jeux de données Problèmes d’interprétation de la norme Maturité des jeux de données assez inégale Données sous forme de zip … Parfois même un zip dans un zip …
  17. 17. Un zip dans un zip ?
  18. 18. Intégration de données GTFS
  19. 19. @alexiskinsella#DevoxxGTFS Facts Entre 550Mo et 750Mo Soit entre 11.866.989 et 15.747.594 lignes
  20. 20. @alexiskinsella#DevoxxGTFS Intégration Mieux vaut être efficace … Mais comment intégrer toutes ces lignes ?
  21. 21. @alexiskinsella#DevoxxGTFS Le temps de l’innocence + =
  22. 22. @alexiskinsella#DevoxxGTFS Le temps de l’innocence Ok, Google, tu me trouves un script d’import ?
  23. 23. @alexiskinsella#DevoxxGTFS Avantages Facile et rapide à mettre en place ! Fonctionne Out of the Box
  24. 24. @alexiskinsella#DevoxxGTFS Inconvénients Mais ce n’est pas très rapide tout ça …
  25. 25. @alexiskinsella#DevoxxGTFS Benchmark simpliste … Date Node.js MongoDB MongoDB Driver Durée Juin 2014 0.10.22 2.6.1 1.3.19 22m41s
  26. 26. @alexiskinsella#DevoxxGTFS Inconvénients Ah Oui, Node.js fonctionne sur 1 core … Dommage ma machine en a 8 ! Ah ! Et mongo n’utilise qu’1 seul core pour écrire !
  27. 27. @alexiskinsella#DevoxxGTFS Benchmark simpliste … Au fait, ça donne quoi sur un serveur ?
  28. 28. @alexiskinsella#DevoxxGTFS Serveur rack 6U ?
  29. 29. @alexiskinsella#DevoxxGTFS Ou plutôt un Raspberry PI ?
  30. 30. @alexiskinsella#DevoxxGTFS Benchmark, la suite … Sur un VPS 3 Cores, 4Go OVH
  31. 31. @alexiskinsella#DevoxxGTFS Benchmark, la suite … Environs 55 minutes
  32. 32. @alexiskinsella#DevoxxGTFS Benchmark, la suite … Malheureusement, ce n’est pas viable :/
  33. 33. @alexiskinsella#DevoxxGTFS Benchmark, la suite … Alors, peut-on faire mieux ?
  34. 34. @alexiskinsella#DevoxxGTFS Benchmark, la suite Clusteriser l’import et répartir le travail d’insertion ?
  35. 35. @alexiskinsella#DevoxxGTFS Benchmark, la suite Pourquoi pas, mais pas forcement trivial :/ On utilise bien tous les cores mais l’amélioration de performance n’est pas vraiment au rendez-vous … ou
  36. 36. Premature optimization is the root of all evil
  37. 37. @alexiskinsella#DevoxxGTFS Résultat Beaucoup de temps perdu … N’y a-t-il pas plus simple ?
  38. 38. @alexiskinsella#DevoxxGTFS Benchmark, la suite Finalement, le vrai point de contention est l’écriture en base de données MongoDB occupe le core d’écriture à 100%
  39. 39. @alexiskinsella#DevoxxGTFS Alternative … Alors quelle solution ?
  40. 40. @alexiskinsella#DevoxxGTFS Alternative … Sharder MongoDB ? Pas une solution si on a qu’un seul serveur à disposition …
  41. 41. @alexiskinsella#DevoxxGTFS Alternative … Réfléchissons à nouveau !
  42. 42. @alexiskinsella#DevoxxGTFS Alternative … Relationnel, comme les bases de données SQL ? GTFS -> Export de données relationnelles …
  43. 43. @alexiskinsella#DevoxxGTFS Une alternative à MongoDB …
  44. 44. @alexiskinsella#DevoxxGTFS Des atouts … • Base de données relationnelle • Insertion multi cores • Support géo-spatial fortement amélioré avec InnoDB en 5.7 • Très bonnes performances
  45. 45. @alexiskinsella#DevoxxGTFS Des défauts … • Version 5.7 en Beta • Support géo-spatial incomplet … • Création coûteuse des index
  46. 46. @alexiskinsella#DevoxxGTFS Contourner les défauts • Créer les index en fin de traitement • Un schéma par dataset GTFS • Utiliser la fonctionnalité: LOAD DATA INFILE !
  47. 47. @alexiskinsella#DevoxxGTFS Une alternative à Node.js … Remplacer Node.js par Golang
  48. 48. @alexiskinsella#DevoxxGTFS Des avantages … • Ultra performant • Gestion de la concurrence efficace
  49. 49. @alexiskinsella#DevoxxGTFS Des inconvénients … • Un IDE plutôt spartiate • Un driver MySQL encore jeune
  50. 50. @alexiskinsella#DevoxxGTFS Le résultat ? Temps de traitement: 9m10s en local 20m15s sur serveur Index & structures de données complémentaires compris …
  51. 51. Exploitation de données GTFS
  52. 52. @alexiskinsella#DevoxxGTFS Exploiter les données Pour en faire quoi ?
  53. 53. @alexiskinsella#DevoxxGTFS Objectif Trouver les stations les plus proches d’un point géographique et afficher les prochains horaires de passage
  54. 54. @alexiskinsella#DevoxxGTFS Problème Chercher toutes les informations en base est très coûteux.
  55. 55. @alexiskinsella#DevoxxGTFS Problème Entre 3 secondes et 6 secondes pour une zone dense dans Paris avec un rayon de 1000 mètres
  56. 56. @alexiskinsella#DevoxxGTFS Optimisations Optimiser l’accès aux données ? Oui, mais comment ?
  57. 57. @alexiskinsella#DevoxxGTFS Optimisations MySQL Avec InnoDB, 2 paramètres influent essentiellement les performances: • innodb_buffer_pool_size = 6442450944 • max_connections = 512
  58. 58. @alexiskinsella#DevoxxGTFS Optimisations MySQL •Travailler la performance des requêtes •Utiliser des structures de données spécialisées •Dénormaliser •Mais surtout …
  59. 59. @alexiskinsella#DevoxxGTFS MySQL - Types des données Réécrire les fichiers de données GTFS pour changer les clés « varchar » ou « char » en clés de type « int »
  60. 60. @alexiskinsella#DevoxxGTFS Une solution complémentaire ? Utiliser un cache ?
  61. 61. @alexiskinsella#DevoxxGTFS Pour quelles données ?
  62. 62. @alexiskinsella#DevoxxGTFS La solution ? Mise en place de Redis en tant que cache mémoire
  63. 63. @alexiskinsella#DevoxxGTFS Problème Le serveur utilisé dispose de resources mémoire limitées
  64. 64. @alexiskinsella#DevoxxGTFS Solution LevelDB & dérivés
  65. 65. @alexiskinsella#DevoxxGTFS Solution SSDB est une base de données en mode client / serveur compatible avec le protocole Redis ! Replicable & load balançable Avec un jeux d’instructions compatibles !
  66. 66. @alexiskinsella#DevoxxGTFS SSDB - Performance
  67. 67. @alexiskinsella#DevoxxGTFS Le code Et le code source alors ?
  68. 68. @alexiskinsella#DevoxxGTFS Node.js & Express L’API a été codée initialement avec Node.js & Express Particulièrement intéressant pour la construction d’API avec Express …
  69. 69. @alexiskinsella#DevoxxGTFS Node.js - Inconvénients Néanmoins, Node.js n’aime pas les traitements coûteux en mémoire et CPU … Par ailleurs, les différents drivers MySQL apparaissent peu performants
  70. 70. @alexiskinsella#DevoxxGTFS Node.js Après diverses optimisations, les temps de traitement varient toujours fortement. Entre 780 ms et 1450 ms, ils restent long et coûteux
  71. 71. @alexiskinsella#DevoxxGTFS Node.js Les solutions …
  72. 72. @alexiskinsella#DevoxxGTFS Node.js Recoder l’API avec Golang !
  73. 73. @alexiskinsella#DevoxxGTFS Résultat Temps de traitement réduits et plus réguliers entre 550 ms et 770 ms
  74. 74. @alexiskinsella#DevoxxGTFS Golang - Avantages Driver MySQL performant Langage très performant pour la manipulation de données
  75. 75. @alexiskinsella#DevoxxGTFS Golang - Inconvénients Dans un style très impératif, il est peu adapté à la manipulation de données
  76. 76. @YourTwitterHandle@YourTwitterHandle@alexiskinsella#DevoxxGTFS Q & A
  77. 77. Pour aller plus loin
  78. 78. @alexiskinsella#DevoxxGTFS Performances & Structures des données Améliorer les structures de données exploitées. Par exemple: Utiliser une taille fixe des structures de données en base, pour cela il faut calculer la taille nécessaire à la création des tables
  79. 79. @alexiskinsella#DevoxxGTFS Performances & Structures des données Supprimer les données inutiles ou en doublon
  80. 80. @alexiskinsella#DevoxxGTFS Base de données Explorer les capacités de PostgreSQL vs MySQL Performance, PostGIS, …
  81. 81. @alexiskinsella#DevoxxGTFS Fouiller le web Le web regorge de resources sur le sujet … GitHub en particulier !
  82. 82. @alexiskinsella#DevoxxGTFS Quelques sources de données … •Data.gouv.fr: https://www.data.gouv.fr/fr/search/?q=gtfs •GTFS Data Exchange : http://www.gtfs-data-exchange.com/agencies •Navitia.io : http://navitia.io/datasets •The Transit App: http://thetransitapp.com/wishlist
  83. 83. @alexiskinsella#DevoxxGTFS Xebia France http://blog.xebia.fr/
  84. 84. @alexiskinsella#DevoxxGTFS Resources • Open data stickers: http://upload.wikimedia.org/wikipedia/commons/c/cc/Open_Da ta_stickers.jpg • Images de la série South Park, des films Inception & Austin Powers • http://en.wikipedia.org/wiki/Rage_comic • http://www.iconarchive.com/show/flat-file-type-icons-by- pelfusion/zip-icon.html • Benchmark du site ssdb.io • Quelques sources inconnues, désolé …

×