Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] sqlite als session speicher?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von robo47 Beitrag anzeigen
    Wenn es schnell und Server-übergreifend funktionieren soll, man mit 1MB Limit leben kann und man damit leben kann dass wenn der zuständige Server mal abstürzt oder neu gestartet wird alle Sessions weg sind:

    memcached
    mit installierter Extions kommt sogar ein fertiger session_save-handler mit:

    String your php-sessions using memcached

    ansonsten gibt es noch 2 weitere über extensions unterstützte session-handler: msession und postgresql:
    PHP: Session-Erweiterungen - Manual
    huhu,

    ok, das wusste ich nicht, das memcache auch soetwas bietet. nur besteht da nicht die gefahr, das der speicher zu schnell voll läuft? naja ich werde mir mal die sqllite und die memcache lösung angucken. ich berichte euch dann was sich besser für meine zwecke einsetzen lässt

    @brian johnson
    danke!

    @all
    danke euch allen

    Kommentar


    • #17
      Naja, je nach einstellung von memcached kickt er entweder irgendwann alte einträge raus oder er bringt ne fehlermeldung.
      Man muss sich halt schon überleben wie viel RAM memcache braucht, ob man nicht gleich ne Kiste hinstellt die mit 4, 8 oder mehr GB RAM nur als memcache-server dient.
      robo47.net - Blog, Codeschnipsel und mehr
      | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

      Kommentar


      • #18
        Interessant wäre es zu wissen, welchen Umfang das Projekt haben wird. Wenn es nicht all zu groß ist, musst du dir über die Sperrung einer SQLite-Tabelle eher weniger Gedanken machen - die Zugriffe sind nämlich besonders beim Auslesen sehr schnell. Bis zu einer gewissen Projektgröße sind die Zugriffe sogar erheblich schneller als bei MySQL.
        Aber wenn du jetzt sagst, dass bei deinem Projekt wohl nie mehr als 100 Leute gleichzeitig online sind, kannst du das im Prinzip lösen wie du lustig bist. Um Performance musst du dir dann keine Gedanken machen. Kritisch wird so etwas erst dann, wenn wirklich sehr viele User auf einmal online sind.

        Bei SQLite wird halt die Tabelle bei jedem Zugriff gesperrt, dh es können nicht zwei Anfragen an eine Tabelle gleichzeitig gerichtet werden. Anders ist es bei Systemen, die nur die betroffene Zeile sperren. Aber man muss sich bei solchen Diskussionen immer vor Augen halten, dass wir hier über Millisekunden sprechen. Und sollten tatsächlich mal zwei Anfragen absolut zeitgleich eintreffen, ist das auch kein Problem! Die Performance leidet erst dann, wenn das zum Normalfall wird.
        ________
        lg, ramses

        Kommentar


        • #19
          Zitat von ramses Beitrag anzeigen
          Interessant wäre es zu wissen, welchen Umfang das Projekt haben wird. Wenn es nicht all zu groß ist, musst du dir über die Sperrung einer SQLite-Tabelle eher weniger Gedanken machen - die Zugriffe sind nämlich besonders beim Auslesen sehr schnell. Bis zu einer gewissen Projektgröße sind die Zugriffe sogar erheblich schneller als bei MySQL.
          Aber wenn du jetzt sagst, dass bei deinem Projekt wohl nie mehr als 100 Leute gleichzeitig online sind, kannst du das im Prinzip lösen wie du lustig bist. Um Performance musst du dir dann keine Gedanken machen. Kritisch wird so etwas erst dann, wenn wirklich sehr viele User auf einmal online sind.

          Bei SQLite wird halt die Tabelle bei jedem Zugriff gesperrt, dh es können nicht zwei Anfragen an eine Tabelle gleichzeitig gerichtet werden. Anders ist es bei Systemen, die nur die betroffene Zeile sperren. Aber man muss sich bei solchen Diskussionen immer vor Augen halten, dass wir hier über Millisekunden sprechen. Und sollten tatsächlich mal zwei Anfragen absolut zeitgleich eintreffen, ist das auch kein Problem! Die Performance leidet erst dann, wenn das zum Normalfall wird.
          da muss ich wiedersprechen, denn

          • es wird in eine session auch geschrieben, somit muss die tabelle den ganzen request gesperrt bleiben
          • es geht nicht immer um die anzahl der user, sondern in zeiten von Ajax (und bildgenerierung) auch um konkurrierende zugriffe eines users (zeilensperren helfen hier, "nur" den aktuellen user warten zu lassen).


          so kommst du schnell an die grenzen von tabellensperren.
          PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
          Suse 11.2 *vorfreude*

          Kommentar


          • #20
            huhu,

            also ich hab nun 2 sache ausgetestet.
            dem memcache und sqlite. zu erst sqlite:5 refreshs und dann kam die meldung: database is locked....

            super weg damit

            dann memcache. erster eindruck, sehr geil. aber als ich dann ein kleines objekt gespeichert hatte, mal so zum testen. 2 eigenschaften, sonst nix und mir dann den benutzen ram zeigen lies, zeigte er umgerechnet 5kb ram an. ohne memcache nicht mal 1 kb.

            auch weg

            deswegen werde ich erstmal bei mysql bleiben aber mich nochmal mit dem dateisystem auseinander setzten.

            Kommentar


            • #21
              Zitat von DarkPrisma Beitrag anzeigen
              huhu,

              also ich hab nun 2 sache ausgetestet.
              dem memcache und sqlite. zu erst sqlite:5 refreshs und dann kam die meldung: database is locked....

              super weg damit
              wie prophezeit

              Zitat von DarkPrisma Beitrag anzeigen
              dann memcache. erster eindruck, sehr geil. aber als ich dann ein kleines objekt gespeichert hatte, mal so zum testen. 2 eigenschaften, sonst nix und mir dann den benutzen ram zeigen lies, zeigte er umgerechnet 5kb ram an. ohne memcache nicht mal 1 kb.

              auch weg
              was genau meinst du hier?
              PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
              Suse 11.2 *vorfreude*

              Kommentar


              • #22
                PHP-Code:
                <?php
                include('Benchmark.Class.php');
                $benchmark = new MKLF\System\Engine\Benchmark();
                $benchmark->ResetTimer();
                $benchmark->DoBenchmark('Con'2);

                $memcache = new Memcache();
                $memcache->connect('localhost'11211) or die ("Could not connect");

                $benchmark->DoBenchmark('Start'2);

                $tmp_object = new stdClass();
                $tmp_object->str_attr 'test';
                $tmp_object->int_attr 123;

                $memcache->set('key'$tmp_object) or die ("Failed to save data at the server");

                $get_result $memcache->get('key');

                $benchmark->DoBenchmark('Ende'2);
                $benchmark->ResetTimer();
                Con: 0.0782 (0.0782) KB-Ram
                Start: 5.086 (5.007 KB-Ram
                Ende: 13.9454 (8.8594) KB-Ram
                finde ich ganz schön viel

                Kommentar


                • #23
                  Zitat von DarkPrisma Beitrag anzeigen
                  PHP-Code:
                  <?php
                  include('Benchmark.Class.php');
                  $benchmark = new MKLF\System\Engine\Benchmark();
                  $benchmark->ResetTimer();
                  $benchmark->DoBenchmark('Con'2);

                  $memcache = new Memcache();
                  $memcache->connect('localhost'11211) or die ("Could not connect");

                  $benchmark->DoBenchmark('Start'2);

                  $tmp_object = new stdClass();
                  $tmp_object->str_attr 'test';
                  $tmp_object->int_attr 123;

                  $memcache->set('key'$tmp_object) or die ("Failed to save data at the server");

                  $get_result $memcache->get('key');

                  $benchmark->DoBenchmark('Ende'2);
                  $benchmark->ResetTimer();
                  finde ich ganz schön viel
                  du beschwerst dich also, das dein php-script durch die memcache klasse 13kb belegt? sorry, aber das ist ein fliegenschiss....
                  PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
                  Suse 11.2 *vorfreude*

                  Kommentar


                  • #24
                    wenn man das mal der anzahl an user nimmt, die darauf zugreifen, so 400-1000 ist das nicht ohne. php soll ja nicht den ganzen speicher für sich verbrauchen...

                    Kommentar


                    • #25
                      Zitat von DarkPrisma Beitrag anzeigen
                      wenn man das mal der anzahl an user nimmt, die darauf zugreifen, so 400-1000 ist das nicht ohne. php soll ja nicht den ganzen speicher für sich verbrauchen...
                      mach php aus, dann belegt es ueberhaupt keinen speicher

                      13kb * 1000 user = 13000kb = 13MB......
                      PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
                      Suse 11.2 *vorfreude*

                      Kommentar


                      • #26
                        ach man ich hasse es wenn du recht hast... war wohl zu spät ich hab kb mit mb verwechselt

                        na gut dann ist es wohl noch tragbar. was mich nur stuzig macht ist die aussage, das, obwohl man bei dem memcache die dauer auf 0 stellt, der die einträge trotzdem irgendwann von selbst löscht. würde gerne mal wissen, welche kriterien erfüllt sein müssen, damit er den speicher freiräumt. wäre nicht witzig, wenn der die session plötzlich killt und dann z.B. der warenkorb leer ist.

                        Kommentar


                        • #27
                          Zitat von DarkPrisma Beitrag anzeigen
                          ach man ich hasse es wenn du recht hast... war wohl zu spät ich hab kb mit mb verwechselt
                          ts, ts, ts

                          Zitat von DarkPrisma Beitrag anzeigen
                          na gut dann ist es wohl noch tragbar. was mich nur stuzig macht ist die aussage, das, obwohl man bei dem memcache die dauer auf 0 stellt, der die einträge trotzdem irgendwann von selbst löscht. würde gerne mal wissen, welche kriterien erfüllt sein müssen, damit er den speicher freiräumt. wäre nicht witzig, wenn der die session plötzlich killt und dann z.B. der warenkorb leer ist.
                          da muessen wir auf den meister robo warten....
                          PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
                          Suse 11.2 *vorfreude*

                          Kommentar


                          • #28
                            *RE*

                            Also meines Wissens nach sieht das bei memcached so aus:

                            1) alles was 30 Tage weder gelesen noch geschrieben wurde wird automatisch gelöscht (längere zeiten kann memcached nicht)
                            -> FAQ - memcached - Frequently Asked Questions - Project Hosting on Google Code
                            2) wenn der festgelegte speicherbereich voll ist und neue daten geschrieben werden sollen, werden alte daten gekickt um platz zu schaffen (ausser man hat das löschen von daten beim voll werden deaktiviert)
                            -> FAQ - memcached - Frequently Asked Questions - Project Hosting on Google Code
                            robo47.net - Blog, Codeschnipsel und mehr
                            | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

                            Kommentar

                            Lädt...
                            X