Zur Boardunity Forenstartseite

Zurück   Boardunity & Video Forum » Technik » Programmierung und Datenbanken

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1  
Alt 20.10.2003, 17:24
Benutzerbild von andelal
Auf der Suche ...
 
Registriert seit: 01.2003
Ort: Wien
Beiträge: 156

Gelesen-Funktion - wie funktioniert das?


In anderen Threads habe ich rausgehört, dass verschiedenste Wege beschritten werden, eine Gelesen/Ungelesen Funktion in Forensoftware zu implementieren.
Wie funktioniert so eine Funktion überhaupt? Werden alle Threads, die ein User gelesen hat, in eine separate Tabelle geschrieben? Läuft das mit Cookies?
Wäre nett, wenn mir das wer erklären könnte
  #2  
Alt 20.10.2003, 17:41
Benutzerbild von Akira
Mitglied
 
Registriert seit: 07.2002
Ort: Österreich
Beiträge: 238
da gibt es verschiedene varianten.

eine davon ist zu speichern wann ein benutzer das letzte mal online war. diese zeit wird mit der zeit verglichen wann in einem thema der letzte beitrag geschrieben wurde.

dadurch "weiß" das forum ob das thema für einen benutzer neu ist oder nicht.

wenn ein benutzer ein neues thema jetzt gelesen wird das beispielsweise in der datenbank, in cookies oder in einer session variable gespeichert.

möglichkeiten gibt es viele

  #3  
Alt 20.10.2003, 17:55
Benutzerbild von andelal
Auf der Suche ...
 
Registriert seit: 01.2003
Ort: Wien
Beiträge: 156
Danke erstmal. Das mit den neuen Themen habe ich mir schon so vorgestellt, aber..
Zitat:
Original geschrieben von Akira

wenn ein benutzer ein neues thema jetzt gelesen wird das beispielsweise in der datenbank, in cookies oder in einer session variable gespeichert.
...speziell dieser Teil ist mir unklar.

  #4  
Alt 20.10.2003, 18:17
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Früher beim YaBB war dies so:
Dort wurde separat gespeichert, wann du das letzte mal in einem Forum oder Thema warst und dann wurde verglichen.

Problem an der Sache: Je mehr User und Beiträge, Themen und Foren es gibt, desto größer wird die Anzahl der Datensätze die es zu verwalten gilt. Auf Dauer geht sowas auf die Performance.

Nehmen wir mal ein Board mit 100 Benutzern, 1000 Themen und 20 Foren an. Dort kann es sein das das Board 120000 Datensätze zu verwalten hat. Und das bei einem kleinen Board. gehen wir mal von meinem aus, so muss das System im schlimmsten Fall über 24 Millionen Datensätze verwalten.

Und die sollen mal auf dauer performant nach den passenden Datensatz durchsucht werden. Das geht nicht, erst recht nicht wenn über 100 User online sind (wie es bei so mancehhn Board äusserst üblich ist). beim YaBB kam es so schonmal zum Datenverlust.

Deswegen hat sich diese Methode wohl nicht durchgesetzt, obwohl sie für den user wohl die komfortabelste Möglichkeit ist.

Eine andere Möglichkeit die heut sehr verbreitet ist: Man vergleicht die Zeit wann ein User das letzte mal online war mit der Zeit des letzten Beitrags. Um das ganze dann noch ein wenig benutzerfreundlicher zu machen, werden noch zusätzlich Zeitwerte in der Session und im Cookie gespeichert, mit diesen kann man dann sehen ob der User in der Zeit in der er online war sich schon ein Thema angesehen hat und man kann darauf reagieren (anderes Icon etc.).

Das ist die Methode die oben beschrieben wird.

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #5  
Alt 20.10.2003, 19:04
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
auf phpBB2.de wurde mal ein Hack eingebaut, welcher angeblich diese Funktion verbesserte. Ergebnis sind auf jeder Seite bis zu 120 Queries und steigend.

  #6  
Alt 20.10.2003, 20:27
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
120 Querys?
Das kann ja nur von phpBB2.de kommen

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #7  
Alt 20.10.2003, 20:40
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
Keine Sorge, die schaffen auch locker das Doppelte

  #8  
Alt 21.10.2003, 05:51
Benutzerbild von andelal
Auf der Suche ...
 
