Ankündigung

Einklappen
Keine Ankündigung bisher.

Statistik

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

  • Statistik

    Hallo,

    ich stehe vor einen kleinem Problem. Ich frage mich gerade, wie ich die Statistik, die ich selbst erstellen möchte, speichern soll.
    Ich wollte ungefähr auflisten:
    • 100 letzten Datensätze (IP, Referrer, besuchte Seiten, Datum)
    • Suchbegriffe (30)
    • Referrer (30)
    • 7 Tage-Statistik
    • Monatsstatistik
    • Gesamtstatistik
    Soll ich das jetzt eher in einer DB speichern lassen, oder in einer (mehrere) Textdatei(en). Denn wenn ich es in einer DB speichere, gibt es ständig Zugriff und zwar doppelt: Inhalt und Statistik und die DB wird so zugemüllt...

    Was meint ihr dazu (vor allem Interessiert mich Ingos Meinung, der immer contra-DB war)


  • #2
    AW: Statistik

    Naja... DB is schon ratsam ... wenn de backup machst ... dann haste keine extra dateien.

    Kommentar


    • #3
      AW: Statistik

      Hmm, eine Datei kann ich aber auch schnell Downloaden und so schlimm ist der Verlust von statistischen Werten auch nicht.
      Mir geht es hauptsächlich um die Zugriffszeit.

      Kommentar


      • #4
        AW: Statistik

        Bei einer Tabelle, man halt schon leicht zugreifen, und Inhalte einsehen. Das an sich ist ja nicht schlimm, aber das stört deine Besucher! Eine Datenbank ist sicherer und wenn du gut füllst, wird sie nicht zugemüllt!
        sigpic
        Socialbit - Wir machen Apps!

        Kommentar


        • #5
          AW: Statistik

          Zitat von mi-schi Beitrag anzeigen
          Hallo,

          ich stehe vor einen kleinem Problem. Ich frage mich gerade, wie ich die Statistik, die ich selbst erstellen möchte, speichern soll.
          Ich wollte ungefähr auflisten:
          • 100 letzten Datensätze (IP, Referrer, besuchte Seiten, Datum)
          • Suchbegriffe (30)
          • Referrer (30)
          • 7 Tage-Statistik
          • Monatsstatistik
          • Gesamtstatistik
          Soll ich das jetzt eher in einer DB speichern lassen, oder in einer (mehrere) Textdatei(en). Denn wenn ich es in einer DB speichere, gibt es ständig Zugriff und zwar doppelt: Inhalt und Statistik und die DB wird so zugemüllt...

          Was meint ihr dazu (vor allem Interessiert mich Ingos Meinung, der immer contra-DB war)
          ob du eine datenbank benutzen solltest oder nicht, hängt von der anzahl der schreib-zugriffe ab. textdateien sind (viel) schneller zu lesen und zu schreiben, eben weil kein extra prozess dazwischensteht. warum es datenbanken gibt, ist vor allem dem großen problem der textdateien zu verdanken: race-conditions.

          eine race-condition sieht so aus:

          prozess 1 liest datei.txt
          prozess 1 arbeitet
          ----prozess 2 liest datei.txt
          prozess 1 schreibt datei.txt mit neuen daten
          ----prozess 2 schreibt datei.txt mit seinen daten die allerdings auf dem gelesen beruhen bevor prozess 1 geschrieben hat -> datenverlust ist die folge.
          bei einem counter würde sich das so bemerkbar machen: (ein count von 10 wird erwartet, ein count von 8 kommt raus)

          gelesener wert - geschriebener wert
          0 - 1
          1 - 2
          1 - 2

          2 - 3
          3 - 4
          4 - 5
          4 - 5

          5 - 6
          6 - 7
          7 - 8
          für einen counter und ähnliches sind dateien also (fast) nicht zu gebrauchen.

          bei einer DB wird dir das nicht passieren, dort gibts immer nur einen prozess der die datenbank schreibt.

          aber nun zu deinem problem:
          wie dus sehr akkurat hinbekommst, ist wenn du die datei im append-mode (a) öffnest und nur daten anfügst. anzeigen kannst du nun nur 30 zeilen ab dem ende (siehe fseek()).

          diese datei müsste öfters gewartet werden. das einfachste wäre von hand, bei einer automatischen wartung müsstest du die datei mittels flock() sperren (dies aber bei ALLEN lese und schreibevorgängen).

          Bei einer Tabelle, man halt schon leicht zugreifen, und Inhalte einsehen. Das an sich ist ja nicht schlimm, aber das stört deine Besucher! Eine Datenbank ist sicherer und wenn du gut füllst, wird sie nicht zugemüllt!
          ich verstehe kein wort.
          AC/DC Fanpage www.ifyouwantblood.de
          Nein zur Zensur im Internet und anderswo - Anonymous

          Kommentar


          • #6
            AW: Statistik

            Danke Brian, sehr ausführlich.

            Nochmal zu Verständnis:
            Zwei User gehen gleichzeitig auf die HP.
            Bei beiden liest das Script die Textdatei aus und erhält einen Wert von 2.
            Diesen Wert erhöht das Script um eins.
            Somit wird zweimal 3 gespeichert, statt 4.
            Richtig?

            zu fseek:
            Die Funktion zählt doch von Anfang an:
            Setzt den Dateizeiger einer mit handle angegebenen Datei auf eine neue Position. Diese neue Position, angegeben in Bytes vom Begin der Datei an
            ein Beispiel-Datensatz:
            Code:
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            Und ich möchte die letzte Zahl ausgeben, wie soll das mit fseek gehen?
            Ich würde es mit file() und count() machen:
            file() ließt die Textdatei
            count() zählt die Zeilen
            Ich lasse die letzte Zeile ausgeben

            Eigentlich kann man ja automatisch mit unset die "alten" Zeilen löschen:
            mit file() auslesen
            mit count() zählen
            Differenz zwischen den "alten", nicht mehr benötigten Zeilen und den benötigten Zeilen ausrechnen
            mit for() Schleife und unset($file[$x]) die Zeilen löschen.

            Also ist eine Statistik mit Textdateien (alles verwalten und automatisch löschen...) auch möglich und schneller.

            Hat sonst noch jemand eine Meinung dazu?

            Kommentar


            • #7
              AW: Statistik

              Zitat von mi-schi Beitrag anzeigen
              Danke Brian, sehr ausführlich.

              Nochmal zu Verständnis:
              Zwei User gehen gleichzeitig auf die HP.
              Bei beiden liest das Script die Textdatei aus und erhält einen Wert von 2.
              Diesen Wert erhöht das Script um eins.
              Somit wird zweimal 3 gespeichert, statt 4.
              Richtig?
              genau. das passiert, wenn man die datei richtig sperrt, nicht häufig, aber es passiert. aber je mehr benutzer, desto häufiger passierts. deswegen ja die frage, wieviele schreibvorgänge.

              zu fseek:
              Die Funktion zählt doch von Anfang an:
              nein, lies dir den artikel im manual nochmals durch.

              Zitat von mi-schi Beitrag anzeigen
              ein Beispiel-Datensatz:
              Code:
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              Und ich möchte die letzte Zahl ausgeben, wie soll das mit fseek gehen?
              Ich würde es mit file() und count() machen:
              file() ließt die Textdatei
              count() zählt die Zeilen
              Ich lasse die letzte Zeile ausgeben
              der ansatz mit fseek() sieht eher fopen(), damit du nicht immer die komplette datei, die bei den daten die du sammeln willst ziemlich groß werden kann, in den speicher liest.

              mit fseek() kannst du die datei, mit einem negativen offset, rückwärts durchgehen. aus dem stehgreif kann ich das jetzt auch nicht, das müsste ich ausprobieren.

              beim manual steht aber noch ne userfunktion, die die letzen reihen ausgeben soll:

              PHP-Code:
              function read_file($file$lines=30)
              {
                     
              $handle fopen($file"r");
                     
              $linecounter $lines;
                     
              $pos = -2;
                     
              $beginning false;
                     
              $text = array();
                     while (
              $linecounter 0) {
                       
              $t " ";
                       while (
              $t != "\n") {
                         if(
              fseek($handle$posSEEK_END) == -1) {
              $beginning true; break; }
                         
              $t fgetc($handle);
                         
              $pos --;
                       }
                       
              $linecounter --;
                       if(
              $beginningrewind($handle);
                       
              $text[$lines-$linecounter-1] = fgets($handle);
                       if(
              $beginning break;
                     }
                     
              fclose ($handle);
                     return 
              array_reverse($text); // array_reverse is optional: you can also just return the $text array which consists of the file's lines. 

              Eigentlich kann man ja automatisch mit unset die "alten" Zeilen löschen:
              mit file() auslesen
              mit count() zählen
              Differenz zwischen den "alten", nicht mehr benötigten Zeilen und den benötigten Zeilen ausrechnen
              mit for() Schleife und unset($file[$x]) die Zeilen löschen.
              sagte ich ja, nur müsstest du die datei jedesmal mittels flock() sperren. das kann aber auch zu inkonsistenten führen, denn auch mit flock() ist nicht alles so 100%ig. außerdem kann die datei, wie gesagt, ziemlich groß werden und du musst ja nicht wirklich immer als in den speicher laden.

              Also ist eine Statistik mit Textdateien (alles verwalten und automatisch löschen...) auch möglich und schneller.
              jap.
              Zuletzt geändert von Brian; 28.09.2007, 18:15.
              AC/DC Fanpage www.ifyouwantblood.de
              Nein zur Zensur im Internet und anderswo - Anonymous

              Kommentar

              homepage-forum.de - Hilfe für Webmaster! Statistiken

              Einklappen

              Themen: 56.657   Beiträge: 428.684   Mitglieder: 28.354   Aktive Mitglieder: 77
              Willkommen an unser neuestes Mitglied, Ralph Sommer.

              Online-Benutzer

              Einklappen

              165 Benutzer sind jetzt online. Registrierte Benutzer: 4, Gäste: 161.

              Mit 3.502 Benutzern waren am 23.01.2020 um 17:20 die meisten Benutzer gleichzeitig online.

              Die neuesten Themen

              Einklappen

              Die neuesten Beiträge

              Einklappen

              Lädt...
              X