Ich beschäftige mich gerade mit Datenbankstrukturen bei grossen Projekten, also vor allem damit, wie man eine Unmenge an allen möglichen Informationen möglichst resourcenschonend und effektiv ablegen kann.
Bisher habe ich eigentlich nur mySQL-Projekte verwirklicht, bei denen die Daten recht überschaubar und nicht allzu komplex waren. Und auch die Beispiele in den meisten Tutorials, Büchern etc. sind oft sehr simpel gehalten.
Was mich aber zunehmend interessiert, ist, wie man mySQL auch recht komplexe Dinge umsetzen kann, bei denen die Daten z.B. in allerlei Querverbindungen zueinander stehen und wirklich VIELE Daten gehandelt werden.
Ich habe mir zu Übungszwecken mal die Datenbankstruktur des phpBB-Forums angesehen (das ja auch mit recht vielen Einträgen zurechtkommt) und hier ist der Aufbau ja noch nachvollziehbar: es gibt eine Tabelle "Users" (pro Zeile ein Userprofil) und z.B. eine Tabelle "Threads" pro Zeile ein Thread, eine Tabelle "Posts", in der alle Beiträge des Forums stehen usw. Die grösste Tabelle ist hier ja noch jene, mit den einzelnen Beiträgen -aber selbst in grossen Foren kann mySQL die Anzahl an Einträgen ja noch recht gut handeln.
Aber dann habe ich mir z.B. mal das Browsergame "Galaxywars" angesehen (eigentlich so das grösste DB-Projekt, das ich kenne) und versucht nachzuvollziehen, wie hier die Datenbank "designed" ist. Und da steige ich dann irgendwie aus.
Jeder Benutzer (und es sind, soweit ich weiss, hunderttausende) kann dort ja 1-20 Planeten haben. Okay, Tabelle "Planeten", pro Zeile ein Planet mit UserID. Das gibt dann schon im schlimmsten Fall einige hunderttausend mal 20 Einträge. Mag vielleicht noch gehen.
Was aber echt heftig ist: jeder User kann ja hunderte, wenn nicht tausende(!) von Schiffen bauen (ca. 10 verschiedene Schiffstypen oder so). Wie haben die das gelöst? Wenn es hier eine Tabelle "Schiffe" gibt, in der ALLE existierenden Schiffe (mit jeweiliger UserID des Besitzers) eingetragen werden, wird das doch mal schnell zur Monstertabelle mit weit über einer million Einträgen oder so.
Bei z.B. 500.000 Nutzern mit jeweils 1000 Schiffen wären das ja bereits 500.000.000 Einträge in dieser Tabelle. Das wäre schon irgendwie heftig, oder?
Bisher habe ich eigentlich nur mySQL-Projekte verwirklicht, bei denen die Daten recht überschaubar und nicht allzu komplex waren. Und auch die Beispiele in den meisten Tutorials, Büchern etc. sind oft sehr simpel gehalten.
Was mich aber zunehmend interessiert, ist, wie man mySQL auch recht komplexe Dinge umsetzen kann, bei denen die Daten z.B. in allerlei Querverbindungen zueinander stehen und wirklich VIELE Daten gehandelt werden.
Ich habe mir zu Übungszwecken mal die Datenbankstruktur des phpBB-Forums angesehen (das ja auch mit recht vielen Einträgen zurechtkommt) und hier ist der Aufbau ja noch nachvollziehbar: es gibt eine Tabelle "Users" (pro Zeile ein Userprofil) und z.B. eine Tabelle "Threads" pro Zeile ein Thread, eine Tabelle "Posts", in der alle Beiträge des Forums stehen usw. Die grösste Tabelle ist hier ja noch jene, mit den einzelnen Beiträgen -aber selbst in grossen Foren kann mySQL die Anzahl an Einträgen ja noch recht gut handeln.
Aber dann habe ich mir z.B. mal das Browsergame "Galaxywars" angesehen (eigentlich so das grösste DB-Projekt, das ich kenne) und versucht nachzuvollziehen, wie hier die Datenbank "designed" ist. Und da steige ich dann irgendwie aus.
Jeder Benutzer (und es sind, soweit ich weiss, hunderttausende) kann dort ja 1-20 Planeten haben. Okay, Tabelle "Planeten", pro Zeile ein Planet mit UserID. Das gibt dann schon im schlimmsten Fall einige hunderttausend mal 20 Einträge. Mag vielleicht noch gehen.
Was aber echt heftig ist: jeder User kann ja hunderte, wenn nicht tausende(!) von Schiffen bauen (ca. 10 verschiedene Schiffstypen oder so). Wie haben die das gelöst? Wenn es hier eine Tabelle "Schiffe" gibt, in der ALLE existierenden Schiffe (mit jeweiliger UserID des Besitzers) eingetragen werden, wird das doch mal schnell zur Monstertabelle mit weit über einer million Einträgen oder so.
Bei z.B. 500.000 Nutzern mit jeweils 1000 Schiffen wären das ja bereits 500.000.000 Einträge in dieser Tabelle. Das wäre schon irgendwie heftig, oder?

Kommentar