Sessions im RAM?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
arbeitsspeicher
beispiel
code
datei
datenbank
datum
frage
glauben
helfen
http
lernen
machen
problem
projekt
sagen
session
sprache
system
url
zeile
-
Sessions und die ganzen anfallenden Session Daten etc, werden ja in ner Session Datei (bzw mehreren..) gespeichert.
Gut, letzens hatten ich und ein Freund drüber diskutiert ob nun C# auf asp.net besser als PHP ist um ne community zu realiseren.
Seine Argumente waren hauptsächliche die Objekte und Klassen von C#. Da diese eben im RAM gespeichert sind, und somit das C# programm nicht bei jedem klick den der user macht auf die session datei und ggf auch auf die Datenbank zugreifen muss, wird das ganze natürlich schneller ausgeführt als in PHP.
Nun meine Frage, ist es irgendwie zu realisieren das die Session Daten nicht auf die Festplatte geschrieben werden, sondern einfach solange im RAM bleiben bis sie nicht mehr gültig sind? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Na, ich glaube, da hast du etwas falsch verstanden, glaube ich.
1. PHP speichert Session glaube ich auch mal im RAM, wenns nicht zu viele auf einmal sind.
2. Villeicht werden C#-Objekte auf die Festplatte ausgelagert.
Immerhin, der Arbeitsspeicher, auf den man mit C(#) zugreift ist ja nicht der RAM, sondern nur ein virtuelles System, dass villeicht auf der Festplatte liegt.
Und:
3. A Problem is a problem when it is a problem:
Mache dir keine Sorgen, über die Geschwindigkeit des Zugreundeliegenden Systems oder Frameworks. Du wirst in drei tagen keine Millionenkommunity haben. Mach dir lieber über Optimierung in wichtigeren Punkten Gedanken. (Zum Beispiel im Datenbankdesign.) -
1. ich bin mir zimlich sicher das PHP sessions in Dateien ablegt
2. und eben der besagte freund von mir (der bereits eine community hat, und diese zuzeit auf c# umstellt) besucht i-welche C# kurse, deshalb vermute ich das er sich damit auskennt, und er behauptet felsenfest, C# speichere Datein im RAM und PHP nicht ;)
und meine Frage war ja auch eher eine theoretische, da ich eig nicht vorhabe ne eigene community zu programmieren xD
es würd mich nur einfach interessieren, ob das irgendwie realisierbar wäre, is ja immer interessant neues zu lernen :D
und zu deinem punkt 3: noch besser, es entstehen gar keine probleme, bzw man löst sie schon von anfang an. -
1. Das kann sein. Villeicht habe ich da was falsches gesagt. Aber es kann auch anders sein, wo hast du das gelesen?
2. Ich glaube dass kann er ohne eindringliches Studieren der Arbeitsspeicherverteilung der einzelnen Systeme nicht einfach "wissen". Ich sag ja: Arbeitsspeicher wird ausgelagert auf die Festplatte. Und da bin ich mir nicht sicher, ob das alles im RAM bleibt. Man stelle sich vor: Ich lade mit einer Klasse zwei Gigabyte Daten in den Arbeitsspeicher. Wenn ich 512 MB RAM habe, willst du mir nicht erzählen, dass die da rein passen. Sei dir da also gar nicht sicher. Selbes gilt für erstens.
3. FALSCH!
1 2
Wenn ich Programmiere schreibe ich ja auch
int hallo;
hallo = 0;
statt
hallo ^= hallo;
Wow, es wäre um Bruchteile schneller und wäre villeicht um ein Byte kleiner (obwohl das beides bei kompiliertem Code fragwürdig ist. Is ja kein Assembler...)
Man soll sich keine Sorgen über Probleme machen, die man nicht hat und die auch nicht schnell auftauchen werden. -
1. hat mir wiederum besagter freund von mir erklärt
2. okay, aber ich vermute er meinte das generel im RAM ist, also eine 2MB klasse in nem 2GB RAM ;)
3. da stell ich mir dann aber die frage: lieber gleich (hausnummer)10 zeilen mehr schreiben und das ganze programm an die 10 zeilen anpassen, oder später die 10 zeilen schreiben und das halbe programm umschreiben. -
1. Okey, das kann durchaus sein. Sessions werden in Dateien gespeichert.
2. Ach, okey :D
3. Nun. Der aktuelle Schritt ist wichtig, die Wahl der Programmiersprache. Das bezweifle ich nicht. Du solltest dich dabei aber nicht nach der Performance dieser Sprache richten, sondern wie gut du sie kannst oder wie gut du sie findest. Die Performance ist ein Problem, das besteht, mit welchem du aber NIE konfrontiert werden wirst. Zumindest glaube ich nicht daran. PHP ist eine langsame Sprache, allein weil es eine Scriptingsprache ist. Das bezwefelt keine. Ob Sessions da das richtige Kriterium sind, ist fragwürdig. Aber für deine Zwecke macht das absolut keine unterschiede. Du renderst damit ja keine koplexen dreidimensionalen Grafiken á la ray-tracing. Du hast "nur" ein Forum. Also: Richte dich danach was du kannst und magst, nicht daran, was schneller ist.
3. Zweiteres. Weißt du. Ich habe mal für ein Projekt die Frage gehabt, was besser sei MyISAM oder InnoDB. Ich habe den Fehler gemacht, ich habe mich stundenlang durch Google, Blogs, usw. geforstet, immer andere Ansichten. Habe mich für InnoDB entschieden. Was hats gebracht: gar nichts. Investiere die zeit lieber in sinnvolle Optimierung im Bereich Datenbank, sowie in deinem Scripts, aber halt an sinnvoller Stelle.
Ich formuliere deine Frage (extremal) um:
Soll ich lieber erstmal zehn Stunden überlegen und das Projekt anders, meist unbequemer für den Programmierer, aufbauen um einen minimalen Performancegewinn zu erhalten, denkeiner merkt, außer ich, da ich einen Benchmark gemacht habe, oder soll ich mein Projekt bequem umsetzen mit minimalem Performanceverlust, den keiner merkt, und die Zeit nutzen um das Projekt sinnvoll zu erweitern und erst dann die letzte Performance rauskitzeln, wenn dies auch nötig ist? -
1,2: :D
3: okay, langsame Sprache, schön und gut, darum kann man ja versuchen noch langsamere aspekte von PHP ein wenig schneller zu gestalten (und der zugriff auf den RAM ist nunmal schneller als auf die Festplatte).
und bei einer community wird oft auf die session dateien zugegriffen, da einfach eine hohe akitivät herscht und ständig variablen geändert, ausgelesn oder neue hinzugefügt werden. deswegen macht es, meiner meinung nach, schon sinn, sich eine lösung für solcherlei probleme zu suchen.
Ich sage jtz ja nicht, das man das schon von vorneherein machen muss/soll, es würde mich persönlich aber trotzdem interessieren, obwohl ich nicht vorhabe eine community zu programmieren, oder ein größeres projekt wo derlei maßnahmen nötig wären.
Also bleibt meine Frage offen, ob sich soetwas umsetzen lassen würde - rein theoretisch. :) -
Ah, okey... dann hab ich wohl die Fragestellung missverstanden...
Okey. Das zu lösen ist nicht wirklich einfach. Man könnte nur die Anzahl der Daten, die man in der Session speichert, verringern.
Zum Beispiel nur eine Session starten, als Online-Status. Den Rest schreibt man in eine Datenbank. MySQL cacht die Daten, wenn Platz verfügbar, im RAM. Sessions jedoch einfach mal ins RAM auszulagern, wird wohl ohne Änderungen an PHP selbst nicht gehen. Es gibt eine Funktion mit der man den Speicherort ändern kann, aber mehr nicht, afaik... -
Hmm, hier vielleicht noch ein Vorschlag zur Güte:
Wenn man sich schon solche Gedanken um Performanz und um Datenhaltung auf dem Heap macht, dann hat man ja bestimmt die dicke Hardware darunter. Also irgendwo so im 16+ GB RAM-Bereich.
Warum zwackt man hiervon nicht ein bisschen ab, zum Beispiel 2 GB, und mountet diese als RAM-Disk und bitte PHP höflich darum, seine tmp und session Dateien auf eben dieser RAM-Disc abzuspeichern.
So gehst du auch nicht über das HDD.
Wobei nikic natürlich Recht hat: Früher oder später wird geswappt, und dann landet eh alles auf dem HDD. -
naja, wie gesagt, war nur eine eher theoretische frage ;)
aber is trotzdem eine interessante idee -
freezinger schrieb:
anscheinend =D
okay, das beantwortet meine Frage ^^
dann also doch C# lernen und flotschi helfen
Naja, ich sag dir: Wenn du mit PHP besser zurecht kommst, als mit ASP.NET / C# dann nutze lieber das. Wenn man neu in einer Sprache ist, dann wird das Ergebnis sowiso ineffektiver, einfach, weil mans nicht beherrscht. gegen das lernen von C# spricht das natürlich nicht :D
@census: Geht das? [Cool...] -
nikic schrieb:
freezinger schrieb:
anscheinend =D
okay, das beantwortet meine Frage ^^
dann also doch C# lernen und flotschi helfen
Naja, ich sag dir: Wenn du mit PHP besser zurecht kommst, als mit ASP.NET / C# dann nutze lieber das. Wenn man neu in einer Sprache ist, dann wird das Ergebnis sowiso ineffektiver, einfach, weil mans nicht beherrscht. gegen das lernen von C# spricht das natürlich nicht :D
@census: Geht das? [Cool...]
Jo, das geht so:
mount -t tmpfs none mountpoint
oder in die fstab:
none /media/tmpfs tmpfs default,size=50% 0 0
und dann
mount -a
Beitrag zuletzt geändert: 9.8.2009 23:52:45 von census -
@nikic: ich wollt so und so schon länger C# lernen, zwar eher weniger für Webanwendungen, aber Grundlagen sind die gleichen (in die hab ich mich mittlerweile schon ein bisschen eigelesen) und ja, ich werd mich dann eben mehr auf Webanwendungen spezialisieren (da mein späteres berufliches ziel in die richtung webdevelopment und webdesign geht, wieder nur ein vorteil)
-
hat hier jemand etwas übersehen?
erste lösung: nach 'chris shiflett: essential php security', (isbn 0-596-00656-x, S. 77.ff.) googlen (geht in die datenbank, ist ca. 30-fach schneller);
zweite lösung: hier im forum nach memcache suchen;
dritte lösung (die ofizielle): http://us3.php.net/manual/en/book.memcache.php
dazu noch: http://pecl.php.net/package/memcache
und dann bleibt alles im RAM.
also so unflexibel ist php anscheinen wohl doch nicht ;o)
-
So viel Text ^^"
Ich würde die Unterschiede erstmal woanders suchen.
ASP kann von Haus aus den OpCode cachen. PHP kann dies aktuell nur mit Extensions bzw. ab PHP 5.3 liegt die APC Ext standartmäßig dabei. Aber selbige muss soviel ich weiß explizit verwendet werden.
2MB große Klassen in der Session/Cache zu halten ist ein sehr schlechtes Design. Allein bei 1.000 gleichzeitig aktiven Nutzen hätte man bereits eine Auslastung von ca 2GB nur an Cache/Sessiondaten. Und dabei ist es egal ob es sich um Php oder .net oder jsp oder andere Technologien handelt. Sessiondaten sollten immer so klein wie nur irgend möglich gehalten werden.
Was einem eventuell auch an ASP binden kann sind die Backend Tools die einem zur Verfügung stehen. Auf der Gegenseite hat PHP auf einem Linux System auch nicht zu verachtende Möglichkeiten.
Ich würde jetzt mal sagen das es ganz darauf an kommt was du mit deinem Community-System eigentlich machen willst. Für ein einfaches System reicht PHP auf jeden Fall aus. Und selbst bei größeren Projekten wie StudiVZ das bekanntlich auch auf PHP aufsetzt für das Frontend ist es gut, allerdings sollten dann die PHP Fähigkeiten entsprechend gereift sein. Und im Hintergrund laufen nicht selten noch andere Technologien die das Frontend füttern. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage