Mailinglisten-Archive |
hallo listenmitglieder, wir haben momentan ein nicht ganz triviales problem: in unserer community sind benutzer in virtuellen parteien organisiert und geben ihre stimmen bei umfragen ab. zu jeder umfrage gibt es mehrere antworten. wir möchten darstellen, wieviele personen aus einer partei sich eine bestimmte antwort ausgesucht haben und ausserdem jede einzelne stimmabgabe eines benutzers abhalten. in unserer db existieren dafür folgende tabellen: 1. "benutzer" => id, partei_id (> 4.000 einträge) 2. "antworten" => id, frage_id, text (> 30.000 einträge) 3. "stimm_abgaben" => antwort_id, benutzer_id (> 300.000 einträge) das system ging solange gut, wie es wenige antworten und wenige stimmabgaben gab. mittlerweile frisst mysql aber bei nur einem user der online ist und eine unserer ergebnisseiten abruft 100% cpu-zeit. das kommt folgendermaßen: wir zeigen auf einer seite 5 umfragen mit bis zu 10 antworten an. zu jeder antwort gibt es beispielsweise 10 stimmabgaben von verschiedenen nutzern. um eine solche seite anzuzeigen sind nun: 5 * 10 * 10 = 500 sql-queries über die nun nicht mehr so kleinen tabellen nötig. um die anzahl der queries zu reduzieren möchten wir nun die anworten-tabelle erweitern zu folgender tabelle: "antwort_neu" => id, frage_id, text, stimmen_partei1, stimmen_partei2, stimmen_partei3, ... "stimmen_parteiX" speichert die anzahl der stimmen, die mitglieder der partei X für diese antwort abgegeben haben. dadurch sollten sich dann unsere performance-probleme auf einen schlag lösen. ABER: wir haben keinen plan, wie wir die tabellen zu einer einzigen vereinigen können. jedes php-skript wird abgebrochen, weil es zu lange dauert 30.000 antworten durchzugehen und die neuen felder "stimmen_parteiX" zu füllen. mal abgesehen davon, dass es weit mehr als 30.000 einzelne queries benötigt und wir den server für stunden vom netz nehmen müssten.... hat jemand eine idee oder eine vorstellung davon, wie man eine umstellung bei solch einer grossen datenbank hinbekommt? es ist ziemlich dramatisch im moment, da wir die ergebnis-anzeige komplett abschalten mussten, um die site am laufen zu halten :-( wir danken für jeden hinweis, viele grüsse aus aachen, oliver + arash --- *** Abmelden von dieser Mailingliste funktioniert per E-Mail *** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive