1 up |
^^^ Additional posts ^^^
zorg.ch
#39648 by @ 27.07.2004 08:15 - nach oben -
habs gesehen gestern...nett das unsere mysqld unter zmysql lÀuft...man sieht grad obs wir sind oder nicht *g*, aber sag wie bringt man das eigentlich hin ?
zorg.ch
#39655 by @ 27.07.2004 08:29 - nach oben -
Was hin? Das das Ding crasht?

Keine Ahnung. Der ``normale'' mysqld hatte noch nie solche Probleme. Und verwertbares gibt er ja auch ned in den Logfiles aus.
zorg.ch
#39657 by @ 27.07.2004 08:30 - nach oben -
hm...naja ich hab nen rechten schreck gekriegt als da im top aufeinmal 5 zmysqlds die cpus fĂŒr sich beansprucht haben.
zorg.ch
#39659 by @ 27.07.2004 09:25 - nach oben -
ich war im phpmyadmin am queries austesten, als er gecrasht ist. aber das waren nicht so wilde queries.
zorg.ch
#39669 by @ 27.07.2004 11:36 - nach oben -
sorry, ich hab den mysqld schon wieder crashen lassen. (verdammt)

jetzt weiss ich wenigstens in welcher region das problem liegt. und zwar hat er offenbar mĂŒhe mit join's von grösseren datenmengen. bei diesem query ist er gecrasht:

SELECT c.* FROM comments c LEFT JOIN comments t ON (t.thread_id=c.thread_id AND t.date>c.date) WHERE t.id IS NULL ORDER BY c.date DESC
zorg.ch
#39677 by @ 27.07.2004 12:00 - nach oben -
Self joins sind unschön bei Tabellen > 6 MB... und womöglich kann er nichtmal einen Index verwenden fĂŒr dein Ding.
zorg.ch
#39680 by @ 27.07.2004 12:17 - nach oben -
Dann erstell einen Index oder mach den Join schöner :)
zorg.ch
#39684 by @ 27.07.2004 12:25 - nach oben -
Der Join lÀsst sich nicht schöner machen, trotz Index. Hab dasselbe mal vor ein paar Monaten probiert. Ich denke eine Thread Tabelle lÀsst sich nicht umgehen.

Die grosse Frage ist dann nur noch wie wirds mit den Non-Forum Posts machen.
zorg.ch
#39687 by @ 27.07.2004 12:29 - nach oben -
die mĂŒssen auch einen eintrag in der thread-table haben. wichtig ist dafĂŒr nur die thread_id, der lastpost und das board. der rest kann man aus den anderen tables holen.
zorg.ch
#39691 by @ 27.07.2004 12:33 - nach oben -
Der Thread wĂŒrde dann sozusagen "generiert" aus dem ersten Post, sobald dieser gemacht wird, ok.
zorg.ch
#39694 by @ 27.07.2004 12:35 - nach oben -
genau so.
zorg.ch
#39698 by @ 27.07.2004 12:54 - nach oben -
Normale Posts wĂŒrden dann einfach auch einen Thread generieren sobald er benötigt wird.

Seh ich das richtig, dass in der Thread Tabelle anschliessend hinterlegt ist, wohin (Forum, Wiki, Smarty ...) ein Thread gehört und seine ID.
Der eigentliche Content des Ersten Posts bleibt weiterhin als Eintrag in Comments.
zorg.ch
#39701 by @ 27.07.2004 13:07 - nach oben -
korrekt. und noch den lastpost
zorg.ch
#39702 by @ 27.07.2004 13:21 - nach oben -
Wozu den lastpost?
Additional posts
zorg.ch
#39705 by @ 27.07.2004 13:26 - nach oben -
Und der (Thread-)Post...
zorg.ch
#39706 by @ 27.07.2004 13:30 - nach oben -
Also ich dachte, dass der Thread-Post trotzdem ein normaler Post wird.
So gibts keine Unterschiede zwischen den einzelnen Posts.
Additional posts
zorg.ch
#39685 by @ 27.07.2004 12:25 - nach oben -
wörfĂ€d Ă€m zĂŒg ah!

