Le 05/02/12 à 22h08 : Sélecteur de la mort qui tue avec #jQuery $(this).parent().siblings().children().removeClass('actif');
Le 03/02/12 à 21h05 : Je veux pas troller, mais je suis tombé sur un site Full flash, et les plombs ont sauté !

Forum sans LIMIT : 90% d'algo, 10% de SQL

2

Le 24/01/09 à 13h35 dans Développement

Pour le premier billet sur un sujet technique, j'ai décidé de parler d'algorithme au travers d'un exemple de script utilisant MySQL : un forum sans LIMIT. Pour comprendre cet article il est important d'avoir quelques notions de SQL.

La plupart des forums actuels utilisant le couple PHP/MySQL repose sur le même principe, une liste de forums, puis une liste de sujets et enfin les messages à proprement parlés. La majorité des forums utilisent une requête avec la clause LIMIT afin de tronquer les résultats de la requête pour ne prendre que les sujets de la page 1 par exemple. Cela reste assez facile à coder et à entretenir mais si le forum commence à grossir, les requêtes de sélection de sujets et des messages vont devenir de plus en plus lentes à cause de ce fameux LIMIT étant donné que ce dernier tronque les résultats obtenus par les différentes conditions de WHERE. Donc si dans un de vos forums il y a 10 000 sujets de discussions, vous allez à chaque requête récupérer les infos pour ces 10 000 sujets puis n'en garder qu'un tout petit morceau (par exemple les infos des 30 sujets de la page 1). Et pour couronner le tout ce fameux LIMIT va réorganiser les lignes sélectionnés avant de n'en garder qu'une toute petite partie.

Vous l'avez bien compris, utilisez un LIMIT dans une requête peut provoquer à la longue de forts ralentissements. mais je vous rassure tout de suite, il faut avoir un nombre conséquent de sujets et de messages avant de commencer à ressentir les effets du LIMIT. Le site du Zéro l'a ressentit et c'est pour cela qu'il utilise maintenant un forum sans LIMIT. Mais il est aussi très intéressant d'essayer de coder un forum sans ce LIMIT, et c'est ce dont je vais vous parler maintenant.

Plus de LIMIT : utilisation de BETWEEN

Si je vous propose de ne plus utiliser le LIMIT, il faut bien que vous aillez autre chose à utiliser à la place, et ce produit miracle c'est la clause BETWEEN qui, utilisée conjointement avec WHERE (on pourrait bien sûr le faire autrement mais avec BETWEEN c'est le plus lisible à mon sens), permettra de ne sélectionner que les informations nécessaires plus rapidement qu'en utilisant LIMIT.

Le secret, c'est d'attribuer à chaque topic un numéro qui correspond à sa place dans la liste des forums, et après la requête devient magique puisqu'il suffit simplement de de demander les topics dont le numéro est compris entre 1 et 30 pour la page 1, 31 et 60 pour la page 2, etc. Mais vous allez alors me demander pourquoi c'est si dur de coder un forum avec cet algo, eh bien tout simplement car à chaque fois qu'une réponse est posté, qu'un sujet est créé, qu'un sujet est supprimé, etc il faut réorganiser les numéros de topic, et c'est là qu'est toute la complexité d'un tel forum, chaque action sur un topic nécessite de bien s'y prendre pour pas que la liste des topics soit sans dessus-dessous, le fameux bug des post-it qui se baladent en est l'exemple le plus flagrant.

Bien que mon forum n'en ait nullement besoin, je l'ai tout de même mis en application tout d'abord pour le plaisir de coder, puis dans l'éventualité de redistribuer ce forum car à ce jour le seul forum utilisant ce principe des numéros de topic est le forum MesDiscussions.net mais son prix est horriblement cher.

Pour conclure : ce type de forum est assez dur à coder mais une fois lancé ce n'est que du bonheur, pour peu qu'on utilise les requêtes préparées, les transactions et les procédures stockées alors là les performances et la fiabilité s'envolent.



Commentaires

mouislouis
1. Par mouislouis
Le 10/08/09 à 05h58

merci pour ce topic, mais faut que les mentalités change!

~Electro
2. Par ~Electro
Le 28/01/09 à 18h34

Bonjour,

Cela fait plusieurs fois que l'on me parle de ce fameux forum sans LIMIT et je suis très intrigué par la façon dont en code ce forum, dans les moindres détails.

Même si aucun de mes sites n'a pour le moment une BDD trop importante pour envisager cette prouesse technique, j'envisage de faire un tel module, pour le plaisir de coder (un peu comme toi en fait).

En tous cas bravo, et bonne chance pour la suite,
~Electro.

Ajouter un commentaire