Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2613 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  365  366  367  ..  486  487  488  489  490  491
Auteur Sujet :

les développeurs de forums, les 3/4 des forums sont down /o\

n°1365788
0x90
Posté le 14-05-2006 à 01:23:47  profilanswer
 

Reprise du message précédent :
J'ai expliqué comment résoudre le pb :o

mood
Publicité
Posté le 14-05-2006 à 01:23:47  profilanswer
 

n°1365790
xman
branleur
Posté le 14-05-2006 à 01:27:11  profilanswer
 

je suis pas sûr que ça règle le problème de 3 pages manquantes sur 15000 (loin de 10%) mais de toutes façons, même si ça prend quelques secondes, comme on ne supprime pas souvent des messages, autant ne pas se faire chier et faire le traitement et pas compliquer les choses.

n°1365791
0x90
Posté le 14-05-2006 à 01:31:03  profilanswer
 

c'est pas 10% du total, c'est lors de l'affichage d'une page, si il manque plus de 10% (chiffre exemple hein) de posts sur le nombre de post escompté dans la page (genre si y'a que 26 posts au lieu de 30) alors la on lance la requète d'étalement du manque, et la page refait 30 posts, mais y'a 4 pages parmis les 50 suivantes qui n'ont que 29 posts.
 
En fait l'algo peut marcher aussi avec une "tolérance zero" et on voit tout le temps 30 posts ;)

n°1365792
xman
branleur
Posté le 14-05-2006 à 01:45:39  profilanswer
 

mieux vaut passer 5 secondes à renuméroter à un moment où avec un peu de chances, personne ne cherchera à lire sur le forum plutôt que de faire attendre 5 secondes le 1er gus qui veut lire la page fatale.

n°1365793
0x90
Posté le 14-05-2006 à 01:51:36  profilanswer
 

Il attendra pas 5 secondes, en cas de hit sur une page creuse, je ne renumérote pas tout mais quelques pages suivantes seulement ;) (en gros je fais le boulot petit à petit à la demande).

n°1365794
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 14-05-2006 à 02:16:57  profilanswer
 

0x90 => Ton exemple, c'est de la théorie ou tu l'appliques vraiment ?

n°1365814
Cyrius-c
Posté le 14-05-2006 à 09:59:39  profilanswer
 

Je comprends pas votre logique.  
 
Certes, ca va faire une charge supplémentaire au serveur d'updater des messages. Mais il y a tellement peu de personnes qui suppriment leurs messages et qui plus est au début d'un topic de 500000 pages c'est encore moins probable.
 
Mais imaginez tout de meme qu'a chaque lecture on ne calcule pas le nombre de pages. et leurs positions. On économise des ressources serveur énormes!
 
Et puis vous savez, si vraiment c'etait embetant, au lieu de supprimer le message, on peut tout simplement remplacer le message par MESSAGE SUPPRIME. Ca garde la position, mais ca enleve le contenu du post.

n°1365840
Multinickn​ame
Ah bon...
Posté le 14-05-2006 à 11:37:24  profilanswer
 

Cyrius-c a écrit :

Je comprends pas votre logique.

 

Certes, ca va faire une charge supplémentaire au serveur d'updater des messages. Mais il y a tellement peu de personnes qui suppriment leurs messages et qui plus est au début d'un topic de 500000 pages c'est encore moins probable.

 

Mais imaginez tout de meme qu'a chaque lecture on ne calcule pas le nombre de pages. et leurs positions. On économise des ressources serveur énormes!

 

Et puis vous savez, si vraiment c'etait embetant, au lieu de supprimer le message, on peut tout simplement remplacer le message par MESSAGE SUPPRIME. Ca garde la position, mais ca enleve le contenu du post.

 


 

Cette solution revient au même que de masquer un message s'il est supprimé. Si il y a beaucoup de delete (pour les pages "importantes" des topics), ca risque de te faire des pages pleines de "message Supprimé"

 

Et puis bien sur c'est rare les delete au début d'un topic de 500 000 posts mais ca arrive pour le cas que je viens de t'énoncer + haut... Donc voilà quoi  :D

 

