Wie groß sollte ein Array sein?

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

  • Wie groß sollte ein Array sein?

    Hi Leute,

    ich habe vor, aus einer größeren Datenbank die ID und dazu zwei Spaltenwerte in einem Array abzulegen. Dieses speichere ich für spätere Seitenaufrufe in einer Cache-Datei, damit ich nicht erneut die Suchroutine über die Datenbank bzw. zwei Tabellen laufen lassen muss.
    Auf diese Weise brauche ich nur noch
    $arrayname['id']
    aufzurufen, um
    array('spalte1' => 'wert1', 'spalte2' => 'wert2')
    zu bekommen, was sehr viel schneller geht, als in der Datenbank danach zu suchen.
    (die verwendeten Werte sind Stings mit durchschnittlich etwa 100 Zeichen)

    Doch wenn ich das realisieren würde, bekäme ich in meinem Fall ein Array (das auch noch zweidim. ist) mit über 10.000 Einträgen, die in Zukunft auch wohl noch um ein Mehrfaches steigen werden.

    Daher meine (ich hoffe doch berechtigte) Frage, wie groß ein Array sein SOLLTE, um den (ohnehin schon ausgelasteten) Server nicht allzusehr zu strapazieren?
    Oder mache ich mir da grundlos Sorgen, weil ich hunderte solche Arrays verwenden könnte, ohne in irgendeiner Weise etwas zu merken (wäre schön)???

    Dann "stürmt" mal euer Hirn
    Zuletzt geändert von Maranello-550; 25.06.2005, 17:39.
    arrays sind klasse

  • #2
    Du machst ein SELECT * FROM tabelle WHERE bla, ziehst das Resultset in einen Array, speicherst diesen (serialisiert oder sonstwie) in einer Datei um beim nächsten Aufruf des Scripts nicht auf die DB zu müssen sondern das Resultset aus der Datei wieder zu verwenden? Ist das korrekt?

    Wenn es bei jedem Aufruf immer die selbe Query ist, merkt das ein DB-Server und liefert dir das Resultset aus dem eigenen Cache. Wenn dein DB-Server so ein Caching betreibt, solltest du es nicht mit PHP nachbauen - du kannst es garantiert nicht schneller.

    Und auch sonst bezweifle ich, dass du mit dem Einlesen des Cachefiles schneller bist. Mach doch mal eine Messung.

    Kommentar


    • #3
      Hallo,

      das result wird in etwa so abgespeichert:
      PHP-Code:
      $sql mysql_query('SELECT ... ');
      while (
      $row mysql_fetch_assoc($sql))
      {
         
      $array['id'] = array('spalte1' => $row['spalte1'], 'spalte2' => $row['spalte2']);

      Anschließend mit fopen() etc. in einer php-Datei via var_export() gespeichert.

      Wenn es bei jedem Aufruf immer die selbe Query ist, merkt das ein DB-Server und liefert dir das Resultset aus dem eigenen Cache.
      Nein, ist es nicht. Ich müsste an mehreren Stellen meines Skipts dynamisch bestimmte IDs aus der Datenbank selectieren, um so einen bestimmten gesuchten Wert bzw. zwei Werte herauszufinden.

      Anstatt 100mal einen Query dieser Art
      SELECT spalte1, spalte2 FROM table WHERE id = $id ...
      über die Datenbank laufen zulassen, fand ich es sinnvoller alle gewünschten Daten EINMAL aus der Datenbank zu holen, die Daten zu ordnen und abschließend für zukünftige Seitenaufrufe abzuspeichern.

      Doch sollte ich das auf diese Weise auch tun?
      Ist das Array zu groß für eine sinnreiche Anwendung?
      arrays sind klasse

      Kommentar


      • #4
        Nur noch zur Erwähnung wie ich auf diesen Ansatz kam:
        In der bekannten phpBB-Forensoftware wird ebenfalls eine language-file eingebunden. Das darin enthaltene Array $lang enthält etwa 1000 Werte, die auch bei jedem Seitenaufruf neu geladen werden.
        arrays sind klasse

        Kommentar


        • #5
          Probiers mal aus, frag sowohl die DB als auch die Datei (meinetwegen 1000 mal) nach einem Tupel und stoppe die Zeit.

          Beachte dabei aber, dass vor Tupellesen ein mysql_connect() usw. stattfinden sollte, wenn es im eigentlichen Script auch nur wegen der einen Query stattfindet - sonst nicht.

          Falls deine Tabelle mit der Zeit wächst/schrumpft, solltest du diese Messung auch mit verschieden großen Tabellen durchführen. Kann gut sein, dass ab einer bestimmten Anzahl Datensätze die eine oder die andere Methode einbricht.

          Kommentar


          • #6
            Habe gerade ein Array erstellt (10.000 Einträge mit je einem 30 Zeichen langen Key und je einem 100 Zeichen langen Wert) und dieses in einer php-file gespeichert. Die Größe belief sich auf ca. 1MB!
            Habe die Datei in einer Schleife versucht wiederholt zu includen (wobei ich der Array-Variablen einen variablen Variablennamen mit {} gegeben habe, um auch immer unterschiedliche Variablen zu haben, ohne dass immer dieselbe Variable überschrieben wird). 10mal gings gut, doch beim 12mal hat der Server nicht mehr mitgespielt.

            Daher muss ich mir wohl was anderes überlegen

            Ich denke, ich werde das Array in kleiner Grüppchen von 500-1000 Einträgen aufteilen und in mehreren files abspeichern. Diese werde ich vom Namen her so kennzeichnen, dass ich sie auch gezielt wiederfinde und gezielt einbinden kann.
            Fragt sich jetzt nur was schlimmer ist:
            Ein Skript, in dem ca. 20-30 verschiedene includes von Dateien stattfinden, oder
            ein Skript, in dem ca. 20-30 verschiedene Datenbankabfragen ablaufen?

            ???

            arrays sind klasse

            Kommentar


            • #7
              Du hast offenbar doch etwas anderes vor. Ich nahm an du möchtest ein Script, was eine ID übergeben bekommt und den entsprechenden Datensatz ausgibt.

              Dabei würde es pro Scriptaufruf also eine Query absetzen bzw. einmal das File lesen.
              Oben sagte ich zwar, du sollst es mehrmals machen, aber nur der statistischen Sicherheit wegen.

              Kommentar


              • #8
                So einfach ist es leider nicht
                Es sind schon mehrere Querys, die ich eben durch eine gesamte Auflistung aller Datenbankbestände "ersetzen" wollte.

                Zuletzt geändert von Maranello-550; 25.06.2005, 19:55.
                arrays sind klasse

                Kommentar

                Lädt...
                X