Performance: Object serialisieren und in/aus Datei speichern/lesen

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

  • Performance: Object serialisieren und in/aus Datei speichern/lesen

    Hallo!

    Ich habe eine Settings-Tabelle in meiner MySQL DB und hole mir die Werte mit der Funktion getSettings($param).

    Momentan greift diese noch direkt auf die DB zu - sehr böse!

    Mein Plan:
    Settings komplett in ein Object/Array laden, dieses serialisieren und in eine Datei speichern.

    Beim aufruf von getSettings($param) wird nun zunächst in der Datei gesucht, welche alle $x Stunden neu erstellt wird.

    Normalerweise würde ich so ein Problem mit Memcache lösen, aber leider ist dieses Modul nicht bei jedem Provider verfügbar.

    Was haltet ihr davon? Wie performant ist dieser Weg?

    Lg
    Lasst euch nicht lumpen, hoch den Humpen!

  • #2
    Re: Performance: Object serialisieren und in/aus Datei speichern/lesen

    Original geschrieben von carapau
    Sehr böse!
    Warum?


    Original geschrieben von carapau
    Beim aufruf von getSettings($param) wird nun zunächst in der Datei gesucht, welche alle $x Stunden neu erstellt wird.
    Wozu?

    Ich versteh echt nicht, wozu das gut sein soll

    Kommentar


    • #3
      Re: Performance: Object serialisieren und in/aus Datei speichern/lesen

      Original geschrieben von carapau
      Hallo!

      Ich habe eine Settings-Tabelle in meiner MySQL DB und hole mir die Werte mit der Funktion getSettings($param).

      Momentan greift diese noch direkt auf die DB zu - sehr böse!
      Nein, sehr gut!

      Original geschrieben von carapau
      Mein Plan:
      Settings komplett in ein Object/Array laden, dieses serialisieren und in eine Datei speichern.

      Beim aufruf von getSettings($param) wird nun zunächst in der Datei gesucht, welche alle $x Stunden neu erstellt wird.
      Sehr böse!

      Kommentar


      • #4
        Ich möchte nicht, dass jedes Mal auf die DB zugegriffen wird. Wenn man sich überlegt, dass pro Seitenaufruf ca. 10-15 Settings geladen werden... das sind 10-15 Anfragen, die ich vermeiden möchte.

        Im Einzelnen ist das natürlich kein Problem, aber so ist ruck zuck das Limit der max. Connections erreicht.

        Deshalb am Anfang das Array/Objekt aus der Datei holen und anschließend drauf zugreifen.

        Könnt ihr damit was anfangen?
        Lasst euch nicht lumpen, hoch den Humpen!

        Kommentar


        • #5
          Original geschrieben von carapau
          Ich möchte nicht, dass jedes Mal auf die DB zugegriffen wird. Wenn man sich überlegt, dass pro Seitenaufruf ca. 10-15 Settings geladen werden... das sind 10-15 Anfragen, die ich vermeiden möchte.
          Das ist Micro-Optimierung, und die bringt ganz selten etwas. Dazu hab ich neulich auch was gebloggt (bzw. auf ein anderes Blog verwiesen): http://phphacker.net/2009/03/11/waru...roduktiv-ist/.

          Und 10-15 Queries pro Request sind erstmal gar nichts. Ich kenne Anwendungen, die fahren weit über 200 Queries pro Request. Bevor du serialisierst und in Dateien schreibst (warum dann eigentlich noch Serialisieren?) könntest du dir vielleicht überlegen, die Settings immer komplett auszulesen (wenn es nicht grade mehrere MB sind). Wenn das auch nichts bringt, greif doch auf die Caching-API des Zend Frameworks zurück. Das ist dann auch noch schön gekapselt und austauschbar.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Original geschrieben von carapau
            Ich möchte nicht, dass jedes Mal auf die DB zugegriffen wird. Wenn man sich überlegt, dass pro Seitenaufruf ca. 10-15 Settings geladen werden... das sind 10-15 Anfragen, die ich vermeiden möchte.
            Du kannst auch alle Settings auf einmal laden, dann ist es nur eine Abfrage.

            Kommentar


            • #7
              Was sind das denn für Settings? Basiseinstellungen würde ich lieber in eine <beliebiges Format>-Datei legen, z.B. INI, XML, YAML.

              Kommentar


              • #8
                Original geschrieben von PHP-Desaster
                Was sind das denn für Settings? Basiseinstellungen würde ich lieber in eine <beliebiges Format>-Datei legen, z.B. INI, XML, YAML.
                Das sind beliebige Settings. Die wichtigsten Daten sind in einer Config-Datei. Ich hab alles modular aufgebaut und diese Funktionen bieten die Möglichkeit, ähnlich wie bei Wordpress, eigene Settings anzulegen/auszulesen.

                Hab mir auch schon überlegt diese Daten als Array in eine Config Datei schreiben zu lassen. Dann muss ich nichts serialisieren und kann direkt auf ein globales Array zugreifen.
                Lasst euch nicht lumpen, hoch den Humpen!

                Kommentar


                • #9
                  Original geschrieben von carapau
                  Das sind beliebige Settings. Die wichtigsten Daten sind in einer Config-Datei. Ich hab alles modular aufgebaut und diese Funktionen bieten die Möglichkeit, ähnlich wie bei Wordpress, eigene Settings anzulegen/auszulesen.

                  Hab mir auch schon überlegt diese Daten als Array in eine Config Datei schreiben zu lassen. Dann muss ich nichts serialisieren und kann direkt auf ein globales Array zugreifen.
                  Globales Array ist pfui. Hier könnte jeder Programmteil ungewollt das Config Array verändern oder überschreiben.

                  Kommentar


                  • #10
                    Original geschrieben von carapau
                    Ich möchte nicht, dass jedes Mal auf die DB zugegriffen wird. Wenn man sich überlegt, dass pro Seitenaufruf ca. 10-15 Settings geladen werden... das sind 10-15 Anfragen, die ich vermeiden möchte.
                    Du suchst möglicherweise sowas wie die sqlCache-Klasse:

                    http://www.phpclasses.org/browse/package/2646.html
                    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                    Kommentar


                    • #11
                      SQL cached selber schon automatisch. Warum nochmal zusätzlich cachen?

                      Kommentar


                      • #12
                        Original geschrieben von h3ll
                        SQL cached selber schon automatisch. Warum nochmal zusätzlich cachen?
                        Wie kann eine Abfragesprache "automatisch cachen"?
                        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                        Kommentar


                        • #13
                          Original geschrieben von fireweasel
                          Wie kann eine Abfragesprache "automatisch cachen"?
                          1. Abfrage:

                          SELECT * FROM person WHERE lastname LIKE 'Müller%'

                          MySQL durchsucht die gecacheten Queries, findet aber nix, also wird die Datenbank durchsucht und das Ergebnis geliefert, gleichzeitig wird das Ergebnis im Cache abgelegt.


                          2. Abfrage:

                          SELECT * FROM person WHERE lastname LIKE 'Müller%'

                          MySQL findet das Query im Cache und liefert sofort das bereits abgespeicherte Ergebnis.


                          Siehe:
                          http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

                          Hast du dich noch nie gewundert, warum komplexe Queries beim ersten mal so lange brauchen und ab dem zweiten mal flott erledigt werden?
                          Zuletzt geändert von h3ll; 01.04.2009, 16:22.

                          Kommentar


                          • #14
                            Original geschrieben von h3ll
                            (...) Hast du dich noch nie gewundert, warum komplexe Queries beim ersten mal so lange brauchen und ab dem zweiten mal flott erledigt werden? [/B]
                            Nein, aber ich wundere mich immer, wenn SQL und mySQL gleich gesetzt werden.
                            Ich hatte übersehen, dass der OP von " MySQL DB" schrub ...

                            Klingt trotzdem interessant, auch wenn der Query-Cache nicht in jedem Fall wie gedacht funktionieren zu scheint.

                            Gibt es eine sichere Möglichkeit, von PHP aus zu erkennen, ob der Query-Cache aktiv ist?
                            Oder muss ich jetzt das Handbuch nach einer API-Funktion abgrasen?
                            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                            Kommentar


                            • #15
                              Original geschrieben von fireweasel
                              Gibt es eine sichere Möglichkeit, von PHP aus zu erkennen, ob der Query-Cache aktiv ist?
                              Du hättest nur meinen Link anklicken müssen:

                              Code:
                              mysql> SHOW VARIABLES LIKE 'have_query_cache';
                              +------------------+-------+
                              | Variable_name    | Value |
                              +------------------+-------+
                              | have_query_cache | YES   |
                              +------------------+-------+

                              Kommentar

                              Lädt...
                              X