Neues Webprojekt: Einige Fragen vorab u. a. zu PHP?

filament

Erfahrenes Mitglied
Hallo liebe Community,

ich habe aufgrund eines Webprojektes das ansteht bereits im Forum bzgl. der Datenbanken angefragt. Dort gab man mir den Rat bzgl. meiner anderen Fragen (alles etwas gemischt) noch hier und im Webserver Forum einen weiteren Thread aufzumachen.

Ich möchte den Text eigentlich nicht aus dem Zusammenhang trennen, da es sonst schwer zu verstehen sein dürfte inwiefern ich mich auf was beziehe etc. Daher kopiere ich mal meinen 1. Beitrag aus dem bereits eröffneten Thema:

Ich möchte grob gesagt (ohne groß ins Detaill zu gehen) ein Projekt aufbauen, dass sich um Finanzen, Anbieter und Quoten dreht und deren tabellarische und grafische Auswertung.

Da ich leider lange nicht mehr selbst Seiten programmiert habe bzw. mich weiter informiert habe, würde ich gerne vorab mal einige Sachen geklärt haben, bevor ich was anfange und es später aufgrund von Problemen wieder umstrukturieren muss. Die Arbeit kann ich mir ja durch ein gutes Grundkonzept sparen.

Das Projekt läuft wie folgt ab:

Ich stelle eine Seite zur Verfügung, die kostenlos von jedem Besucher der sich registriert hat, genutzt werden kann. Der User hat dabei die Möglichkeit selbst Datensätze anzulegen. Um eine Zuordnung zu gewährleisten wollte ich also erst einmal eine Tabelle anlegen User. Diese Tabelle besteht aus id (auto_increment; unique), username, registrierungsdatum, werbefrei (eventuell später brauchbar). Über Registrierung und die damit verbundenen MySQL Querys möchte ich hier nicht reden, die kann ich dem manual selbst entnehmen, zumal ich nicht ganz so eingerostet bin

Die zweite Tabelle soll lauten: Einzahlungen; Bestehend aus: id, userid, betrag, anbieter, datum.
Die dritte Tabelle soll lauten: Auszahlungen; Bestehend aus: id, userid, betrag, anbieter, datum.
Die vierte Tabelle soll lauten: Gewinne; Bestehend aus: id, userid, betrag, anbieter, datum.
Die fünfte Tabelle soll lauten: Verluste; Bestehend aus: id, userid, betrag, anbieter, datum.

Vielleicht folgen noch weitere Tabellen, sollen aber gleichen Aufbau haben. Grund: Ich will mit nem JOIN die User Tabelle mit der jeweiligen anderen Tabelle verbinden.

Nun zum eigentlichen Problem:

Es kann sein, dass ein User am Tag um die 20 - 40 Datensätze anlegt. Gehen wir mal von 20 aus. Dann legt er im Jahr eventuell 20 x 365 Datensätze an. Das sind 7300. Wenn ich nun 500 registrierte User habe (was ja eigentlich nicht viel ist), dann habe ich also um die 3.500.000 Datensätze. Ich will die Datensätze jedes Users mittels ID sortieren und auch zusammenzählen, maximal jedoch auf 1 Jahr beschränkt (SUM, ORDER BY etc.). Alles was älter ist als 1 Jahr wird nachts um 3 durch nen Cronjob gelöscht.

Hält meine MySQL Datenbank solche Datenströme stand? Macht es hier vielleicht Sinn das Projekt gleich auf mehrere Datenbanken aufzubauen? (Gedanke: 200 - 500 User pro Datenbank, danach neue) Frage: Macht das Sinn auf dem gleichen Server? (Oder sinnvoller verschiedene Server dafür zu mieten? (Anfangs will ich natürlich nicht die riesen Kosten eingehen, bis das Projekt nicht etwas an Einnahmen durch Werbung etc. abwirft))

Wenn ja wie realisier ich solche mehrfachserver basierten Projekte? Sollte ich der performance halber Datenbankklassen nutzen? (ich glaub das hieß so?)

Nächster Punkt: Bin wie bereits geschrieben länger nicht tätig gewesen, gibt es irgendwelche technischen Neuerungen in PHP5?

Insgesamt in den Raum gefragt, eignet sich für solche Statistikprojekte mit Auswertungen MySQL überhaupt? Oder gibt es andere Datenbanksysteme die besser geeignet sind? Wenn ja welche? Hat jemand dazu Tutorials oder Einführungen? (Kenne mich nur mit MySQL aus, sonst noch nichts anderes gemacht bisher)

Hat vielleicht jemand Erfahrungen mit Projekten derartiger Größe?

Danke im Voraus an euch für die Mühe!
Gruß
Ronny

