Algorithmes et bases de données, année 2019

TD3: Transactions

L’objectif de ce TD:

  1. Se familiariser avec la notion de transactions
  2. Jouer avec les accès concurrents aux données

Préliminaires

Construction une base de données factice

Créez une nouvelle base de donnée modélisant des données en production d’un magasin de vêtements en lignes. Proposez un schema permettant:

  1. À un client d’acheter un produit et de se le faire livrer à une de ses adresses de livraison
  2. À un administrateurs d’ajouter des produits.

Un produit à plusieurs caractéristique: nom, prix et disponibilités. Un client doit avoir un nom et peut avoir plusieurs addresse de livraisons.

Créez une table livraison qui contient la liste de tous les achats passés par les clients.

ajouter des produits

En utilisant un langage de programmation de votre choix, et en configurant votre cluster PostgreSQL pour un accès distant à une nouvelle base de données, créer un petit programme qui:

  1. Se connecte à la base
  2. Remplis la base de données de quelques milliers de produits synthétiques

Programmation d’un comportement client

Nous allons simuler le comportement d’un client. Celui-ci doit réaliser les taches suivantes:

  1. Se connecter à la base, se choisir un nom et des adresses fictives et récupérer son identifiant client. Fermer la connections à la base.
  2. Se connecter à la base et ouvrir une transaction
  3. Afficher la liste des produits disponibles.
  4. Choisir un ensemble de produit à acheter aléatoirement et décrémenter leur disponibilité dans la table.
  5. Attendre un temps choisit aléatoirement entre 0 et 500ms
  6. Exécuter la requête qui permet d’acheter les produits.
  7. Terminer la transaction, fermer la connection
  8. Attendre un temps choist aléatoirement entre 0 et 1 secondes et reprendre 1.

En utilisant un langage de programmation de votre choix, programmer le comportement d’un client.

Facultatif: Vous pouvez réduire le temps de plannifcation des requêtes à l’aide de PREPARED STATEMENT

Exécuter pleins de client

Lancez 20 versions en parallèle de votre client et vérifier que la table des achats et des livraisons se comportent bien. Recommencer en augmentant le nombre de versions progressivement jusqu’à arriver à la limite des possibilité de la machine cliente ou serveur.

Avec les paramètres par défauts, il est tout à fait possible qu’un client est acheté des produits non disponible. Modifier le code pour augmenter l’isolation des processus en Serializable afin d’empêcher ce phénomène.

Utilisation de pg_stat_statements

Documentez vous sur l’extension pg_statistics et recommencer l’expérience avec et sans la sérialisation. .