Registriert seit: 01.2003
Ort: Wien
Beiträge: 156
Ich hab da jetzt mal drüber geschlafen (nicht besonders lange, leider): ich denke die beste Lösung wäre eine Tabelle, in der die "gelesen" Markierungen temporär gespeichert werden, und zwar so lange, wie Beiträge generell als "neu" gelten. Es muss doch irgendwie möglich sein, mit max. 2 od. 3 zusätzlichen Queries auszukommen...?

120 Queries? Kann man sich das wo anschauen?

  #9  
Alt 21.10.2003, 09:40
Benutzerbild von andelal
Auf der Suche ...
 
Registriert seit: 01.2003
Ort: Wien
Beiträge: 156
Jetzt war ich kurz auf phpbb2.de
Code:
[ Server Load : 41 pages in last 5 mins | 1558 unique hits in last 24 hours ]
[ Time : 1.348283s | 412 Queries | 0 Attachment Queries | GZIP : On | Debug : On ]
Wie kann man nur 412 Queries verpfeffern?
Edit: Ich bin immer noch ganz erschüttert

  #10  
Alt 21.10.2003, 10:19
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Scheinbar hat dort jede Seite über 100 Querys. Nicht grad ein gutes Vorbild wenn sich jemand für das phpbb2 interessiert.

je nachdem wie du deine tabelle aufbaust würde es sogar reichen wenn es nur ein Query wäre.

Beispiel Tabelle:
userid
threadid
lastreaddate

alles drei INT Spalten.

Nun brauchst du nur noch die ThemenIDs und schon kannst du mit einem Query in der Art die Zeit Werte abrufen.

SELECT * FROM tabelle WHERE threadid IN (1,2,3,4,5) && userid=1

Die Zahlenwerte musst du natürlich entsprechend austauschen.

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #11  
Alt 21.10.2003, 13:19
Benutzerbild von Acyd Burn
phpBB Lead Developer
 
Registriert seit: 09.2003
Ort: Oldenburg
Beiträge: 106
phpbb2.de hat ja so viele queries weil die alle möglichen Mods einbauen, anstatt diese entsprechend zu kombinieren.

Und ich möchte auch einmal an dieser Stelle darauf hinweisen, daß es einen herheblichen Unterschied ausmacht, ob man 5 Queries hat, die je 0.002 Sekunden dauern, oder eine Query die satte 7 Sekunden dauert.

Posting pages haben normalerweise mehr Queries (durch die UPDATES/INSERTS), dafür sind die aber schön schnell.

Die Anzahl der Queries ist deshalb kein Garant dafür, wie schnell ein Board nun tatsächlich ist.

__________________
Meik Sievertsen
phpBB Development Team Leader
phpBB3 Development | phpBB / Projekte: mobilfunk-guenstiger | stromtarife vergleichen/wechseln
  #12  
Alt 21.10.2003, 13:56
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Zitat:
Original geschrieben von Acyd Burn
Die Anzahl der Queries ist deshalb kein Garant dafür, wie schnell ein Board nun tatsächlich ist.
Dies ist schon korrekt, jedoch erhöht sich mit jedem zusätzlichen Query die Gefahr das einer hängen bleibt und die besagten 7 Sekunden brauch.

Im übrigen schauen sich die meisten Nutzer die Query Zahl sehr genau an, da sie dort zu sehen glauben ob ein Datenbankserver stark belastet wird und wie gut ein System geschrieben ist. Denn es ist schon sehr eigenartig wenn zwischen zwei Systemen die das gleiche vollbringen ein Unterschied von 15 und mehr Querys liegt.

Und auch wenn ein Query nur 0.002 Sekunden brauch sind es bei 100 Querys doch schon 0.200 Sekunden. Zwar kein Beinbruch aber es geht halt schneller.

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #13  
Alt 21.10.2003, 14:42
Benutzerbild von Matix
Mitglied
 
Registriert seit: 06.2003
Beiträge: 301
hm... also wenn du ne simple lösung willst