EDIT : HS : A partir de quelle version de MySQL on peut faire des requetes imbriquées? :/


Message édité par Multinickname le 14-05-2006 à 11:39:13
n°1365846
FlorentP
Posté le 14-05-2006 à 11:49:34  profilanswer
 
n°1365849
Multinickn​ame
Ah bon...
Posté le 14-05-2006 à 11:52:28  profilanswer
 

 

Ah, tant mieux  :)  je pensais que c'était 5.0 et dans ce cas ça m'aurait géné pour la portabilité de mon forum...

 

Si c'est 4.1 ca devrait aller...


Message édité par Multinickname le 14-05-2006 à 11:56:19

---------------
Feaks Forum
mood
Publicité
Posté le 14-05-2006 à 11:52:28  profilanswer
 

n°1365851
FlorentP
Posté le 14-05-2006 à 11:58:18  profilanswer
 

Starting with MySQL 4.1, all subquery forms and operations that the SQL standard requires are supported, as well as a few features that are MySQL-specific.
http://dev.mysql.com/doc/refman/4.1/en/subqueries.html

n°1365855
0x90
Posté le 14-05-2006 à 12:24:40  profilanswer
 

The-Shadow a écrit :

0x90 => Ton exemple, c'est de la théorie ou tu l'appliques vraiment ?


 
Non c'est de la théorie, j'ai pas de forum à moi j'ai pas encore trouvé le temps de me lancer.
Cela dit je doute que je l'utilise vraiment, c'etait juste une idée qui me passait par la tête
 
 

n°1365895
joce
Architecte / Développeur principal
"BugHunter"
Posté le 14-05-2006 à 15:07:51  profilanswer
 

0x90 a écrit :

Est-ce vraiment si grave que ca ? Qui verra qu'il n'a que 29 posts sur sa page et pas 30 ?

sauf que si tu fais un mass delete, t'auras des pages vides :D

n°1365928
xman
branleur
Posté le 14-05-2006 à 17:17:23  profilanswer
 

Quelle est la façon la plus efficace de connaître le nombre de lignes dans une table ?
Je pense notamment au nombre de topics et au nombre de messages dans un topic car pour découper en plusieurs pages, il faut savoir combien il y en a ce qui m'oblige pour l'instant à faire au moins 2 reqûetes à chaque fois : d'abord savoir combien il y en a puis de récupérer ceux qu'il faut afficher dans la page en cours.
 
Vaut-il mieux faire 1°) comme ça ? (récupérer toutes les lignes puis les compter)

Code :
  1. $req = mysql_query('SELECT id FROM `matable`') or die ('Erreur requête');
  2. $n = mysql_numrows($req);


 
2°) Comme ça ? (les faire compter par MySQL)

Code :
  1. $req = mysql_query('SELECT COUNT(id) FROM `matable`') or die ('Erreur requête');
  2. $n = mysql_result($req,0,0);


 
