PHP/MySQL: Wie Datenbank für Forum aufbauen?
e7
- datenbank
Hi @all,
nachdem ich es endlich fertiggebracht habe, bei mir MySQL fehlerfrei zum Laufen zu bringen, habe ich nun vor mir ein kleines Forum - vorerst mal zum Ausprobieren - zu schreiben. Nun meine Frage: Wie sollte ich die Datenbank strukturieren?
- Eine Tabelle, um eine Liste über alle Threads und deren Überschrift zu haben?
- Für jeden Thread eine Tabelle? Werden doch mit der Zeit relativ viel Threads und damit tausende von Tabellen? Verkraftet das MySQL? Oder lieber alle Threads inklusive Antworten in eine Tabelle? Ist das sinnvoll (Geschwindigkeit/Speicher...)? Müsste doch bei beispielsweise durchschnittlich 30 Antworten pro Thread und 100.000 Threads 3 Millionen Datensätze geben... Auch nicht so sonderlich sinnvoll, oder? Und vor allem: Unflexibel, 3 Mio Datensätze zu durchsuchen, um die 2 Antworten auf einen neune Thread zu finden?
Ihr seht schon - Fragen über Fragen... Hoffe mal, dass es eine vernünftige Lösung gibt und ich keine 3 Mio Datensätze oder 100.000 Tabellen anlegen muss...
E7
Hallo,
[...] MySQL [...], habe ich nun vor mir ein kleines Forum - vorerst mal zum Ausprobieren - zu schreiben. Nun meine Frage: Wie sollte ich die Datenbank strukturieren?
Du hast noch nicht gesagt, welche Skriptsprache Du verwenden willst.
Ich denk mal, Du verwendest PHP.
Bevor Du das Rad neu erfindest, lies mal:
Henryk Plötz:
Threadbasiertes Forum mit PHP und MySQL
http://aktuell.de.selfhtml.org/artikel/phpasp/php-forum/index.htm
http://alex.ilosuna.org/forum.html
http://www.dclp-faq.de/q/q-scripte-foren.html
Gruesse,
Thomas
Hi,
Ich denk mal, Du verwendest PHP.
Seht im Titel: PHP/MySQL: Wie Datenbank für Forum aufbauen?
Henryk Plötz:
Threadbasiertes Forum mit PHP und MySQL
Hab ich schon - ist allerdings nicht so besonders übersichtlich...
http://alex.ilosuna.org/forum.html
http://www.dclp-faq.de/q/q-scripte-foren.html
Ich werd mir die Links mal anschauen; schon mal vielen Dank
E7
Hello,
mmh, wenn Du wirklich Spaß am Programmieren hast, und auch die notwendige Zeite, dann lies nicht erst, was es schon fertig gibt, sondern mach Dir Gedanken übe eigene Konzepte. Das technische Handwerkszeug dafür muss man sicherlich erlernen und auch viele Dinge so übernehmen, "wie sie schon immer waren". Aber durch eine eigene empirische Vorgehensweise kommt man von Zeit zu Zeit auch noch mal auf neue Ideen. Die würde man nicht bekommen, wenn man immer nur den vermeintlich besten Weg nachstapft.
Wie sagt doch Kunze so schön? "Neue Wege, die kann man nicht beschreiben, denn sie entstehn doch erst beim Gehen"
In diesem Sinne helfe ich Dir gerne so gut ich kann mit Phantasie und Philosopie weiter. ("Ph", da bin ich noch altmodisch... *g*)
Zu Deiner Frage mit den Millionen Datensätzen:
Ich schick Dir eine Zufallsfunktion mit und eine Idee. Die Zufallsfunktion ist fertig, die Idee eben nur eine Idee.
Bau Dir eine einfache MySQL-Struktur auf. Für den Anfang sollten zwei Tabellen reichen. Füll die eine mit den Zufallswerten. Füll die andere mit Zufallswerten und stell eine Relation zur ersten Tabelle her. Lass dir eine einfache Linkseite generieren, in der Verweise auf einzelne Datensätze der ersten Tabelle stehen. Sorg dafür, dass beim Klick auf den Link der Zufallstext der einen Tabelle und die Inclusionen aus der anderen auf einer Seite angezeigt werden.
Lass Dir die Ausführungszeit des Statements anzeigen.
Fang an, dir Werkzeuge zu bauen:
Suchen nach Topics
Suchen nach Inhalten
Listenanzeigen (immer nur 20 auf einer Seite)
Blättern vorwärts und rückwärts
Detailanzeige
editieren (update)
löschen
filtern (Nur Threads eines Nutzers)
Fehlersuche: ganz bewusst einige Datensätze der linken Tabelle
verschwinden lassen, und dann eine Abfrage bauen, um die
Integritätsbrüche zu finden.
Und immer dran denken, Dabei Funktionen, Strukturen und/oder Klassen entstehen zu lassen, die man nachher weiterverwenden kann. Immer universell und eigensicher programmieren. Nicht dass es Dir so geht, wie Aqua mit seinem Perl-Session-Modul. Lies die den Thread mal durch. Ist auch ein Stück Philosophie drin.
Und was die Messergebnisse betrifft, wenn Du bei zehn Millionen Beiträgen angekommen bist: Bitte hier veröffentlichen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
Ich habe da noch einen interessanten Link bezüglich der Theorie und Philosophie gefunden. Das halte ich für lesenswert, auch wenn man das (fast) alles schon kann.
http://www.schule.bayern.de/texte/datenbanktheorie.pdf
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
wie der Zufall es wollte habe ich die Random-String-Funktion natürlich vergessen:
//-----------------------------------------------------------------------------
function get_random_str($lenmin,$lenmax)
{
mt_srand ((double)microtime()*1000000);
$anzahl = mt_rand($lenmin,$lenmax);
$zeichen="abcdefghijklmnopqrstuvwxyzäöüßABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ0123456789-+_&~.,!";
$zufall="";
$i=0;
while($i<=$anzahl)
{
$zufall.=substr($zeichen,mt_rand(0,strlen($zeichen)),1);
$i++;
}
return $zufall;
}
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
Wie sollte ich die Datenbank strukturieren?
- Eine Tabelle, um eine Liste über alle Threads und deren Überschrift zu haben?
eine Tabelle 'Threads', warum nicht?
- Für jeden Thread eine Tabelle?
Oeff. Nur nicht sowas.
Oder lieber alle Threads inklusive Antworten in eine Tabelle?
Eine Tabelle 'Beitraege' ist OK, nun haben wir schon zwei Tabellen.
Ist das sinnvoll (Geschwindigkeit/Speicher...)? Müsste doch bei beispielsweise durchschnittlich 30 Antworten pro Thread und 100.000 Threads 3 Millionen Datensätze geben... Auch nicht so sonderlich sinnvoll, oder?
Datensaetze entstehen im uebertragenden Sinne in der Realitaet. - Und wenn die da entstehen, dann muss man die auch im IT-System abbilden. Das ist einfach und "schlauer sein als einfach" geht nicht.
Und vor allem: Unflexibel, 3 Mio Datensätze zu durchsuchen, um die 2 Antworten auf einen neune Thread zu finden?
Hmm, ich sehe immer noch keine Alternative. ;-)
Ihr seht schon - Fragen über Fragen... Hoffe mal, dass es eine vernünftige Lösung gibt und ich keine 3 Mio Datensätze oder 100.000 Tabellen anlegen muss...
Das, was Du indirekt als unvernueftig bezeichnest, ist vernuenftig.
Gruss,
Lude