Sven Mörs: Welche "Themen/Beiträge" sind neu?

Hallo,

Ich Programmiere zur Zeit ein Forum für meine Website.
Funktioniert ganz gut, aber ich weis nicht wie ich das prüfen soll, welche Themen/Beiträge neu sind. Also welche für den User ungelesen sind (Bei einer neuen Antwort Z.b.). Wie mache ich das am besten?
Irgendwo, Irgendwie muss ich das ja Speichern. Keine Ahnung, ich dachte vielleicht an "Cookie"? Und wie prüfe ich das dann?

MFG
Sven!

  1. Lieber Sven,

    Irgendwo, Irgendwie muss ich das ja Speichern. Keine Ahnung, ich dachte vielleicht an "Cookie"? Und wie prüfe ich das dann?

    Du verwendest eine Datenbank? Bei einem Forum doch wohl schon, oder? Dann kannst Du ja (wie hier im Forum bei Anmeldung ja auch möglich) in dieser Datenbank die aufgerufenen Seiten des Users mit ablegen. Später sollte dann leicht festzustellen sein, welche Beiträge Dein User dann also noch nicht gelesen hat...

    Da ich mit mySQL und sonstigen Datenbanken noch keine Erfahrung habe (konnte bisher alles über Flatfiles lösen), kann ich Dir ab hier nicht weiterhelfen! Aber mit etwas Phantasie kommst Du doch sicherlich weiter, oder!?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Lieber Sven,

      Du verwendest eine Datenbank? Bei einem Forum doch wohl schon, oder? Dann kannst Du ja (wie hier im Forum bei Anmeldung ja auch möglich) in dieser Datenbank die aufgerufenen Seiten des Users mit ablegen. Später sollte dann leicht festzustellen sein, welche Beiträge Dein User dann also noch nicht gelesen hat...

      Da ich mit mySQL und sonstigen Datenbanken noch keine Erfahrung habe (konnte bisher alles über Flatfiles lösen), kann ich Dir ab hier nicht weiterhelfen! Aber mit etwas Phantasie kommst Du doch sicherlich weiter, oder!?

      Ja, natürlich verwende ich eine Datenbank. Aber das wird auf Speicher gehen, für jeden User ne Tabelle anzulegen, wo die aufgerufene "Seiten" abgelegt werden. Wird das auch so bei anderen Forums gemacht? Kann ich mir nicht wirklich vorstellen. Sagen wir mal ich habe jetzt 5000 Angemeldet Benutzer. Und bei 20 000 Themen. Das währen ja GB Speicher verbrauch... Cookie währe ja auch ne möglichkeit, aber keine ahnung ob das so gut ist, wenn ich Cookies verwende.

      Kann ich ruig Cookies verwenden? Oder ist das nicht so gut? Oder wie läuft das genau bei anderen Forums? Wer kennt sich aus?

      MFG
      Sven!

      1. Du willst eine Beziehung haben von Usern zu Artikeln, also eine n:n-Tabelle.
        1. wenn du die Tabelle gut entwickelst, also auch Indezes verwendest, dann ist das Auslesen der Tabelle garnicht so langsam. Solche reinen Zuordnungstabellen sind auch nicht groß,
        2. aber, für jeden Artikel fallen soviele neue INSERTS an wie du User hast, also relativ unpraktisch...

        Ich würde mal den ganzen Anspruch überdenken.
        In meinem Forum merke ich mir zB nur die Artikel-User, die eine Antwort (auf den Artikel des Users) erhalten haben, ansonsten lasse ich den User stöbern.

      2. Lieber Sven,

        Ja, natürlich verwende ich eine Datenbank. Aber das wird auf Speicher gehen, für jeden User ne Tabelle anzulegen, wo die aufgerufene "Seiten" abgelegt werden. Wird das auch so bei anderen Forums gemacht? Kann ich mir nicht wirklich vorstellen. Sagen wir mal ich habe jetzt 5000 Angemeldet Benutzer. Und bei 20 000 Themen. Das währen ja GB Speicher verbrauch...

        GBs? Wie rechnest Du denn da? Da gibt es sicherlich eine simple Lösung, die wenige kB an Daten produziert.

        Ich stelle mir das so vor: Jedes Posting enthält eine Tabelle, in der steht, welcher User das bereits gesehen hat (über User-ID). Dann kommst Du bei jedem Posting bei 5000 Usern auf vielleicht (pure Spekulation!) 10 000 Bytes. Ich rechne das mal hoch. Bei 20 000 Threads mit jeweils 100 Postings wären wir bei 20 000 000 000 Bytes, das sind 18,6 GB.

        Bist Du Dir sicher, dass Dein Forum 20 000 Themen haben wird?

        Wenn Du jetzt aber diese 20 000 Threads noch in aktive und archivierte Threads unterteilst, für die archivierten aber _keine_ Informationen über "bereits besucht" ablegst, dann wird die Datenmenge deutlich kleiner.

        Man könnte mal Christian Kruse fragen, wie er das mit diesem Forum gelöst hat, und welches Datenaufkommen bei ihm anfällt.

        Cookie währe ja auch ne möglichkeit, aber keine ahnung ob das so gut ist, wenn ich Cookies verwende.

        Cookies kann man löschen. Wenn der User seinen Browser anweist, alle Internetspuren zu löschen, dann "vergisst" das Forum, welche Threads/Postings der User bereits besucht hat. Und wenn er von verschiedenen Browsern aus kommt, dann stimmt es ja hinten und vorne nimmer!

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Hallo Felix,

          Ich stelle mir das so vor: Jedes Posting enthält eine Tabelle, in der steht, welcher User das bereits gesehen hat (über User-ID).

          wieso für jedes Posting eine Tabelle? Das ist doch Unsinn - eine Tabelle reicht völlig aus, ein Feld mit Beitragsid und eines mit der Userid.

          Dann kommst Du bei jedem Posting bei 5000 Usern auf vielleicht (pure Spekulation!) 10 000 Bytes. Ich rechne das mal hoch. Bei 20 000 Threads mit jeweils 100 Postings wären wir bei 20 000 000 000 Bytes, das sind 18,6 GB.

          Ich komme bei 20000 Threads a 20 Postings (100 ist imho unrealistisch) und 1000 User die jedes der Postings gelesen haben (selbst bei 5000 angemeldeten Usern wird nicht jeder jedes Posting gelesen haben) - insgesamt sind das dann 400Mio Datensätze, die dann (ganz grob über den dicken Daumen gepeilt) ca. ein GB belegen. Allerdings halte ich sowohl die 200000 Threads als auch die 5000 Mitglieder für _deutlich_ zu hoch gegriffen - selbst hier gibt es "nur" rund 1400 angemeldete User und auf der Hauptseite sind deutlich unter 400 Threads, womit wir nur noch bei rund 110MB wären (angenommen jeder der 30 Postings in den 400 Threads wurde von der Hälfte der User gelesen).

          Man könnte mal Christian Kruse fragen, wie er das mit diesem Forum gelöst hat, und welches Datenaufkommen bei ihm anfällt.

          ersteres kann er dir bestimmt sagen, letzteres wohl eher nicht (er ist hier kein Dev mehr) :-)
          Das würde mich aber auch interessieren, wie groß die Tabelle(?) mit den gelesen-Markierungen ist.

          Grüße aus Nürnberg
          Tobias

      3. Hi,

        Ja, natürlich verwende ich eine Datenbank. Aber das wird auf Speicher gehen, für jeden User ne Tabelle anzulegen, wo die aufgerufene "Seiten" abgelegt werden. Wird das auch so bei anderen Forums gemacht? Kann ich mir nicht wirklich vorstellen. Sagen wir mal ich habe jetzt 5000 Angemeldet Benutzer. Und bei 20 000 Themen. Das währen ja GB Speicher verbrauch... Cookie währe ja auch ne möglichkeit, aber keine ahnung ob das so gut ist, wenn ich Cookies verwende.

        Das Thema hatten wir erst vor ein paar tagen im Forum.

        Du musst doch nur in die Datenbank eintragen, wenn jemand einen Beitrag gelesen hat. Es wird nicht vorkommen, das jemand alle 20.000 Themen liest.
        Ausserdem kannst du ja, wenn alle Posts eines Threads gelesen sind, nur den Thread als gelesen markieren, und nicht jeden Post im Thread.

        Ich hatte dieses System bei mehreren tausend Forenbeiträgen und keine merklichen geschwindigkeitseinbusen. Und die Datenbank hat sich nur um ca. 5 MB vergrössert.

  2. Moin,

    Irgendwo, Irgendwie muss ich das ja Speichern. Keine Ahnung, ich dachte vielleicht an "Cookie"? Und wie prüfe ich das dann?

    Wenn das Forum mit einem Login arbeitet ist es einfach. Einfach den Timestamp vom Lastlogin(besser noch vom Logout, aber das macht ja nicht jeder) auslesen und alles was danach kam ist neu. Und für eine aktuelle Darstellung ungelesener Beiträge(also wenn der User angemeldet ist) gibt es ja noch a:visited und Co.

    SteBu

    1. Hallo,

      Wenn das Forum mit einem Login arbeitet ist es einfach. Einfach den Timestamp vom Lastlogin(besser noch vom Logout, aber das macht ja nicht jeder) auslesen und alles was danach kam ist neu.

      Das ist aber keine richtige gelesen-Markierung (diese pseudo-Markierung nervt mich immer bei den dämlichen Boards ...). Um zu speichern welcher Beitrag gelesen ist, und welcher nicht, musst du für jeden Beitrag einen Eintrag in die Datenbank schreiben, wenn er gelesen ist - so funktioniert das hier afaik auch.

      Grüße aus Nürnberg
      Tobia

      1. Das ist aber keine richtige gelesen-Markierung

        Ja, aber völlig ausreichend für die meisten Fälle

        »»Um zu speichern welcher Beitrag gelesen ist, und welcher nicht, musst du für jeden Beitrag einen Eintrag in die Datenbank schreiben, wenn er gelesen ist

        Was aber ein ziemlicher Overhead ist. Nicht nur auf der Datenbankseite sondern auch Scriptseitig. Ich würde jetzt auf Anhieb auch nur eine personalisierte Form einer Forensoftware als Anwendungsfall wissen. Evtl. im Micropayment-Bereich wo man gegen Bez. irgendwelche Artikel lesen kann.

        1. Das ist aber keine richtige gelesen-Markierung
          Ja, aber völlig ausreichend für die meisten Fälle

          Völlig unzureichend.
          Setll dir vor, du bist grad am lesen, bist aber noch nicht durch. Jetzt musst zu was erledigen oder, was passieren kann, dein rechner stürtz ab. Dann weisst du nicht mehr, wo du warst.

          Solche Boards hab ich schon genau aus diesem Grund verlassen und ich kann dir massig User sagen, die das auch tun. Nachdem es sogar bei Freeware (z.B. phpBB) für jedes Post eine markierung gibt, ist deine Lösung total antiquiert und einfach schlecht.

          1. Dann weisst du nicht mehr, wo du warst.

            Tut mir leid, ist mir noch nicht passiert. Ich lese(ab und an auch schreibend) hier seit Jahren. Bin fast nie angemeldet(nicht personalisiert) und es klappt trotzdem. Einzig gestern(lag an der Hitze) habe ich einen Thread nicht wiedergefunden, was aber mit Anmeldung auch nicht anders gwesen wäre.

            ist deine Lösung total antiquiert und einfach schlecht.

            Es war keine Lösung, eher ein Vorschlag.

      2. Hallo,

        Wenn das Forum mit einem Login arbeitet ist es einfach. Einfach den Timestamp vom Lastlogin(besser noch vom Logout, aber das macht ja nicht jeder) auslesen und alles was danach kam ist neu.
        Das ist aber keine richtige gelesen-Markierung (diese pseudo-Markierung nervt mich immer bei den dämlichen Boards ...). Um zu speichern welcher Beitrag gelesen ist, und welcher nicht, musst du für jeden Beitrag einen Eintrag in die Datenbank schreiben, wenn er gelesen ist - so funktioniert das hier afaik auch.

        Grüße aus Nürnberg
        Tobia

        Komme jetzt ganz durcheinander. So viele Antworten...
        Also bin ganz verwirrt. Wie muss ich das jetzt genau machen?

        Ich meine in der Datenbank kann es eigendlich nicht sein, weil jedes Forum was ich kenne, wenn ich jetzt Formatiere und auf der Website gehe, sind für mich alle Beiträge neu. Also in so fern, kann es nur Cookie sein? Wenn jetzt ein Benutzer ein Thema öffnet wird die ID+Anzahl der Beiträge in Cookie gespeichert. Gibts die ID nicht was er gerade ausliest, ist das Thema neu. Wenn ID vorhanden ist aber die Anzahl der Beiträge stimmt nicht, dann ist es auch neu weil einer auf den Thema geantwortet hat.

        Könnte ich doch so Realisieren, oder nicht?

        1. Hi,

          Könnte ich doch so Realisieren, oder nicht?

          Bitte teil mir mit, mit welchem Algorithmus du deine Menge von Daten so komprimnierst, das sie in einen Cookie passen.
          Damit können wir ne menge Geld verdienen ;)

          1. Hi,

            Könnte ich doch so Realisieren, oder nicht?

            Bitte teil mir mit, mit welchem Algorithmus du deine Menge von Daten so komprimnierst, das sie in einen Cookie passen.
            Damit können wir ne menge Geld verdienen ;)

            Da stehen doch nur die Themes die der Angemeldete User geöffnet hat und halt die Anzahl der Antworten. Das ist doch nicht viel?

            1. Hi,

              Da stehen doch nur die Themes die der Angemeldete User geöffnet hat und halt die Anzahl der Antworten. Das ist doch nicht viel?

              Und deine Software weiss dann, welche Beiträge ungelesen sind, wenn deren Anzahl z.B. 25 Beträgt?
              Also ne Software, die Hellsehen kann, hab ich auch noch nie gesehen ;)