chasch nöd wenigstens dÀ "t.date>c.date" usserhalb vom join machÀ ?
zorg.ch
#39689 by @ 27.07.2004 12:31 - nach oben -
nei, denn laufts nĂŒm.
zorg.ch
#39703 by @ 27.07.2004 13:23 - nach oben -
Das Query kann auch gar nicht Funktionieren.
Es gibt nÀmlich hoffentlich keine t.id die NULL sind.
Höchstens solche die '0' sind, aber auch von denen gibts keine.
Was willst du denn genau mit dem Query machen?
zorg.ch
#39709 by @ 27.07.2004 13:31 - nach oben -
Offensichtlich versucht er mit diesem Query sÀmtliche neuste Posts pro Thread nach deren Datum aufzulisten. Eigentlich noch elegant, wÀre nicht auf diese Lösung gekommen, aber schade wenns Performance-MÀssig nicht drinliegt.
Biko: Eventuell wĂŒrde ein Index (Thread_id, Date) etwas nĂŒtzen?
zorg.ch
#39717 by @ 27.07.2004 13:55 - nach oben -
weiss nicht, wie viel ein index performance- und vor allem stabiliĂ€ts-mĂ€ssig bringen wĂŒrde...
zorg.ch
#39719 by @ 27.07.2004 14:05 - nach oben -
EXPLAIN! :P
zorg.ch
#39723 by @ 27.07.2004 14:09 - nach oben -
WÀre noch interessant zum testen, aber ich biko möchte wohl nicht nochmals riskieren dass der mysql abkratzt... ich sage: nur zu! :-)
zorg.ch
#39726 by @ 27.07.2004 14:12 - nach oben -
Ich kann ihn dann ja mal wieder neustarten ;)
zorg.ch
#39729 by @ 27.07.2004 14:14 - nach oben -
:-) biko looooooooos!
zorg.ch
#39809 by @ 27.07.2004 15:36 - nach oben -
yea, fett. mit index tuts! jetzt brauchen wir doch keine threads-table.
zorg.ch
#39811 by @ 27.07.2004 15:39 - nach oben -
sehr gut! baust dus gleich ein?
Additional posts
zorg.ch
#39813 by @ 27.07.2004 16:01 - nach oben -
das lastpost-feld brauchts ĂŒbrigens von mir aus auch nicht mehr. bevor wir das aber löschen, musst du das auch ĂŒberall aus dem code nehmen.
Additional posts
zorg.ch
#39835 by @ 27.07.2004 17:21 - nach oben -
Ok.... also keine Thread-Table... aber es wÀre vielleicht trotzdem edel eine zu haben...
Wir hÀtten dort drin: foreign_thread_id und was noch?
zorg.ch
#39716 by @ 27.07.2004 13:54 - nach oben -
durch die bedingung t.date>c.date im join gibt es genau ein result pro thread, wo die t.id NULL ist. und das ist der datensatz, wo das datum am grössten ist. neben einem subquery (das es bei der installierten mysql-version nicht gibt) ist das die einzige möglichkeit den ganzen datensatz zum maximalen datum pro thread zu bekommen.
zorg.ch
#39721 by @ 27.07.2004 14:06 - nach oben -
Ihr koennt ne andere Version haben, wenn ihr den Aufwand bezahlt ;)

(Das Problem haettet ihr jetzt mit einem eigenen Server nicht :P)
zorg.ch
#39722 by @ 27.07.2004 14:07 - nach oben -
ja...aber neimand sagt das der mysqld auf einem eigenen server nicht abkackt...aber lassen wir diese diskussion...
zorg.ch
#39724 by @ 27.07.2004 14:11 - nach oben -
Lern lesen ;)

