Examen BDA 2025

Rendu du TP1

Préparer ce que vous avez fait dans le TP1 pour être rendu.

Je veux avoir un unique archive (format zip ou tar.gz) avec :

Vous pouvez prendre un peu de temps pour remettre en forme votre TP, mais attention, c’est du temps que vous ne mettrez pas sur le reste de l’examen.

La note prendra en compte la qualité des rendus dans Exam ET la qualité de TP.

Le rendu est à faire par mail

Une répartition des deux tables

Nous allons repartir sur le TD1 et mettant en place un mécanisme avec plusieurs bases de données en écritures qui se partage la table des messages.

Si vous n’avez pas executé le script préparatoire à cet examen, commencer par le faire, en téléchargeant ce script sur une VM fraiche crée pour l’occasion.

Ce dernier va :

  1. Préparer la VM en donnant aux correcteurs des accès
  2. Installer plusieurs packages
  3. Faire cohabiter trois instances de PostgreSQL sur la même machine.

Les bases de données vont cohabiter : l’une sur le port 5432, puis 5433 et 5434.

CREATE TABLE channel(
    name TEXT PRIMARY KEY, 
    description TEXT, 
    created_date TIMESTAMP default now()
);

CREATE TABLE messages(
    uuid TEXT PRIMARY KEY, 
    channel_name TEXT REFERENCES channel(name),
    pseudo TEXT, 
    message TEXT, 
    inserted TIMESTAMP default now()
);

L’objectif de ce TD–examen est de répartir chacune des deux tables entre trois instances PostgreSQL. Le nombre d’instances étant fixe, nous n’avons pas besoin d’implémenter d’algorithme d’élasticité et nous pouvons utiliser une approche naïve.

Partie 1. Distribution des lignes de chaque table

Chacune des tables doit être distribuée sur les trois serveurs de manière non élastique. Nous n’ajouterons pas de bases de données supplémentaires par la suite.

Détaillez une stratégie de distribution des lignes pour chacune des deux tables dans les trois instances dans votre fichier Readme en faisant en sorte que chaque ligne soit présente sur exactement deux instances de PostgreSQL (taux de réplication de deux).

Est-ce que votre stratégie va répartir uniformément les lignes dans chacune des bases de données ?

Question 2. Taux de réplication

Quelles sont les avantages et les inconvénient d’un taux de réplication de \(2\) par rapport aux autres valeurs possibles ?

Question 3. Implémenter votre stratégie

Adapter l’API que vous avez réalisé dans le cadre du TD1 afin de réaliser la stratégie que vous avez suggéré dans la question 1.

Faites attention à ce que les données en sortie de votre API soient bien dédupliquée et ordonnée chronologiquement pour la fonction qui récupère les derniers messages.

Question 4. Système disponible ? Système Cohérent?

Dans l’état actuel de votre implémentation, et sans la modifier particulièrement, indiquez en justifiant, si votre système est cohérent, disponible, les deux ou aucun des deux?

Question 5. Évaluez l’efficacité de votre stratégie

Détaillez dans le fichier Readme une proposition de méthodologie pour estimer l’efficacité de votre stratégie d’implémentation.

Mettez en place cette stratégie ou une version moins idéales de celle-ci et donnez le résultat de votre mesure dans le Readme.

Question 6. Convergence à terme

Une stratégie de cohérence à terme permet à un système qui est toujours disponible de se rendre cohérent quand les nœuds se reconnectent en réconciliant leur état. Proposez sans la réaliser une stratégie de cohérence à terme que vous détaillerez dans le fichier Readme.

Essayez d’implémenter ce mécanisme dans votre API.


Compiled the: lun. 20 oct. 2025 09:55:53 CEST