Ou bien, 3°) dans le cas des messages, rajouter un champ nbmessages dans la table `topics` et le mettre à jour à chaque ajout/suppression de message ? (j'ai dans l'idée que c'est cette dernière solution qu'il faut retenir mais j'aimerais vos avis)
 
Ou bien y a-t-il encore une meilleure solution ?

Message cité 1 fois
Message édité par xman le 14-05-2006 à 19:40:26
n°1365929
anthomicro
Posté le 14-05-2006 à 17:23:02  profilanswer
 

La seconde est beaucoup plus efficace car stockée directement dans la table (de plus elle ne renverra pas inutilement des valeurs)
 
pour le nombre de réponses dans un topic je le stocke dans un champ en ce qui me concerne, ça évite de faire des couts dans les requêtes de sélection.

n°1365930
xman
branleur
Posté le 14-05-2006 à 17:25:08  profilanswer
 

Bref, l'ordre d'efficacité (du meilleur au pire) est 3 2 1 quoi.
C'est ce que je présupposais...

n°1365932
joce
Architecte / Développeur principal
"BugHunter"
Posté le 14-05-2006 à 17:26:43  profilanswer
 

anthomicro a écrit :

La seconde est beaucoup plus efficace car stockée directement dans la table (de plus elle ne renverra pas inutilement des valeurs)
 
pour le nombre de réponses dans un topic je le stocke dans un champ en ce qui me concerne, ça évite de faire des couts dans les requêtes de sélection.


uniquement pour MyISAM, pas pour InnoDb

n°1365934
xman
branleur
Posté le 14-05-2006 à 17:28:28  profilanswer
 

joce a écrit :

uniquement pour MyISAM, pas pour InnoDb


Ca tombe bien, mes tables sont de ce type. :D

n°1365937
masklinn
í dag viðrar vel til loftárása
Posté le 14-05-2006 à 17:34:21  profilanswer
 

joce a écrit :

uniquement pour MyISAM, pas pour InnoDb


[:petrus dei]
 
Tu veux dire que la première propal serait plus efficace pour InnoDB [:petrus dei]
 
J'ai un peu tendance à douter quand même, on pourrait avoir des tests [:petrus dei]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1365940
anthomicro
Posté le 14-05-2006 à 17:39:34  profilanswer
 

Qui utilise InnoDb ici ^^ ?

n°1365961
Max Evans
Posté le 14-05-2006 à 18:29:16  profilanswer
 

xman a écrit :

Quelle est la façon la plus efficace de connaître le nombre de lignes dans une table ?
Je pense notamment au nombre de topics et au nombre de messages dans un topic car pour découper en plusieurs pages, il faut savoir combien il y en a ce qui m'oblige pour l'instant à faire au moins 2 reqûetes à chaque fois : d'abord savoir combien il y en a puis de récupérer ceux qu'il faut afficher dans la page en cours.
 
Vaut-il mieux faire 1°) comme ça ? (récupérer toutes les lignes puis les compter)

Code :
  1. $req = mysql_query('SELECT id FROM `matable`') or die ('Erreur requête');
  2. $n = mysql_numrows($req);


 
2°) Comme ça ? (les faire compter par MySQL)

Code :
  1. $req = mysql_query('SELECT COUNT(id) FROM `matable`') or die ('Erreur requête');
  2. $n = mysql_result($req,0);


 
Ou bien, 3°) dans le cas des messages, rajouter un champ nbmessages dans la table `topics` et le mettre à jour à chaque ajout/suppression de message ? (j'ai dans l'idée que c'est cette dernière solution qu'il faut retenir mais j'aimerais vos avis)
 
Ou bien y a-t-il encore une meilleure solution ?


 
SQL_CALC_FOUND_ROWS
 
Bcp bcp bcp moins gourmand ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1365969
anthomicro
Posté le 14-05-2006 à 18:40:52  profilanswer
 

ça c'est bon quand t'as besoin de calculer le nombre de lignes de la requête, en gros quand tu fais une requête quoi, si tu veux juste connaître le nombre d'enregistrements d'une table (sans autre requête donc) le COUNT sera largement moins gourmand puisque stocké dans la table.

n°1365971
Max Evans
Posté le 14-05-2006 à 18:42:59  profilanswer
 

Bah a priori, c'est pour compter le nombre de messages dans un topic, donc il a déjà sa requête pour récupérer les messages ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1365973
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 14-05-2006 à 18:57:22  profilanswer
 

Max Evans a écrit :

SQL_CALC_FOUND_ROWS
 
Bcp bcp bcp moins gourmand ;)


Houlà, ça m'intéresse ça.
C'est mieux qu'un mysql_num_rows ?

n°1365974
fabien
Vive la super 5 !
Posté le 14-05-2006 à 19:09:55  profilanswer
 

anthomicro a écrit :

Qui utilise InnoDb ici ^^ ?


moi pour la table "online" ;)


---------------
Découvre le HFRcoin ✈ - smilies
n°1365977
soulmanto
Chat Noir replica
Posté le 14-05-2006 à 19:18:17  profilanswer
 