erstelle eine tabelle mit userid postid... es wird NUR DANN etwas hineingeschrieben wenn der user das post auch gelesen hat. Logischerweise sind alle post ids die nicht gefunden werden oder keine userid als gegenpart haben nicht gelesen / nicht von dem user gelesen.. wenn du das noch zusammen mit ner zeitangabe verbindest (meinetwegen alle posts die net älter sind als x tage) hättest du deine lösung... ich glaub super performant wäre die aber nicht

  #14  
Alt 21.10.2003, 17:21
Benutzerbild von Acyd Burn
phpBB Lead Developer
 
Registriert seit: 09.2003
Ort: Oldenburg
Beiträge: 106
Zitat:
Original geschrieben von DaddyCool
[...]
Im übrigen schauen sich die meisten Nutzer die Query Zahl sehr genau an, da sie dort zu sehen glauben ob ein Datenbankserver stark belastet wird und wie gut ein System geschrieben ist. Denn es ist schon sehr eigenartig wenn zwischen zwei Systemen die das gleiche vollbringen ein Unterschied von 15 und mehr Querys liegt.

Und auch wenn ein Query nur 0.002 Sekunden brauch sind es bei 100 Querys doch schon 0.200 Sekunden. Zwar kein Beinbruch aber es geht halt schneller.
Klar, da hast du natürlich Recht, ich meinte es ja auch in kleinem Rahmen. Wer unten 100 Queries stehen hat, der macht wirklich was falsch.

__________________
Meik Sievertsen
phpBB Development Team Leader
phpBB3 Development | phpBB / Projekte: mobilfunk-guenstiger | stromtarife vergleichen/wechseln
  #15  
Alt 21.10.2003, 21:16
Benutzerbild von andelal
Auf der Suche ...
 
Registriert seit: 01.2003
Ort: Wien
Beiträge: 156
Zitat:
Original geschrieben von Matix
hm... also wenn du ne simple lösung willst

erstelle eine tabelle mit userid postid... es wird NUR DANN etwas hineingeschrieben wenn der user das post auch gelesen hat. Logischerweise sind alle post ids die nicht gefunden werden oder keine userid als gegenpart haben nicht gelesen / nicht von dem user gelesen.. wenn du das noch zusammen mit ner zeitangabe verbindest (meinetwegen alle posts die net älter sind als x tage) hättest du deine lösung... ich glaub super performant wäre die aber nicht
Ich glaube, das wäre sogar ziemlich performant, wenn man es gescheit schreibt
412 Queries sind aber - egal, wie stark die den Server belasten -eindeutig zuviel. Ist meine Meinung.

  #16  
Alt 27.10.2003, 16:40
Benutzerbild von Nev
Nev Nev ist offline
Sven M. Maderbacher
 
Registriert seit: 10.2003
Ort: Österreich / Wien
Beiträge: 60
Hi @ll

die Performateste Lösung ist sicher.
die Foren als ungelsen zu makieren, die sich nach dem letzten betritt verändert haben.

Ist schnell zum rausfinden.
verliert sich nur sehr schnell.

Eine möglichkeit wäre es eine mischform aus dem ganzen zu bauen.
das man ein Cookie mitschleift, was er sich in der session alles angeschaut hat.
Sobald er die Seite verlässt, wird das Cookie verworfen.
In dem Cookie, werden die ID's der Thread's angeführt welcher er sich angeschaut hat.
Zusätzlich, könnte man bei der Funktion, "diese Sektion als gelesen makieren", dies genauso in dem Cookie mit führen.
so würden alle IDs von dieser Sektion rausfliegen.
So schafft man wieder Platz im Cookie.

Das ganze in die DB zu speichern, ist der falsche Weg, wie schon einige Vorschreiber beschrieben haben.
So kommen zuviele Query's bzw. Datensätze zusammen.

Die Methode die ich beschrieben habe, ist mir gerade eingefallen, wobei mir die Idee recht gut gefällt.

Hat GeschwindigkeitsVorteile.
Falls der User kein Cookie zulässt, kann man es noch in der Session einbaun, was ich aber ned für sinnvoll erachte.

@Daddycool
Schön dich hier zu finden.
du alter "Code Quäler" (derzeitiger Status).

  #17  
Alt 27.10.2003, 16:48
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
@Nev
schön dich zu lesen

In meinem aktuellen Board Entwurf funktioniert dies so:

Kommt ein Nutzer online so lese ich den Zeitwert seines letzten besuches entweder aus der Benutzertabelle oder aus einer speziellen Gasttabelle (sofern er als widerkehrender gast identifiziert wurde) aus

Dieser Wert wird in der Session gespeichert, damit dieser auch bei einem Seitenwechsel erhalten bleibt.

Alle Gelesen/Ungelesen Icons richten sich nun nach diesem Wert. Zusätzlich speicher ich noch zusätzliche Werte in der Session. Betritt ein Benutzer z.B. ein Forum so wird dieses mit einem Zeitwert in die Session gespeichert und das Forum als gelesen markiert. Das gleiche bei Themen.

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #18  
Alt 27.10.2003, 17:04
Benutzerbild von Nev
Nev Nev ist offline
Sven M. Maderbacher
 
Registriert seit: 10.2003
Ort: Österreich / Wien
Beiträge: 60
Hi @gain

das System hat vorteile, da es sehr schlank wirkt.

Aber die Funktionalität die gewünscht wird, erreicht es ned.

um das zu machen, kann man wie von anderen beschrieben, das ganze in der DB spielen, was ned gerade das schlauste ist (wenn man mal hochrechnet).

Die andere Möglichkeit wäre es, nicht gesamt die Funktionalität wiederzuspeigeln, sondern es so gut wie möglich umzusetzten, daher meine Idee.

Das mit dem Cookie kann man recht nett umsetzten.
Man speichert, serializert die thread-ID`s mit den ForenID's ab.
sicher kommst an die Cookie Grenze, aber das kann man noch umgehn, irgendwie.
Falls er ein Forum als gelesen makiert, wird das im Cookie vermerkt und die dazugehörigen Thread-ID`s gelöscht.

Muss man mal austesten, wie gut das gehn würde.
War wie gesagt gerade ein Gedankengang.

__________________
Sven-Marcus Maderbacher
Cu l8er
Nev the XxX

Projekte:
www.Nev-Hilft.de die Seite für Coder
Master of www.Burnworld.de
  #19  
Alt 27.10.2003, 17:10
Benutzerbild von Nev
Nev Nev ist offline
Sven M. Maderbacher
 
Registriert seit: 10.2003
Ort: Österreich / Wien
Beiträge: 60
Hi ciruZ

ob du es jetzt im Cookie, oder in der Session miführst, ist eigendlich egal.

Da ich ein eigenes Verhältnis zur Session-Verwaltung von PHP habe, nehme ich die Cookies.

Wobei das auch nur Session-Cookies sind.

__________________
Sven-Marcus Maderbacher
Cu l8er
Nev the XxX

Projekte:
www.Nev-Hilft.de die Seite für Coder
Master of www.Burnworld.de
  #20  
Alt 27.10.2003, 17:12
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Zitat:
Original geschrieben von Nev
sicher kommst an die Cookie Grenze, aber das kann man noch umgehn, irgendwie.
Warum denn alles ins Cookie schreiben??

Gib den Gast doch eine eindeutige ID und speicher das ganze in eine spezielle Tabelle, so wie ich es mache (meine ominöse Gasttabelle).

Jeder Gast bekommt eine eindeutige ID, zu dieser ID gibt es (normalerweise) einen Datensatz in der DB. Dort werden verschiedene daten zwischengespeichert (Dinge die sonst möglichweise in ein Cookie kommen würden). Kommt ein Gast nun wieder und hat nochs eine ID so wird der Datensatz ausgelesen und in die Session übernommen.

Natürlich werden in dieser Tabelle keine Passwörter für Foren usw. gespeichert.

Das ganze lässt sich dann auch noch auf einen registrierten user anwenden. Dort legt man halt ein extra Feld an wo die Daten reinkommen.

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #21  
Alt 27.10.2003, 17:14
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Zitat:
Original geschrieben von ciruZ
DaddyCool: Und wenn der User nicht wieder kommt? Ich hoffe mal, dass der Müll dann NICHT in der DB bleibt
Für solche Fälle wird noch ein Zeitwert gespeichert, über diesen kann der Admin dann alte Einträge killen.

Hab also mitgedacht

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #22  
Alt 27.10.2003, 17:19
Benutzerbild von Nev
Nev Nev ist offline
Sven M. Maderbacher
 
