Skip to content
Snippets Groups Projects
Select Git revision
  • master
1 result

s102public

TD1

Nathan Houzet M2GL G2

Utilisation d’OpenStack

Le lien du GIT ici.

Pour s'y connnecter via ssh et vpn:

ssh ubuntu@172.28.100.65

Utilisateur disponible sur la VM : Lambda : remote (mdp remote)
Charles : chat (mpd 1234)

Pour se connecter à la base micoblog à distance via terminal:

Utilisateur remote :psql -h 172.28.100.65 -U remote --dbname microblog // (pass remote)

Utilisateur cha :psql -h 172.28.100.65 -U cha --dbname microblog // (pass ILovePostgreSQL)

Une application de micro-blogging

Réponses aux questions :

7. Lisez le fichier microblog.sql et expliquez brièvement les différentes fonctionnalité de cette base de données.

List of relations :

Schema Name Type Owner
public followers table remote
public messages_store table remote
public user_store table remote
followers
user_source
user_target
users_store
user_id
name
password
messages_store
message_id
content
published_date
replies_to
user_id

Nous avons 3 tables,

Une table stockant les users ( id, nom, password) Une table stokant les messages (id, content, date de publication, réponse à , et posteur ) Une table suivant les following ( source et target)

Le concept de microblog est donc repris car nous avons une relation entre des utilisateurs, un système de chat et des followings.

8. Est-ce qu’il est possible pour l’utilisateur common_user:

de récupérer la totalité des messages publiés ?
  • le common_user n'as pas accès à la table messages_store et ne peux donc pas voir la totalité des message via un ``` select * from messages-store```.
  • il peux cependant avoir accès à la view messages qui correspond au 30 derniers messages ajoutés.
de récupérer la liste des utilisateurs inscrits ?
  • le common_user n'as pas accès à la table users_store et ne peux donc pas voir la liste des utilisateurs inscrits.
de récupérer le mot de passe d’un utilisateur inscrit ?
  • le common_user n'as pas accès à la table users_store et ne peux donc pas voir la liste des mots de passe des utilisateurs.

Est-il possible pour l’utilisateur possédant la base de données

de récupérer la totalité des messages publiés
  • oui
de récupérer la liste des utilisateurs inscrits
  • oui via un select sur la table user_store
de récupérer le mot de passe d’un utilisateur inscrit
  • non car les mots de passes sont hachés avant l'ajout dans la table

10. A quoi sert la ligne ?

CLUSTER messages_store USING idx_pub_date;

Cette ligne sert à indexer la table messages_store gràce à l'index idx_pub_date ( date de publication des messages).

Génération de post sur le microblog :

Avec l'archive jar : 2 commandes sont possible pour aider à simuler les posts :

La commande bdda-tp1$ java -jar out/artifacts/postgresqlJava_jar/postgresqlJava. jar generate 10 va générer 10 utilisateurs dans la DB et stocker leur nom et mdp dans un fichier .txt (le mot de passse etant leur nom) :

  bdda-tp1$ java -jar out/artifacts/postgresqlJava_jar/postgresqlJava.
  jar generate 10
  Connection succesfull
  df340298-2156-11ec-8d62-0d507adc61fc
  df340299-2156-11ec-8d62-0d507adc61fc
  df34029a-2156-11ec-8d62-0d507adc61fc
  df34029b-2156-11ec-8d62-0d507adc61fc
  df34029c-2156-11ec-8d62-0d507adc61fc
  df34029d-2156-11ec-8d62-0d507adc61fc
  df34029e-2156-11ec-8d62-0d507adc61fc
  df34029f-2156-11ec-8d62-0d507adc61fc
  df3402a0-2156-11ec-8d62-0d507adc61fc
  df3402a1-2156-11ec-8d62-0d507adc61fc
  Names are stored in the file :.../Documents/M2S1/bdd/bdda-tp1/name.txt

La commande bdda-tp1$ java -jar out/artifacts/postgresqlJava_jar/postgresqlJava.jar simule 0 5 va simuler des post toutes les secondes pendant 5 secondes de l'utilisateur 0. ( le premier utilisateur de la liste des utilisateurs crées.)

Essais réalisés via le script adapté au nombre n d'utilisateur postant toutes les secondes:

SUR Simulation faite sur un poste du M5 :

  • TPS MAX de 87 pour 50 utilisateurs en //.
  • TPS MAX de 160 pour 100 utilisateurs en //.
  • TPS MAX de 137 pour 150 utlisateurs en //.
  • TPS MAX de 138 pour 200 utilisateurs en //. A noter + de 150 requete en attentes
  • TPS MAX de 120 pour 300 utilisateurs en // . En attentes au alentours de 100 reuqtes + Erreur ci dessous après quelques secondes de lancement.
  • 500 users -> message d'erreurs `PSQLException: FATAL: sorry, too many clients already` + message d'erreur pg-activity : `pg_activity: FATAL: the database system is in recovery mode the database system is in recovery mode`

On peut voir que plus les utilisateurs envoient des post sur le microblog, plus le nombre de requetes traités par seconde par la base de données est élévé. J'ai atteint un max de 138 requetes par secondes pour 200 utilisateurs blogant en meme temps toutes les secondes. A noter que au même moment, plus de 150 requêtes étaient en attente à chaque seconde par la database. Au dela de 300 utilisateurs la database se met à craquer, en refusant les requetes ( cf PSQLEcxeption de ci-dessus).
Egalement le surveillant d'activité de la base recoit une erreur indiquant que la base de données n'est plus accessible.

Je pense que cela doit etre due à un manque de mémoire de la VM Hébergeant la base de donnée.

En effet la VM configurée lors de cette simulation comportait 512 MO de mémoire vive.

La performance de la VM, qui de mon point de vu, est déjà très honorable pour une machine hébergeant un os (assez léger) et une base de données se fesant réquéter par 300 utlisateurs chaque secondes.

Je n'ai pas pu étendre mon benchmarking à une autre VM avec une plus grande capacité de mémoire car cela demande de reconfigurer une autre VM et une autre base de donnée aussi. Cependant, on peut facilement se douter qu'avec une plus grande capcité de mémoire disponible, la base de donnée pourra soutenir plus de requetes à un rythme plus soutenu.

Vous trouverez le Main permettant de créer les users et les envois de message ici.

L'api utilisé pour se connecter à la db ici

Le lien du GIT ici.