Table des utilisateurs en ligne? Pourquoi ne pas utiliser une table "MEMORY"? [:petrus dei]

n°1365979
fabien
Vive la super 5 !
Posté le 14-05-2006 à 19:20:38  profilanswer
 

soulmanto a écrit :

Table des utilisateurs en ligne? Pourquoi ne pas utiliser une table "MEMORY"? [:petrus dei]


ha non je confond, c'est une "heap" .  :jap:


---------------
Découvre le HFRcoin ✈ - smilies
n°1365981
Max Evans
Posté le 14-05-2006 à 19:24:36  profilanswer
 

The-Shadow a écrit :

Houlà, ça m'intéresse ça.
C'est mieux qu'un mysql_num_rows ?


Comme le disait Anthomicro, le SQL_CALC_FOUND_ROWS te retourne le nombre de lignes de ta requête.
 
Comme ceci :
 
SELECT SQL_CALC_FOUND_ROWS * FROM table_messages WHERE topic = 1 LIMIT 0,10;
SELECT FOUND_ROWS();
 
Le FOUND_ROWS() ne prendra alors pas en compte la clause LIMIT et te retournera le nombre de messages total du topic N°1 ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1365989
cinocks
Posté le 14-05-2006 à 19:37:08  profilanswer
 

Pour peu que la personne utilise le LIMIT pour recuperer une page de messages

n°1365995
anthomicro
Posté le 14-05-2006 à 19:48:26  profilanswer
 

Ce qui n'est pas efficace, on en revient donc au point d'avant ^^
 
Sinon ouais autant utiliser HEAP pour les connectés, pas besoin d'avoir une sauvegarde du contenu de cette table en cas de reboot du PC ;)

n°1365997
joce
Architecte / Développeur principal
"BugHunter"
Posté le 14-05-2006 à 19:54:22  profilanswer
 

masklinn a écrit :

[:petrus dei]
 
Tu veux dire que la première propal serait plus efficace pour InnoDB [:petrus dei]
 
J'ai un peu tendance à douter quand même, on pourrait avoir des tests [:petrus dei]


Je dis juste qu'avec innodb les count(*) ne sont pas optimisés. Faut maintenir un compteur à part.

n°1366002
xman
branleur
Posté le 14-05-2006 à 20:28:17  profilanswer
 

cinocks a écrit :

Pour peu que la personne utilise le LIMIT pour recuperer une page de messages


Vaut mieux ne pas utiliser de LIMIT pour récup les messages mais pour récup les topics, ça fait toujours besoin, non ?
 
Donc pour récupérer les topics d'une section (forum ou sous-forum) qu'on veut afficher tout en connaissant le nombre total de topics de cette section (pour afficher les liens vers les autres pages), faudrait faire un truc du genre ?

Code :
  1. $reqtopic = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM `topics` WHERE section = '.$idsection.' ORDER BY datederniermsg DESC LIMIT '.$debut.','.$nbtopicsparpage) or die ('Erreur requête topic');
  2. $reqcounttopics = mysql_query('SELECT FOUND_ROWS()');
  3. $nbtopics = mysql_result($reqcounttopics,0,0);


 
Y'a-t-il encore plus simple que la dernière ligne lorsqu'on sait qu'une requête renvoie une seule ligne avec une seule valeur entière ?

n°1366007
anthomicro
Posté le 14-05-2006 à 20:36:21  profilanswer
 

Beurk, c'est lent :(

n°1366014
Max Evans
Posté le 14-05-2006 à 20:46:46  profilanswer
 

C'est bcp plus léger niveau ressource :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1366018
xman
branleur
Posté le 14-05-2006 à 21:03:42  profilanswer
 

Faudra que je teste mon forum en local un jour car là j'ai passé mon après-midi à optimiser des trucs et je n'ai pas vu d'amélioration chiffrée.
C'est toujours autour de 0.5 secondes (que ce soit pour lister les topics ou les messages d'un topic) chez Free.
Mais si ça se trouve, il y a de plus en plus de charge en soirée et donc il y a une réelle amélioration...
J'ai quand même vu des descentes à 0.2 secondes

