Sessions oder SQL?

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

  • Sessions oder SQL?

    Ich arbeite gerade an einer Anwendung mit einem Login-System. Die Userprofile sind in der Datenbank gespeichert etc., wie das eben üblich ist.

    Jetzt habe ich zwei Möglichkeiten, einen User wiederzuerkennen:
    Die eine ist, nur die ID in der Session zu speichern und anhand dieser ID bei jedem Seitenaufruf eine SQL-Query durchzuführen, die die restlichen Daten holt.
    Die andere ist, nur eine Query beim Login durchzuführen und das ganze Profil in der Session zu speichern.

    Was sollte ich nehmen?
    Zuletzt geändert von Malachite; 01.01.2012, 15:40.

  • #2
    So wie du die Frage gestellt hast, ist dir jetzt schon zu 100% klar, dass nur Lösung A die richtige sein kann.
    Wir werden alle sterben

    Kommentar


    • #3
      Und wieso? Sessions werden doch im Gegensatz zu Cookies auf dem Server gespeichert? Ist das nicht performanter, wenn das Profil schon vorhanden ist (session_start() muss ja sowieso ausgeführt werden)?

      Kommentar


      • #4
        Das mag performanter sein, ist aber auch die dümmste aller Lösungen.

        Denn:
        Wie willst du den User umtaufen können, wenn der Name in Session steht?
        Wie willst du ihm andere Rechte verpassen können?
        Soll der von dir gebannte Troll bis zu seinem logout aktiv sein dürfen?
        Wir werden alle sterben

        Kommentar


        • #5
          Stimmt, das habe ich nicht bedacht

          Dann eben doch jedesmal SQL-Queries.

          Kommentar


          • #6
            Wenn Performance irgendwann zum Bottleneck wird, kann man aber auch einfach einen Zeitstempel in der Session speichern, und nur alle paar Minuten die Daten mal aus der Datenbank neu laden.

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Zitat von ghostgambler Beitrag anzeigen
              Wenn Performance irgendwann zum Bottleneck wird, kann man aber auch einfach einen Zeitstempel in der Session speichern, und nur alle paar Minuten die Daten mal aus der Datenbank neu laden.
              Eine Session ist kein Cache und sollte nicht als solches missbraucht werden. Wenn du cachen willst, dann nimm einen richtigen Cache. Der erfüllt diese Aufgabe auch noch viel besser.

              Übrigens: Die Datenbank selber hat bereits einen eingebauten Cache.

              Und wenn eine einfache Benutzerabfrage bereits die Datenbank in die Knie zwingt, dann hast du viel ernsthaftere Probleme als die Entscheidung, wohin du Userdaten speichern sollst.
              Zuletzt geändert von h3ll; 15.01.2012, 01:16.

              Kommentar


              • #8
                Warum sollte eine Session nicht als Cache missbraucht werden?

                Es geht nicht um eine einfache Benutzerabfrage, sondern ggf. um ein paar tausend Abfragen, die über Netzwerk-Schnittstelle, zum DB-Server, dort ausgewertet, und das Ergebnis zurück geschaufelt werden muss.
                Ein pauschales Nein an der Stelle ist Quatsch und wenn das deine Ansicht ist, dann mag das so sein, ich teile sie nicht und ich kann sie ebenso belegen wie du vielleicht deine Ansicht belegen kannst.

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Zitat von ghostgambler Beitrag anzeigen
                  Warum sollte eine Session nicht als Cache missbraucht werden?
                  Weil eine Session ein Speicher für Sitzungsdaten ist und kein Cache.

                  Zitat von ghostgambler Beitrag anzeigen
                  Es geht nicht um eine einfache Benutzerabfrage, sondern ggf. um ein paar tausend Abfragen, die über Netzwerk-Schnittstelle, zum DB-Server, dort ausgewertet, und das Ergebnis zurück geschaufelt werden muss.
                  Ein pauschales Nein an der Stelle ist Quatsch und wenn das deine Ansicht ist, dann mag das so sein, ich teile sie nicht und ich kann sie ebenso belegen wie du vielleicht deine Ansicht belegen kannst.
                  Es ist aber falsch. Eine Session ist kein Cache. Warum wehrst du dich dagegen einen richtigen Cache zu verwenden?

                  Wenn übrigens die vielen Abfragen das Problem sind, warum arbeitest du nicht daran? Warum die Symptome bekämpfen und nicht die Ursache?
                  Zuletzt geändert von h3ll; 15.01.2012, 16:04.

                  Kommentar


                  • #10
                    Warum soll ich extra einen Cache einrichten, wenn ich ein paar Benutzerangaben auch einfach in die Session legen kann? Bisschen Pragmatismus bitte.
                    Da ist PHP inhärent schäbiger programmiert, als dass mit dieser Semantik-Umbiegung noch viel an Sinn den Bach runter gehen würde.
                    Mal abgesehen davon, dass es einfach keinen Mehrwert bietet, extra einen Cache einzurichten. Eher im Gegenteil. Der Overhead der benötigt wird, um den Cache zu verwalten, macht den Vorteil ggf. schon wieder zunichte. Die Session wird so oder so geladen und ob nun 1kb oder 2kb Daten drin stehen ist irrelevant.

                    Bei einer vollkommen dynamischen Website ist es nicht unrealistisch, dass ich bei jedem Seitenaufruf die Daten des Benutzers brauche. Also bei jedem Seitenaufruf ein Query für den Benutzer. Bei ein paar Tausend Nutzern pro Minute ein paar Tausend Queries pro Minute. Soll ich den Nutzern nun sagen, sie sollen die Website weniger oft aufrufen?

                    Ich sage ja nicht, dass es für jeden Fall sinnig ist die Session als Cache zu verwenden, aber ein pauschales niemals ist ebenso Quatsch. Wie so oft.

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Zitat von ghostgambler Beitrag anzeigen
                      Warum soll ich extra einen Cache einrichten, wenn ich ein paar Benutzerangaben auch einfach in die Session legen kann?
                      Ja, Benutzerangaben. Aber keine Datenbankergebnisse.

                      Zitat von ghostgambler Beitrag anzeigen
                      Da ist PHP inhärent schäbiger programmiert, als dass mit dieser Semantik-Umbiegung noch viel an Sinn den Bach runter gehen würde.
                      Mal abgesehen davon, dass es einfach keinen Mehrwert bietet, extra einen Cache einzurichten. Eher im Gegenteil. Der Overhead der benötigt wird, um den Cache zu verwalten, macht den Vorteil ggf. schon wieder zunichte. Die Session wird so oder so geladen und ob nun 1kb oder 2kb Daten drin stehen ist irrelevant.

                      Bei einer vollkommen dynamischen Website ist es nicht unrealistisch, dass ich bei jedem Seitenaufruf die Daten des Benutzers brauche. Also bei jedem Seitenaufruf ein Query für den Benutzer. Bei ein paar Tausend Nutzern pro Minute ein paar Tausend Queries pro Minute. Soll ich den Nutzern nun sagen, sie sollen die Website weniger oft aufrufen?
                      Nochmal: Wenn eine Abfrage pro Benutzer bereits die Datenbank in die
                      Knie zwingt, hast du ein viel größeres Problem. Denn in der Regel musst du pro Benutzer und pro Request mit mehreren zig bis hunderte Abfragen rechnen.

                      Für mich klingt das ganze nach Mikrooptimierung. Du verschwendest Zeit für die Optimierung von etwas, das sich in der Praxis nicht bemerkbar machen wird.

                      Zitat von ghostgambler Beitrag anzeigen
                      Ich sage ja nicht, dass es für jeden Fall sinnig ist die Session als Cache zu verwenden, aber ein pauschales niemals ist ebenso Quatsch. Wie so oft.
                      Dann ist es halt in 99,999% der Fälle Quatsch. Und in diesen einem Fall auch.

                      Kommentar


                      • #12
                        Mach wie du meinst und ich mach wie ich meine. Es gibt nicht auf alles die Antwort.

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Zitat von ghostgambler Beitrag anzeigen
                          Mach wie du meinst und ich mach wie ich meine. Es gibt nicht auf alles die Antwort.
                          Was du in deinem stillen Kämmerlein machst, bleibt dir überlassen. Aber erzähl im Forum, wo viele Anfänger mitlesen, irgendein Quatsch.

                          Kommentar

                          Lädt...
                          X