phpbar.de logo

Mailinglisten-Archive

AW: [php] sessions in separater db halten

AW: [php] sessions in separater db halten

Wolfgang Hauck php_(at)_phpcenter.de
Tue, 27 Aug 2002 16:57:19 +0200


>ich hab bereits vor einiger zeit ein auf meine bedürfnisse zugeschnittenes
>session-management programmiert mit user tracking usw. nun hab ich in den
>letzten tagen das ganze auf "register_globals=off"-kompatiblität (also php
>4.2.2 default settings) umgestellt, wobei ich mir die ganze struktur
>nochmals durch den kopf gehen hab lassen und auf folgende frage gestoßen
bin:

>mal davon abgesehen, dass es vielleicht verschwendung von speicherplatz
>ist... ist es sinnvoll, bzw ist es von nachteil (vor allem die performace
>betreffend), wenn ich meine sessiontabellen in einer separaten db (die
>jedoch am selben db-server liegt) halte?

>- was spricht dafür, was dagegen?

>- wie sollte ich bzgl performance am besten auf die session-db zugreifen?
>(ein eigenes mysql_select_db() für die session-db ausführen, oder über
>entsprechend gestaltete SQL commands - also z.b. select * from
>datenbank.tabelle - auf die session-db zugreifen?)

Hi Andy,

Ich kann dir hier an dieser Stelle eigentlich nur meine persönliche Meinung
wiedergeben. Meines Erachtens wird in den häufigsten Fällen der Fehler
gemacht überhaupt mit Sessions zu arbeiten. In den meisten Szenarien genügt
es eine dynamische Seite via Get oder Post auszuwerten um dem Client die
richtige Seite zu servieren. Normalerweise erfordern nur komplexe Anfragen
ein aktives Sessionmangement.

Im allgemeinen gilt:

Je weniger Session - Management desto mehr Performance (indirekte
Proportionalität).

Die Sessiontabellen in einer seperaten DB zu halten bringt i.d.R. fast
keinen Performanceverlust. Die einfachste Möglichkeit dies zu verwalten ist
eine allgemeine Klasse für deine allgemeinen Datenbankzugriffe zu erstellen
und diese dann mit deiner Session  - DB - Klasse zu erweitern
(Zugriffsdaten überschreiben, spezielle Session - Funktionen wie Register,
Serilisierungen usw.)

Einen Nachteil hat die Methode aber trotzdem. In dem oben beschriebenen
Fall wird ein zweiter Prozess eröffnet, was die Anzahl der gleichzeitig
möglichen offenen Clientverbindungen reduziert.

Du siehst, es gibt viele Möglichkeiten die Performance eines Projekts zu
erhöhen. Dazu gehört auch Server zu spiegeln, gute Hardware (schnelle
Festplatten, Multiprozessor Boards, schnelle Netzanbindung,
Ausfallsicherheit etc...), ein gut angepasstes Betriebssystem (Linux wär so
eines, aber ohne KDE auf Serverebene... ;-)) und letztendlich auch eine
gute Strukturierung des Projekts selbst.

Schlussbemerkung:

Es ist absolut sinnlos alle Seiten mit einem Sessionmanagement zu
verwalten, ob man dieses braucht oder nicht. Verwende dein Session -
Management nur wenn du es brauchst, aber dann effektiv. Das bringt dir mehr
Performancegewinn als Ameisenzählen im Quellcode.

Frage eines Auswärtigen:

Was ist schneller, Auto - oder öffenliche Verkehrsmittel?

Antwort eines Einheimischen:

Wenns di auskennst kimmts auf'd Uhrzeit an, wenn net, dann schaffts das nie
!!

MFG Wolfgang


php::bar PHP Wiki   -   Listenarchive