Registriert seit: 10.2003
Ort: Österreich / Wien
Beiträge: 60
@DaddyCool

Sicher kannst du es über einen Table lösen, mach ich ned anderes.

Um das ganze noch schneller zu machen, lagere ich einiges ins Cookie aus.
Falls der User keines zulässt, rennt das "Cookie" in der DB.

@ciruZ
Was DaddyCool meint ist, das er User bzw. Gast nur für die eine Session gleich bleibt, danach wird die Row wieder gelöscht, bzw. wertlos.

__________________
Sven-Marcus Maderbacher
Cu l8er
Nev the XxX

Projekte:
www.Nev-Hilft.de die Seite für Coder
Master of www.Burnworld.de
  #23  
Alt 27.10.2003, 17:20
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
Zitat:
Original geschrieben von ciruZ
DaddyCool: Ach so, also falls es ein "Stammgast" ist
Aber macht es dann nicht eher Sinn für das Mitglied, sich zu registrieren?
Halte ich für sinnlos, wenn Gäste fast zu Mitgliedern werden.
Es soll tatsächlich Leute geben die nur Lesen wollen, um sich zu informieren, und da in Themenforen öfter Dinge hinzukommen ist es dort sehr wahrscheinlich das ein Benutzer mehrmals aufkreuzt.

In meinem kleinen Board sind ziemlich viele Gäste unterwegs, und ich kann mir ehrlich gesagt nicht vorstellen das ALLE zum ersten mal da sind. Ein Teil davon gehört sicherlich zu den Stammgästen.

Edit: Ein Stammgast ist mir übrigends lieber als ein nullposter, wobei der Nullposter besser für die Statistik ist.

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
  #24  
Alt 27.10.2003, 17:27
Benutzerbild von Nev
Nev Nev ist offline
Sven M. Maderbacher
 
Registriert seit: 10.2003
Ort: Österreich / Wien
Beiträge: 60
@ciruZ

Nee eben ned.
Wenn der Browser zu ist, dann ist die Session weg.
ist auch sinn der sache.


das andere Boards die Session weiterbehalten, ist mir bekannt, nur ist das sinnvoll??

PS: gefällt mir hier recht gut.
Überhaupt das ich aus den 2 Themen wo ich derzeit gepostet habe, ned rauskomm, da immer irgendwer was das dazuschreibt ;-)

__________________
Sven-Marcus Maderbacher
Cu l8er
Nev the XxX

Projekte:
www.Nev-Hilft.de die Seite für Coder
Master of www.Burnworld.de
  #25  
Alt 27.10.2003, 17:41
Benutzerbild von DaddyCool
Platzanweiser
 
Registriert seit: 10.2003
Ort: Niedersachsen
Beiträge: 306
@Nev
Um nicht irgendwann im Datenchaos zu enden ahbe ich irgendwann beschlossen das für alle die gleichen Regeln gelten, d.h. alle nutzen die gleichen Methoden zum Speichern von Werten oder schauen in die Röhre.

Sonst habe ich irgendwann 10 arrays mit Werten die jeweils an anderen Stellen gespeichert wurden. bei sowas wird es dann schwer zu bestimmen welches Array was für eine gewichtung bekommt.

Aus diesem Grund werden bei mir genau vier Werte in die Cookies geschrieben.

Session ID
Guest ID
User ID (falls registriert)
Passwort (verschlüsselt, falls registriert)

Die längsten Werte sind 32 Bytes lang, und soviel Platz sollte ein user schon haben , um mal wieder auf das problem mit dem platz in den cookies zurückzukommen

__________________
Fabian Martin
Fabian Martin

Blog | Twitter | XING
Antwort


Stichworte
-


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Tidbits Template Class (habe ich selbst gemacht!) Fabchan Programmierung und Datenbanken 82 23.01.2006 17:20
Anti-Troll Funktion exe Forensoftware 18 01.01.2005 23:07
vB 3.x - Archiv Funktion wegen Webspace nicht möglich? Doch! Jan Stöver Web Design und Grafik 5 14.05.2004 14:01
Ein Problem mit Funktion und Platzhalter Jan Stöver Programmierung und Datenbanken 4 03.05.2004 20:56
Konzept Einfachheit = gut? MrNase Community Management, Administration und Moderation 8 31.01.2004 17:27






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25