Biko ging es um Subqueries, nicht ums abstuerzen.
zorg.ch
#39727 by @ 27.07.2004 14:13 - nach oben -
ist mir schon klar...aber ich meinte das es nicht erwiesen ist, das dieses query mit subquerys stabil lÀuft...
zorg.ch
#39738 by @ 27.07.2004 14:26 - nach oben -
Mit dem eigenen Server hĂ€tten wir das Problem, das irgend jemand die Sache warten mĂŒsste genau gleich, und diese Person (ich nehm mal an wir wĂŒrden dich dafĂŒr anstellen) wĂ€r auch nicht gratis.
zorg.ch
#39750 by @ 27.07.2004 14:37 - nach oben -
Lesen, dann Posten
zorg.ch
#39754 by @ 27.07.2004 14:44 - nach oben -
Du bietest uns deine UnterstĂŒtzung an, da steht aber nichts davon dass du das auch gratis machts.
zorg.ch
#39761 by @ 27.07.2004 14:56 - nach oben -
Gut, es war so gemeint :)
zorg.ch
#39766 by @ 27.07.2004 15:00 - nach oben -
Eben, also bringt uns ein eigener Server in dem Punkt keinen Vorteil.
Additional posts
zorg.ch
#40275 by @ 31.07.2004 14:40 - nach oben -
Du hast GlĂŒck (#40265), dass ich jetzt nicht anfange, darĂŒber zu diskutieren.
Aber mit Rootserver hÀtten wir sicher weniger Probleme.
zorg.ch
#40368 by @ 01.08.2004 15:40 - nach oben -
HĂ€tten wir ganz bestimmt.
Falls du dich nicht mehr an die Fraggeria II erinnern kannst, ich gehör jetzt auch zu den Rootserver BefĂŒrwortern.
zorg.ch
#39752 by @ 27.07.2004 14:42 - nach oben -
Hm, langsam begin ich das ganze zu begreifen.
Die Linke Seite wird immer Angezeigt, die Rechte jedoch nur wenn was gefunden wird.
Es gibt pro Thread genau einmal Rechts nichts, nÀhmlich da wo das Datum am grössten ist.
Ich hab (wie an den Letzten beiden DB PrĂŒfungen) den LEFt JOIN mit irgendwas anderem verwechselt..

Ich probiers mal mit einem Workaround.
Select *, max(date) as datum from comments group by thread_id order by datum desc

Liefert den Neusten Post pro Thread, und ich finds es ist ziemlich schnell.
zorg.ch
#39760 by @ 27.07.2004 14:56 - nach oben -
Sieht gut aus, bin nicht sicher obs nicht so schon drin ist. Ich schau mal am Abend.
zorg.ch
#39770 by @ 27.07.2004 15:01 - nach oben -
Wenns ja schon Funktioniert, was hat dann der Biko gemacht?
zorg.ch
#39781 by @ 27.07.2004 15:07 - nach oben -
Ich nehme mir gerne die Zeit dir alles was wir machen Schritt fĂŒr Schritt zu erklĂ€ren, wenn du auch was tust. Ansonsten ist das herausgeworfene Zeit.

Er hat geschaut ob er die Forum-Übersicht machen kann dass posts aus allen Board drin kommen.
zorg.ch
#39793 by @ 27.07.2004 15:14 - nach oben -
Weshalb sind denn bei meiner Selektion nicht Posts aus allen Boards drin?
Eigentlich haben wird doch noch gar keine Boards..
zorg.ch
#39798 by @ 27.07.2004 15:17 - nach oben -
*seufz* mit boards meinen wir gallery, smarty etc. Bei deiner Selektion sind posts aus allen boards drin.
Additional posts
zorg.ch
#39806 by @ 27.07.2004 15:25 - nach oben -
es sind schon alle posts drin. aber wir brauchen noch die trhead-info. z.b. den title aus dem smarty.

das hauptproblem liegt darin, den neuesten post zu finden. das ist auch der haupt-grund, wieso wir ne thread-table wollen. wenn das da funktionieren wĂŒrde, brĂ€uchten wir keine threads-table.
zorg.ch
#39782 by @ 27.07.2004 15:07 - nach oben -
das tut nicht. und zwar nimmt er den * nicht vom gleichen datensatz wie das max(date) drin ist.
zorg.ch
#39792 by @ 27.07.2004 15:14 - nach oben -
nicht? group by sollte das doch bewerkstelligen?
zorg.ch
#39800 by @ 27.07.2004 15:18 - nach oben -
tut er aber nicht, habs grad angeschaut....
zorg.ch
#39802 by @ 27.07.2004 15:20 - nach oben -
group by kann nicht zwei datensÀtze verhÀngen. du könntest ja auch SELECT *, min(date), max(date), count(date) machen. welcher sollte er dann nehmen?
zorg.ch
#39805 by @ 27.07.2004 15:24 - nach oben -
SELECT *, min(date), max(date), count(date)
bringt nichts, aber das:

SELECT thread_id, max( lastpost ) AS lastpost
FROM `comments`
GROUP BY thread_id
ORDER BY lastpost DESC LIMIT 0 , 30

(* in ner group by drin zu haben ist glaub uncool)
zorg.ch
#39807 by @ 27.07.2004 15:28 - nach oben -
* in ner group gibt dir einfach irgend ein datensatz aus der group.

deine variante tut, weil die thread_id ja in jedem datensatz der group gleich ist. aber jetzt hast du noch keine infos welches der letzte post ist.
Additional posts