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

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  466  467  468  ..  486  487  488  489  490  491
Auteur Sujet :

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

n°1725108
fabien
Vive la super 5 !
Posté le 27-04-2008 à 13:07:00  profilanswer
 

Reprise du message précédent :

joce a écrit :


ca coute presque rien ce genre de mise à jour


ben j'ai testé, ca prend quelques secondes, et ca seulement pour un seul mesage, puis faut recommencer pour chaque post supprimé ;)


---------------
Découvre le HFRcoin ✈ - smilies
mood
Publicité
Posté le 27-04-2008 à 13:07:00  profilanswer
 

n°1725109
theredled
● REC
Posté le 27-04-2008 à 13:09:09  profilanswer
 

fabien a écrit :


ben j'ai testé, ca prend quelques secondes, et ca seulement pour un seul mesage, puis faut recommencer pour chaque post supprimé ;)


Les posts supprimés sont le plus souvent en fin de topic, sla dit.
Qqs secondes, c'est avec la colonne indexée ?


Message édité par theredled le 27-04-2008 à 13:10:03

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1725114
joce
Architecte / Développeur principal
"BugHunter"
Posté le 27-04-2008 à 13:26:00  profilanswer
 

rosco a écrit :


Non, y suffit de faire l'astuce du LIMIT inversé et c'est instantané pour les pages les + vues au début et à la fin d'un topic (temps de génération maximal au milieu du topic donc mais quand même divisé par 2 par rapport au LIMIT simple). Y a que les bots qui parcourent tout le topic n'importe comment généralement.


ouais mais bon Google existe :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°1725115
drasche
Posté le 27-04-2008 à 13:26:25  profilanswer
 

fabien a écrit :

heu, la suppression de ses topics, ce n'est pas vraiment une bonne idée, t'imagine par exemple s'il est l'auteur de ce topic ou bien de blabla@prog? de tres gros topics supprimé ...


Corbeille :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1725117
drasche
Posté le 27-04-2008 à 13:26:54  profilanswer
 

joce a écrit :

ca coute presque rien ce genre de mise à jour


Et avec un index dessus? :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1725118
joce
Architecte / Développeur principal
"BugHunter"
Posté le 27-04-2008 à 13:28:48  profilanswer
 

Dj YeLL a écrit :


 
Oué mais y'a un truc que je ne pourrais pas faire ... la fameuse mise à jour des compteurs.
 
Si je del un post, le compteur topic est mis à jour, ainsi que le compteur forum, par un trigger.
 