Hinsichtlich der Datenbank hatten wir dort schon festgestellt, dass es gegen meine Datenbankstruktur nichts einzuwenden gibt. Auch MySQL sollte als Lösung in Frage kommen ohne Probleme, weil es eher auf die richtige Datenbankstruktur ankommt, als auf die Datenbanksprache. Wobei hier Mongodb in den Raum geworfen wurde. Ich denke allerdings, dass ich eher MySQL nutzen möchte, da ich mich damit schon gut auskenne.

Ich würde mich freuen, wenn hier einige User mal auf die Problematik PHP an sich eingehen könnten. Sollte ich in PHP zur Optmierung eine Datenbankklasse nutzen? (Ich glaub das hieß so?) Wie kann ich die Performance rein mit PHP sonst noch optimieren?

Danke erneut im Voraus!
 
Mir fällt so spontan Opcode-Cache und natürlich auch Content-Cache ein. Dies macht sich vor allem dann bezahlt, wenn bei weitem nicht so viel eingetragen wie ausgelesen wird.

Natürlich macht es Sinn, sich über geeignete Indices Gedanken zu machen (was aber wieder DB-Thema wäre). Dann wäre es auch wieder sinnvoll, bei JOINs die Conditions auf Spalten zu legen, die auch einen Index haben - was wieder Aufgabe der Application wäre.

Ich rate dazu, ein MVC-Konzept umzusetzen, da Änderungen dort sehr viel angenehmer eingebracht werden können - was sich bei neuen Features wirklich lohnt. Es gibt eine gute Handvoll Frameworks, die das unterstützen.
 
Mir fällt so spontan Opcode-Cache und natürlich auch Content-Cache ein. Dies macht sich vor allem dann bezahlt, wenn bei weitem nicht so viel eingetragen wie ausgelesen wird.

Was genau ist Opcode-Cache und Content-Cache und wie kann ich es realisieren? Was muss ich dabei beachten? Hat es eventuell auch Nachteile?

Natürlich macht es Sinn, sich über geeignete Indices Gedanken zu machen (was aber wieder DB-Thema wäre). Dann wäre es auch wieder sinnvoll, bei JOINs die Conditions auf Spalten zu legen, die auch einen Index haben - was wieder Aufgabe der Application wäre.

Was heißt das genau? Ich konzentriere mich bei den JOINS auf nur eine Spalte oder wie?

Ich rate dazu, ein MVC-Konzept umzusetzen, da Änderungen dort sehr viel angenehmer eingebracht werden können - was sich bei neuen Features wirklich lohnt. Es gibt eine gute Handvoll Frameworks, die das unterstützen.

Auch hier die Frage, was genau ist ein MVC-Konzept?
 
Was genau ist Opcode-Cache und Content-Cache und wie kann ich es realisieren? Was muss ich dabei beachten? Hat es eventuell auch Nachteile?

Opcode-Cache ist, dass der PHP-Bytecode (der entsteht, wenn das PHP-Script in Maschinen-Sprache interpretiert wird) vorgehalten wird, statt ihn einfach zu verwerfen. Das bewirkt, das ein Script beim zweiten Durchlauf schneller abgearbeitet wird, weil die Script->Maschinensprache-Schritt weg fällt. Für den Entwicklungsbereich ist das nix, aber produktiv ist es durchaus eine gute Strategie.

Content-Cache ist natürlich das Zwischenspeichern der Inhalte. Hier muss man darauf achten, bei Änderungen die entsprechenden Cache-Inhalte zu invalidieren, sprich zu ignorieren und neu zu erstellen. Nimm ein gutes Framework, da wird dir viel Arbeit diesbezüglich abgenommen. Nachteil: Es wird wesentlich mehr Festplattenplatz benötigt, als ohne Cache, aber das ist ja die Natur von Caches.


Was heißt das genau? Ich konzentriere mich bei den JOINS auf nur eine Spalte oder wie?

Nein, die WHERE-Bedingungen sind das, was viel Resourcen frisst. Achte darauf, das in den WHERE-Clause Spalten drin sind, die einen Index haben. Das ist Datenbank-Modellierung. Es gibt diverese Indizes, die man auf eine Tabelle resp. Spalte legen kann (PRIMARY, UNIQUE, FULLTEXT, etc).

Auch hier die Frage, was genau ist ein MVC-Konzept?

Wie der Vorposter schon andeutete, wird das MVC von diversen Frameworks unterstützt. Es handelt sich dabei um eine Strategie, Geschäftslogik (Controller) von Persistenz (Model) und Visualisierung (View) zu trennen.
 
Zuletzt bearbeitet:
Zurück