Message cité 1 fois
Message édité par xman le 14-05-2006 à 21:05:13
n°1366019
anthomicro
Posté le 14-05-2006 à 21:04:36  profilanswer
 

Sa solution ? avec le LIMIT ? c'est affreux ^^
 
Je parle pas du SQL_CALC_FOUNDROWS, mais du LIMIT...

n°1366021
xman
branleur
Posté le 14-05-2006 à 21:06:35  profilanswer
 

Je ne demande qu'à l'améliorer. :o
Mais pour des topics qui changent sans cesse d'ordre (contrairement à des messages dans un topic qui gardent toujours le même ordre) j'ai du mal à voir comment faire sans LIMIT.

n°1366024
Max Evans
Posté le 14-05-2006 à 21:08:49  profilanswer
 

xman a écrit :

Faudra que je teste mon forum en local un jour car là j'ai passé mon après-midi à optimiser des trucs et je n'ai pas vu d'amélioration chiffrée.
C'est toujours autour de 0.5 secondes (que ce soit pour lister les topics ou les messages d'un topic) chez Free.
Mais si ça se trouve, il y a de plus en plus de charge en soirée et donc il y a une réelle amélioration...
J'ai quand même vu des descentes à 0.2 secondes


Hmm, cherche pas, si tu veux vmt chiffrer tes perfs, oublie les serveurs FREE ;) Essaye de prendre une petite formule à quelques euros/an pour prendre un hébergement mutualisé ;)
 

anthomicro a écrit :

Sa solution ? avec le LIMIT ? c'est affreux ^^
 
Je parle pas du SQL_CALC_FOUNDROWS, mais du LIMIT...


Ha, autant pour moi :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1366027
soulmanto
Chat Noir replica
Posté le 14-05-2006 à 21:12:05  profilanswer
 

xman a écrit :

Je ne demande qu'à l'améliorer. :o
Mais pour des topics qui changent sans cesse d'ordre (contrairement à des messages dans un topic qui gardent toujours le même ordre) j'ai du mal à voir comment faire sans LIMIT.


 
C'est justement un des gros sujets de débat dans ce topic... Je crois que les personnes ayant trouvé une solution performante préfèrent garder pour eux leurs astuces, et c'est bien compréhensible! ;) Il y'a quand même quelques piste à suivre et des choses à éviter qui ont été apportées, c'est un bon début! :D

n°1366036
anthomicro
Posté le 14-05-2006 à 21:22:31  profilanswer
 

Bah j'ai quand même détaillé comment je faisais avec le BETWEEN, je vais pas filer le code non plus lol ^^
 
On en a débattu pas mal dans les dernières pages... faudrait relire les dix dernières pages tu devrais trouver ;)

n°1366037
xman
branleur
Posté le 14-05-2006 à 21:25:16  profilanswer
 

ben tu l'as très bien expliqué pour les messages dans un topic (je l'ai implémenté aujourd'hui et ça marche même si, comme je l'ai dit, je n'ai pas encore pu vraiment quantifier les effets bénéfiques) mais j'ai pas le souvenir de l'avoir lu pour les topics dans une section du forum.
Mais c'est pas grave, je vais me creuser un peu la tête pour trouver une solution (si je retrouve pas). :o


Message édité par xman le 14-05-2006 à 21:26:49
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  365  366  367  ..  486  487  488  489  490  491

Aller à :
Ajouter une réponse
 

Sujets relatifs
question avec les forums phpbb2[php] trouver la premier place ou inserer un enregistrement (résolu)
Forums phpBBQui connait l'algo du Passticket et sa mise en place en VB ?
[Merise] Mise en place d'un MCDFocus mal placé....
[Blabla/Prog] Les développeurs foromeurs sont-ils des feignasses?Mise en place d'un formulaire CGI
forums création de site internetJava - Mise en place d'une api (Servlet)
Plus de sujets relatifs à : les développeurs de forums, les 3/4 des forums sont down /o\


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)