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

        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


        • #5
          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


          • #6
            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: 57.205   Beiträge: 432.331   Mitglieder: 29.597   Aktive Mitglieder: 46
            Willkommen an unser neuestes Mitglied, Drausi.

            Online-Benutzer

            Einklappen

            724 Benutzer sind jetzt online. Registrierte Benutzer: 2, Gäste: 722.

            Mit 4.707 Benutzern waren am 12.01.2023 um 03:07 die meisten Benutzer gleichzeitig online.

            Die neuesten Themen

            Einklappen

            Die neuesten Beiträge

            Einklappen

            Lädt...
            X