Avr 19 2007

Mysql ou Postgresql pour Freeradius?

Publié par à 12:00 sous Freeradius,Mysql,Postgresql




Cet article ne cherche en aucun cas à faire un comparatif complet de Mysql et Postgresql. Le sujet a déjà été traité maintes fois et chacun a son opinion à cet égard. Des directions seront données et seuls quelques critères seront retenus pour faire un choix lors d’une utilisation avec Freeradius.

 

Critères

Si l’on se base sur la majorité des comparatifs existants, de nombreux critères pourraient être retenus. La base contenant les enregistrements Freeradius est très simple, ne contient ni transactions, ni triggers, ni vues. Que doit offrir la base de données Freeradius? La réponse à cette problématique est également très simple: disponibilité et rapidité seront les facteurs clé pour prendre une décision.
Mysql et Postgresql offrent tous deux des solutions – semblables – pour répondre aux besoins des applications nécessitant la haute disponibilité. La réplication semble être un choix judicieux puisqu’il est possible de spécifier des serveurs différents pour l’accounting et l’authentification (écritures et lectures en d’autres termes). On peut diriger les accès en écriture sur le master et en lecture sur les esclaves.
Comme les deux SGBD ne posent pas de problème au niveau de la haute disponibilité, notre choix se portera sur le temps d’exécution des requêtes. Mysql est réputé pour sa rapidité (notamment en lecture) mais d’autres diront que la robustesse de Postgresql dans un environnement concurrentiel prendrait le dessus.

 

Tests

Nous allons tenter de déterminer le nombre de transactions que chaque SGBD est capable de réaliser en un temps défini. Les résultats seront comparés à un setup basique qui obtient les noms d’utilisateurs à partir d’un fichier texte. Les conditions seront strictement identiques à savoir:

  • Ils seront exécutés sur une même machine: un Pentium II avec 384M de RAM

  • Mysql et Postgresql ont été compilés avec des compilateurs et options similaires (notamment le flag -O3)

  • La structure des tables contient des indexes identiques
    Le code SQL (pris depuis la documentation Freeradius) peut être trouvé ici pour Mysql et Postgresql.

  • Des pools de 50 connexions sont créés

Nous mesurons le temps d’exécution pour authentifier 50000 utilisateurs grâce à l’outil radclient en accès concurrents.
time /usr/local/bin/radclient -p 1000 -q -s -f radius.test 127.0.0.1 auth test

Les résultats sont plutôt édifiants:

Base de données Fichier texte Postgresql Mysql
Temps 5’13.552 » 1’46.598 » 0’35.146 »
transactions/s 159 469 1422

 
 
Voici une visualisation graphique du nombre de transactions traitées par seconde.

Performance

La lecture depuis Postgresql tout comme Mysql, est beaucoup plus rapide que celle d’un fichier texte. Ceci s’explique en partie par la présence d’indexes à l’intérieur des tables. Cette différence serait moindre et pourrait même s’inverser pour une base contenant un nombre beaucoup plus restreint d’utilisateurs.
Mysql réalise d’excellents résultats en traitant trois fois plus de transactions que Postgresql.

 

Conclusion

Ces tests de performance sont à relativiser puisqu’ils ne prennent pas en compte les utilisateurs qui se logguent avec un mot de passe incorrect. Certains aspects ne sont pas pris en compte. Citons le temps donné aux processus d’accounting, de pre et post-authentification. Les résultats seraient assez proches de ceux-ci néanmoins dans un environnement Master-Slave où les lectures s’effectueraient sur un serveur autre que les écritures.


One response so far

Une Réponse à “Mysql ou Postgresql pour Freeradius?”

  1. scheuon 30 Jan 2009 at 12:14

    Ce test ne veut rien dire, MySQL n’écrivant pas les transactions dans des fichiers de log (contrairement à Postgresql qui écrit dans les WAL), forcément que MySQL est plus rapide
    La haute-disponibilité, puisque c’est le sujet de ton article, c’est aussi la possibilité de pouvoir restaurer une base cohérente à un instant passé en rejouant toutes les transactions qui ont été passées, je serai curieux de voir comment tu fais ça avec MySQL …
    C’est comme si tu comparais la vitesse de course de deux personnes dont l’une s’arrêterait une fois de temps en temps pour baliser son chemin parcouru afin de pouvoir y revenir au cas où …
    Dire que MySQL est dans ton test plus rapide que Postgresql en écriture : oui
    Dire que MySQL répond mieux aux besoins de haute-disponibilité que Postgresql : certainement pas (ou alors nous n’avons pas la même définition de la haute-disponibilité)

    Pour avoir une comparaison plus précise : http://www.developpez.net/forums/d1462/bases-donnees/decisions-sgbd/choisir-mysql-postgresql/

Comments RSS

Leave a Reply