PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : richtige Programmstruktur



h2o471
25-05-2007, 14:15
hallo alle miteinander,

ich werde im juni für meine kunden ein shopsystem zur verfügung stellen. es ist soweit fertig, ich überlege nur ob ich die struktur ändern soll um es leichter wartbar zu machen.
1. fall
im moment meldet ein neuer user einen shop an und ich lege für ihn eine datenbank an (enthält nur 4 tabellen), und erstelle ihm in dem hauptordner einen ordner mit seinen programmdateien. Dh. ich kann die einzelnen shops genau an die user anpassen wenn diese es wünschen. jetzt hab ich mir folgende frage gestellt:
kann ich vielleicht die ganzen kleinen datenbanken zusammenlegen? ich würde dann statt der "tbl_artikel" die "tbl_[username]_artikel" haben. mit welcher variante habe ich die beste performance?

2. fall
angenommen ich würde die ganzen user in nur einen ordner leiten und entsprechend der $_SERVER['HTTP_HOST']; verschiedene spezifische werte und tabellen aufrufen? wie siehts da mit der performance aus. vom standpunkt der wartbarkeit wärs ja ein riesensprung. :-)
im ersten durchgang bis september erwarte ich um die 50 kunden.

bis dann und danke für eure hilfe
grüße aus heidelberg
mirko jerschabek

jan61
28-05-2007, 23:52
hallo alle miteinander,

ich werde im juni für meine kunden ein shopsystem zur verfügung stellen. es ist soweit fertig, ich überlege nur ob ich die struktur ändern soll um es leichter wartbar zu machen.
1. fall
im moment meldet ein neuer user einen shop an und ich lege für ihn eine datenbank an (enthält nur 4 tabellen), und erstelle ihm in dem hauptordner einen ordner mit seinen programmdateien. Dh. ich kann die einzelnen shops genau an die user anpassen wenn diese es wünschen. jetzt hab ich mir folgende frage gestellt:
kann ich vielleicht die ganzen kleinen datenbanken zusammenlegen? ich würde dann statt der "tbl_artikel" die "tbl_[username]_artikel" haben. mit welcher variante habe ich die beste performance?

2. fall
angenommen ich würde die ganzen user in nur einen ordner leiten und entsprechend der $_SERVER['HTTP_HOST']; verschiedene spezifische werte und tabellen aufrufen? wie siehts da mit der performance aus. vom standpunkt der wartbarkeit wärs ja ein riesensprung. :-)
im ersten durchgang bis september erwarte ich um die 50 kunden.

bis dann und danke für eure hilfe
grüße aus heidelberg
mirko jerschabek

Zum Fall 1: Jeder Kunde hat ja nach wie vor seine eigenen Tabellen - das sollte eigentlich keinen Unterschied machen, die Frage ist nur, ob das DBMS (welches denn?) besser mit mehreren DBs oder einer großen DB skaliert. Das lässt sich IMHO nicht so allgemein beantworten. Folgende Parameter solltest Du u. a. bestimmen:
a) wie viele Artikel / Kunden / Aufträge / Positionen erwartest Du?
b) wieviel RAM hat Dein DBMS zur Verfügung?
c) Wie läuft das Caching in Deinem DBMS ab?
d) wie viele Anfragen / Aktualisierungen erwartest Du / Stunde und Kunde?
e) Hast Du eine homogene oder heterogene Kundschaft (gibt es 40 Kunden mit 10 Aufträgen / Tag und 2 mit 1000? Oder haben die alle ungefähr gleiches Auftragsaufkommen?)
Im Allgemeinen versuchen DBMS, so viele Daten (Tabellen) wie möglich in den RAM zu laden. Außerdem werden Anfragen so weit wie möglich im Cache vorgehalten, sowas erleichterst Du mit Prepared Statements (kann das Dein DBMS?).

Zu Fall 1 + 2: Ich würde mir hier eher Gedanken um Datensicherheit machen als um Performance und Wartbarkeit. Wie sicher ist die Abfrage per $_SERVER['HTTP_HOST']? Kannst Du garantieren, dass da kein Kunde in den Daten des (möglichen) Mitbewerbers rumschnüffelt? Wenn Du verschiedene Kunden in einer DB hast, dann musst Du penibel auf die Zugriffsrechte auf die DB-Objekte achten - Du kannst einfacher verschiedene DBs gegenseitig abschotten als Tabellen innerhalb einer DB.

Nur so als Denkanstoß - ohne genauere Infos über das zugrundeliegende DBMS und die Art und Weise, wie Du auf die Daten zugreifst (CGI? Servlets?, Prepared Statements? Connection-Pooling?...), ist eine halbwegs zuverlässige technische Bewertung eh nicht möglich.

Jan