Et si je del un topic, le compteur forum est mis à jour avec "compteur forum - compteur topic"
Puis les posts sont viré avec le ON DELETE CASCADE (donc le trigger sur post n'est pas lancé)
 
Par contre si lorsque je del un topic c'est un trigger qui s'occupe de virer les posts ... le trigger du post va se déclencher, et va vouloir mettre à jour le compteur topic ... ce qui ne sera pas possible et va me péter à la gueule...


avec myisam un count sur une table est immediat, et c'est quasiment valable aussi pour un count sur un index. Alors qu'innodb c'est très lent, ce qui oblige à maintenir des compteurs à part


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°1725120
joce
Architecte / Développeur principal
"BugHunter"
Posté le 27-04-2008 à 13:32:40  profilanswer
 

Dj YeLL a écrit :


 
Parce qu'un "LIMIT 0, 50" traite et récupère 50 résultats tandis qu'un "LIMIT 500000, 50" traite 500000 résultat pour en retourner 50
 


en fait ca serait plus simple de se pencher sur le code source de MySQL et notamment des bitmap qui permettraient de gérer de façon optimale les LIMIT et qui existent, mais pas encore utilisés pour ce genre d'optimisation.


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°1725121
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 13:33:10  profilanswer
 

joce a écrit :


c'est plus le cas sur la 2007.2


 
:jap:
 

joce a écrit :


avec myisam un count sur une table est immediat, et c'est quasiment valable aussi pour un count sur un index. Alors qu'innodb c'est très lent, ce qui oblige à maintenir des compteurs à part


 
Hum ... Ça c'est intéressant ... Surtout depuis que j'ai tout revu je n'ai plus de clé étrangère... Je sans doute virer les compteurs et passer sous MyISAM alors :jap:


---------------
Gamertag: CoteBlack YeLL
n°1725123
joce
Architecte / Développeur principal
"BugHunter"
Posté le 27-04-2008 à 13:38:22  profilanswer
 

drasche a écrit :


Et avec un index dessus? :D


je parlais du cas avec un index dessus :o


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°1725125
skeye
Posté le 27-04-2008 à 13:46:03  profilanswer
 

Dj YeLL a écrit :


Hum ... Ça c'est intéressant ... Surtout depuis que j'ai tout revu je n'ai plus de clé étrangère... Je sans doute virer les compteurs et passer sous MyISAM alors :jap:


...et tu essaies de garder la cohérence des données uniquement avec ton code php?[:pingouino]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 27-04-2008 à 13:46:03  profilanswer
 

n°1725126
drasche
Posté le 27-04-2008 à 13:52:23  profilanswer
 

skeye a écrit :

...et tu essaies de garder la cohérence des données uniquement avec ton code php?[:pingouino]


C'est comme ça avec tous les forums exploitant les tables MyISAM tu sais [:petrus75]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1725128
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 13:59:04  profilanswer
 

skeye a écrit :


...et tu essaies de garder la cohérence des données uniquement avec ton code php?[:pingouino]


 
[:spamafote]


---------------
Gamertag: CoteBlack YeLL
n°1725129
skeye
Posté le 27-04-2008 à 14:02:07  profilanswer
 

drasche a écrit :


C'est comme ça avec tous les forums exploitant les tables MyISAM tu sais [:petrus75]


bah oui, justement.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1725130
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 14:06:01  profilanswer
 

Toute façon c'est une vraie jungle le dev ouaibe (enfin comme bcp d'autres domaines sans doutes ^^)
 
Mais quoi qu'on utiliser, t'auras toujours quelqu'un pour te faire comprendre que c'est mal :o


---------------
Gamertag: CoteBlack YeLL
n°1725160
masklinn
í dag viðrar vel til loftárása
Posté le 27-04-2008 à 16:11:33  profilanswer
 

Dj YeLL a écrit :

Toute façon c'est une vraie jungle le dev ouaibe


en php [:aloy]


---------------
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°1725162
drasche
Posté le 27-04-2008 à 16:22:06  profilanswer
 


Non, ça c'est pas une jungle, c'est un marais.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1725163
totoffe38
Posté le 27-04-2008 à 16:46:38  profilanswer
 

En suivant ce topic ça m'a donné envie de jouer un peu avec MySQL.
 
Par défaut j'ai utilisé InnoDB parce qu'il fallait bien que je choisisse un moteur.
 
