Master 2, Bases de données avancées, année 2022
Objectif
- Interroger une API orienté document
- Se familiariser avec CouchDB
- Créer une mini API qui imite celle de ce site
Une api simple géographique
Aller sur ce site et essayer de comprendre le fonctionnement de l’API.
Trouver grâce à l’API la ville la moins peuplé de la région Auvergne-Rhones-Alpes.
Trouver grâce à l’API, la ville la plus peuplé dont le nom débute par “Mon”
À l’aide du programme
jq
et de l’API, sauvegarder dans un documentnord.json
les informations pour toutes les villes du Nord et leur code postal.
Installer CouchDB
Créez une nouvelle VM appelée
couchdb
. On notera dans la suite son ip$couchdb
Installer
couchdb
dessus.Ajouter un administrateur supplémentaire
cha
avec comme mot de passeadmin
.
Le fichier de conf est situé dans /opt/couchdb/etc
…
- Vérifiez que l’installation s’est bien passé à l’aide de la commande
curl $couchdb:5984 | jq
Dans ce TP, jq
sera très utile pour manipuler les très
nombreux document JSON. Pour ceux qui le souhaitent, il est possible
d’utiliser une interface graphique en visitant l’URL
http://$couchdb:5984/_utils/
Je ne recommande pas particulièrement l’utilisation de cette interface, mais ça peut dépanner.
Manipulation simple
Pour interagir avec couchdb
, il faut avoir en tête le
protocole REST et utiliser essentiellement curl
de manière
approprié.
- Pour créer une base de données:
curl -u cha:admin -X PUT $couchdb:5984/ma_base
ou par exemple
curl -u cha:admin -X PUT $couchdb:5984/demo
Pour supprimer une base de données:
curl -u cha:admin -X DELETE $couchdb:5984/ma_base
- Pour ajouter des entrées, il faut envoyer avec curl des documents JSON valide. Certains champ sont réservé pour la base de donnée.
curl -u cha:admin -X PUT --data '{"pain":["au", "chocolat"]}' $couchdb:5984/demo/chouquette
Vous devriez avoir en réponse un document du genre:
{
"ok": true,
"id": "chouquette",
"rev": "3-58a35fe43992272808a5feccc5e9bab1"
}
La clef rev
est nécessaire pour modifier, mettre à jour
et supprimer le document.
Par exemple, pour le supprimer:
curl -u cha:admin -X DELETE "$couchdb:5984/demo/chouquette?rev=3-58a35fe43992272808a5feccc5e9bab1"
Interaction programmatique
Dans le langage de votre choix (par défaut, Python):
- Écrire une classe permettant d’interagir en HTTP avec votre base de donnée.
La classe doit:
- Créer une base de donnée et la supprimer
- Pouvoir ajouter des documents à une base de donnée
- Pouvoir mettre à jour les documents
- Pouvoir les supprimer.
- difficile En lisant la documentation de
CouchDB
, ajouter des primitives pour insérer de nombreux documents en une fois efficacement.
Les batch insert
consomment de la mémoire. Pour éviter
les erreurs silencieuses, découper les insertions par paquet de 1000
documents maximums.
En utilisant votre API, insérez les données de
nord.json
avec une ville par documents.(difficile) Insérez toutes les données de l’API en utilisant les méthodes d’insertions multiples.
:::{.remarque} Pour récupérer tout le dataset il suffit de faire:
curl "https://geo.api.gouv.fr/communes" > france.json
Recherche
En lisant la documentation,
Ajouter dans votre classe des méthodes pour faire des requêtes sur les documents. Votre API doit permettre d’écrire facilement toutes les requêtes faites dans la première partie.
(difficile) Adapter votre code pour exposer des itérateurs qui respectent les mécanismes de pagination de
CouchDB
. En particulier, ils doivent éviter de télécharger la totalité des données en mémoire. Justifier l’intérêt de la pagination.Évaluer les performances de vos requêtes.
Indexes
Il est possible de créer des indexes sur certains champs des documents.
Pour ce faire, vous pouvez consulter la documentation et ajouter les indexes qui vous semblent nécessaire.
Évaluer la performance de vos requêtes avec les indexes.
Un middleware
Dans une nouvelle VM, Écrire un middleware qui expose une
API
similaire à celle de geo.api.gouv.fr
.
Pour aller plus loin
Stockez dans la base de donnée PostgreSQL une table clef/valeur dont
les valeurs sont de type JSONB
. Ajouter un indexe
GIN.
Écrire une API dans le langage de votre choix permettant la recherche
dans PostgreSQL des mêmes informations que dans votre API pour
CouchDB
.
Comparer les performances de PostgreSQL à celles de CouchDB.
Compiled the: mer. 04 sept. 2024 12:49:54 CEST