Sur une table articles qui comporte 100.000 entrées (merci LOAD DATA INFILE qui m'a fait ça en 5s), une requête:

Citation :

SELECT * FROM articles WHERE articles.user_id = 3000


prend 0.5s.
 
J'ai alors décidé de créer une table commentaires, et j'ai mis 1.000.000 d'entrées, soyons fous!
 
Et bizarrement la même requête donc sans même aller pêcher dans commentaires, me prend maintenant 6s. Comment ça se fait? C'est InnoDB qui fait ça? Passer à MyISAM amélioreraient sensiblement les performances?
 
Parce que là je fais une requête toute bête, je vois pas comment elle pourrait être optimisée.

n°1725165
masklinn
í dag viðrar vel til loftárása
Posté le 27-04-2008 à 16:49:29  profilanswer
 

ta colonne user_id est bien indexée?

 

edit: et t'as déclaré la colonne user_id comme étant une FK sur user.id ou pas non plus?

Message cité 2 fois
Message édité par masklinn le 27-04-2008 à 16:50:40

---------------
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°1725166
kao98
...
Posté le 27-04-2008 à 16:50:32  profilanswer
 

totoffe38 a écrit :


Parce que là je fais une requête toute bête, je vois pas comment elle pourrait être optimisée.


En n'utilisant pas l'* :??:


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1725168
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 17:02:54  profilanswer
 

 

Là en l'occurrence je ne vois pas le rapport entre Php et les moteurs de stockage de MySQL :o


Message édité par Dj YeLL le 27-04-2008 à 17:03:17

---------------
Gamertag: CoteBlack YeLL
n°1725170
totoffe38
Posté le 27-04-2008 à 17:23:39  profilanswer
 

masklinn a écrit :

ta colonne user_id est bien indexée?
 
edit: et t'as déclaré la colonne user_id comme étant une FK sur user.id ou pas non plus?


user_id est bien indexé, par contre pour le FK je sais pas où je vois ça dans CocoaMysql, je vais réinstaller phpmyadmin je sais mieux m'en servir, mais normalement la FK devrait être gérée par Rails puisque je l'ai spécifié dans le fichier de migration depuis son passage en version 2.
 

kao98 a écrit :


En n'utilisant pas l'* :??:


Effectivemment je suis passé de 6s -> 4.5s.
 
Par contre là je viens de passer à l'étape supérieure avec:

Citation :

SELECT commentaires.texte, commentaires.date FROM commentaires JOIN articles ON commentaires.article_id = article.id WHERE ((articles.user_id = 3000))


Avec une table qui possède 1M d'entrées, ça prend 20s  :cry:

n°1725172
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 17:37:24  profilanswer
 

article_id aussi est bien indexée ?


---------------
Gamertag: CoteBlack YeLL
n°1725173
kao98
...
Posté le 27-04-2008 à 17:43:53  profilanswer
 

C'est quoi ton serveur ? Combien de lignes exactement sont retournées ?
Parce que, bien que ça semble un peu lent, avec une table d'1M d'entrées, si c'est un petit serveur, ça peut sembler normal !
 
Et, en plus de vérifier les index, tu peux aussi vérifier les plans d'exécution, les stats, toussa ! Ca t'apportera peut-être des pistes pour améliorer ça !

Message cité 1 fois
Message édité par kao98 le 27-04-2008 à 17:46:01

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1725174
multani
Dépressionnisé
Posté le 27-04-2008 à 17:59:08  profilanswer
 

Fais voir les plans d'exécution effectivement, c'est ça qui t'indiquera si tu peux optimiser et où.

n°1725177
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:01:01  profilanswer
 

Bon j'ai remodifié par mal de choses.
 
Entre autres, les compteurs ne sont plus calculés à chaque insertion pour mettre à jour la/les tables parentes, mais avec des jointures et du COUNT, et c'est vrai que c'est très rapide (les count sont instantanés, même sur les grosses tables)
 
Merci Joce :o


---------------
Gamertag: CoteBlack YeLL
n°1725178
skylight
Made in France.
Posté le 27-04-2008 à 18:06:00  profilanswer
 

en quoi c'est plus rapide de faire des jointures pour des compteurs, lors des insertions :??: pas compris ce que tu as fait là :o

n°1725179
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:10:17  profilanswer
 

Avant, quand j'insérais un post :
 
Topic : posts = posts + 1;
Forum : posts = posts + 1;
Category : posts = posts + 1;
Members : posts = posts + 1;
 
Mais vu que le compteur devait être maintenu à jour, un delete de post sous entendait :
 
Topic : posts = posts - 1;
Forum : posts = posts - 1;
Category : posts = posts - 1;
Members : posts = posts - 1;
 
Et un delete de topic :
 
Forum : topics = topics - 1;
Forum : posts = posts - X;
Category : topics = topics - 1;
Category : posts = posts - X;
Pour chaque members qui avait posté dans le topic : posts = posts - X;
 
Donc ça faisait des calculs sans arrêt :o


---------------
Gamertag: CoteBlack YeLL
n°1725180
skylight
Made in France.
Posté le 27-04-2008 à 18:12:40  profilanswer
 

et maintenant tu fais quoi ?
je comprends qu'au lieu de récuperer le nombre de posts X d'un topic, tu fais un count sur ce topic pour avoir le nombre de posts.. c'est pareil non ? :o
en meme temps, je suis crevé, je rentre du taff après 13h de boulot tooday :/


Message édité par skylight le 27-04-2008 à 18:13:08
n°1725182
rosco
Posté le 27-04-2008 à 18:19:08  profilanswer
 

Si j'ai compris son truc, maintenant il n'utilise plus de compteurs mais recompte à chaque fois le nombre de posts quand il fait le listing ? Ca alourdit sûrement (jointures) si c'est ça car chaque personne lisant un sujet lance des COUNT à tire larigot, nan ?

Message cité 2 fois
Message édité par rosco le 27-04-2008 à 18:20:01
n°1725183
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:19:47  profilanswer
 

Ben avant si j'affichais la liste des forums par exemple, je faisais (en gros) :
 
SELECT id, name, topics, posts FROM forum
 
Puisque j'avais un champ pour le compteur de topics, et un pour le compteur de post
 
Maintenant j'ai viré les champs (donc ceux du dernier posteur, du titre du dernier post, avec leurs ID respectifs), donc quand j'affiche la liste des forums, il faut que je fasse une jointure, et des COUNT, pour savoir combien il y a de topic/post dans chaque forum.
 
Idem à l'affichage des topics, pour savoir combien il y a de posts, et le dernier post/posteur de chacun d'entre eux :o


---------------
Gamertag: CoteBlack YeLL
n°1725185
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:20:09  profilanswer
 

rosco a écrit :

Si j'ai compris son truc, maintenant il n'utilise plus de compteurs mais recompte à chaque fois le nombre de posts quand il fait le listing ? Ca alourdit sûrement (jointures) si c'est ça car chaque personne lisant un sujet lance des COUNT à tire larigot, nan ?


 
Oué voila :o


---------------
Gamertag: CoteBlack YeLL
n°1725186
totoffe38
Posté le 27-04-2008 à 18:20:10  profilanswer
 

Je vais reprendre à zéro, parce que je me suis planté en répondant à certaines questions.

masklinn a écrit :

ta colonne user_id est bien indexée?
 
edit: et t'as déclaré la colonne user_id comme étant une FK sur user.id ou pas non plus?


Alors j'ai lancé Mysql Administrator, et articles.user_id ne semble pas être indéxé et user.id n'est pas déclaré comme FK non plus! Normalement Rails était censé faire ça automatiquement. Sinon l'instruction SQL à taper pour vérifier les index et les FK c'est quoi déjà histoire que je confirme à la main?
 

Dj YeLL a écrit :

article_id aussi est bien indexée ?


D'après Mysql administrator, je n'ai pas l'impression que ce soit le cas. Enfin ce soft ça fait 2 jours que je l'ai installé je sais peut-être pas forçément bien interpréter ce qu'il m'affiche.
 

kao98 a écrit :

C'est quoi ton serveur ? Combien de lignes exactement sont retournées ?
Parce que, bien que ça semble un peu lent, avec une table d'1M d'entrées, si c'est un petit serveur, ça peut sembler normal !
 
Et, en plus de vérifier les index, tu peux aussi vérifier les plans d'exécution, les stats, toussa ! Ca t'apportera peut-être des pistes pour améliorer ça !


100 lignes sont renvoyées, mais au final y'aura un filtrage supplémentaire. Ma bécane de dév est un G4 1Ghz. Le serveur final sera un Kimsufi XL, tu penses que ça suffira pour faire traiter une table aussi grosse? C'est à peu près la taille maxi de la BD que je vise en condition réelle d'utilisation, avec environ une dizaine de connections par seconde à mon site aux heures de pointe.
 

multani a écrit :

Fais voir les plans d'exécution effectivement, c'est ça qui t'indiquera si tu peux optimiser et où.


C'est quoi le plan d'éxecution? j'ai fais un petit google mais rien de satisfaisant est sorti.
 
Déjà je dois tirer au clair cette histoire d'index et de FK, c'est pas normal Rails aurait du s'en charger tout seul puisque j'ai respecté les conventions  [:thalis]

n°1725187
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:21:28  profilanswer
 

> Mets un index sur article_id
> Pour le plan, tu fais un "DESCRIBE ta_requete" je crois
 
Par exemple :
 
DESCRIBE SELECT machin, truc LEFT JOIN bidule ON ...


---------------
Gamertag: CoteBlack YeLL
n°1725189
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:27:51  profilanswer
 

0.28 secondes pour afficher 200 forums, avec le calcul du nombre de topics et post pour chacun d'eux, ainsi que le titre et l'id du dernier post, ainsi que le titre et l'id du dernier posteur.


---------------
Gamertag: CoteBlack YeLL
n°1725190
totoffe38
Posté le 27-04-2008 à 18:28:09  profilanswer
 

Alors déjà

Citation :


mysql> DESCRIBE articles;
+---------------------+--------------+------+-----+---------+----------------+
| Field                    | Type          | Null | Key | Default | Extra          |
+---------------------+--------------+------+-----+---------+----------------+
| id                       | int(11)        | NO   | PRI | NULL    | auto_increment |  
| user_id                | int(11)        | YES  |      | NULL    |                      |  


 
Ca veut dire que user_id n'est pas déclaré comme clé étrangère me trompé-je?

n°1725191
rosco
Posté le 27-04-2008 à 18:29:33  profilanswer
 

Dj YeLL a écrit :

Maintenant j'ai viré les champs (donc ceux du dernier posteur, du titre du dernier post, avec leurs ID respectifs), donc quand j'affiche la liste des forums, il faut que je fasse une jointure, et des COUNT, pour savoir combien il y a de topic/post dans chaque forum.

 

Idem à l'affichage des topics, pour savoir combien il y a de posts, et le dernier post/posteur de chacun d'entre eux :o


C'est alors très certainement + lourd à l'usage, car le ratio insertion/lecture et delete/lecture tendent vers 0. Les compteurs sont "peu fréquemment" mis à jour et leur rapatriement est + simple et directement dans la foulée de la requête sur la table TOPICS par exemple. Tu fais sans cesse des calculs implicites et des jointures avec ta méthode. C'est tjs une histoire de compromis quoi :o. Y reste le compteur de vues maintenu en dur :D


Message édité par rosco le 27-04-2008 à 18:30:00
n°1725192
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:30:07  profilanswer
 

Y'a pas d'index sur ton user_id


---------------
Gamertag: CoteBlack YeLL
n°1725197
totoffe38
Posté le 27-04-2008 à 18:35:54  profilanswer
 

Et il me semble que user_id n'est pas non plus déclaré comme Foreign Key Constraint, donc en fait je me tape InnoDB sans même tirer profit de ses capacités...

n°1725198
kao98
...
Posté le 27-04-2008 à 18:36:41  profilanswer
 

rosco a écrit :

Si j'ai compris son truc, maintenant il n'utilise plus de compteurs mais recompte à chaque fois le nombre de posts quand il fait le listing ? Ca alourdit sûrement (jointures) si c'est ça car chaque personne lisant un sujet lance des COUNT à tire larigot, nan ?


Joce disait justement le contraire ! Un COUNT sur une table myIsam avec de bons index est très très rapide, c'est pour ça que Yell a choisi de tester comme cela, et d'après ce qu'il dit, c'est convaincant.


Message édité par kao98 le 27-04-2008 à 18:37:31

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1725199
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-04-2008 à 18:42:02  profilanswer
 

Ça vient de quoi la "perte" sur une table vide ?
 
Sur table avec du contenu, je crois que ce sont les champs qui ne sont pas rempli, entre autres, non ? Genre un champ "CHAR 30" avec 20 octets de datas dedans, ça faut 10 octets de perte, c'est bien ça ?
 
Mais sur une table vide ...


---------------
Gamertag: CoteBlack YeLL
n°1725202
multani
Dépressionnisé
Posté le 27-04-2008 à 18:45:15  profilanswer
 

Dj YeLL a écrit :

Ça vient de quoi la "perte" sur une table vide ?
 
Sur table avec du contenu, je crois que ce sont les champs qui ne sont pas rempli, entre autres, non ? Genre un champ "CHAR 30" avec 20 octets de datas dedans, ça faut 10 octets de perte, c'est bien ça ?
 
Mais sur une table vide ...


C'est dû aux suppressions des données de la table, ça laisse des "trous" qui sont récupérés soit quand tu réinserts des données dans la table, soit que tu "vacuum" ta table (ça s'appelle "optimize" dans Mysql je crois).

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  466  467  468  ..  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)