konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Witam,

Zabieram się do napisania własnego forum internetowego. Standardowy model - kategorie, fora, wątki i posty. Trudności przysparza ni tylko zaprojektowanie mechanizmu informowania użytkownika o nieprzeczytanych wątkach/forach - coś bardzo podobnego do forum na GoldenLine lub na innych portalach społecznościowych.

Jak zaprojektować taki mechanizm? W grę nie wchodzą rozwiązania typu tabela z id użytkownika, id wątku i flaga przeczytany/nieprzeczytany. Całość ma działać w miarę wydajnie dla dużej ilości użytkowników i dużym ruchu na forum.

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

A jak niby inaczej chciałbyś to zrobić? ;))

To, że zrobisz taką tabelę nie znaczy, że będzie mało wydajna. Jeśli dobrze skonstruujesz zapytania - będzie wydajna.

Temat: Forum - nieprzeczytane wątki/fora

A może by to na ciasteczkach zrobić i dodatkowo określić ograniczenie czasowe i ilościowe, czyli np. wstecz jeden miesiąc i do 100 tematów. Wrzucamy do ciacha id nieprzeczytanego tematu, a później parsujemy... nie wiem czy to by było wydajne, trzeba by było testować :) No i jak user skasowałby ciacho to miałby wszystkie tematy nieprzeczytane ;)
Chętnie też poznam ciekawy i wydajny sposób załatwienia tej sprawy.

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Jeżeli użytkownik musiał by się zalogować aby przeczytać swoje zapamiętane- nieprzeczytane wątki, to może wystarczyło by porównywać czas ostatniego zalogowania się z czasem ostatniego postu w danym wątku?

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Jakub Świegot:
A jak niby inaczej chciałbyś to zrobić? ;))

To, że zrobisz taką tabelę nie znaczy, że będzie mało wydajna. Jeśli dobrze skonstruujesz zapytania - będzie wydajna.

Przy dużej ilości wątków i dużej ilości użytkowników tabela taka będzie puchła w zastraszającym tępię. By wszystko wydajnie działało na tabeli takiej powinny być założone przynajmniej dwa indeksy - id wątku, id użytkownika, na które dodatkowo trzeba będzie poświęcić przestrzeń dyskową - pliki z indeksami nieraz zajmują więcej miejsca niż pliki z danymi.

Po głowie chodzi mi racze rozwiązanie z porównywaniem daty daty ostatniej aktywności użytkownika i dat wątków. Można też do tego stworzyć tabelę, którą omawiałem poprzednio, ale z ograniczeniem na np. 300 rekordów.

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Rafał Dudziński:
Jeżeli użytkownik musiał by się zalogować aby przeczytać swoje zapamiętane- nieprzeczytane wątki, to może wystarczyło by porównywać czas ostatniego zalogowania się z czasem ostatniego postu w danym wątku?

Miałoby to szansę działać, ale użytkownicy z reguły (w tym i ja ;)) nie wylogowują się z serwisów, tylko raczej zamykają przeglądarkę. Przeglądarka może trzymać ciasteczko z sesją i po następnym wejściu na stronę użytkownik jest nadal zalogowany.
..trzeba będzie pogrzebać nieco w trzewiach forów opensourcowych. ;)Łukasz Bandzarewicz edytował(a) ten post dnia 03.06.08 o godzinie 08:49

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Myślę że nie potrzeba by było tej tabeli. Przecież chodzi tylko o 'pogrubienie' wątku. Skoro pobierasz z bazy nazwę wątku do listy wątków to nic nie stoi na przeszkodzie aby pobrać jeszcze datę ostatniego postu. Potem już tylko mały warunek przed wyświetleniem i gotowe. Jeżeli Twoje forum będzie bardzo popularne to każde zapytanie do bazy mniej jest na wagę złota. Tym bardziej że mówimy tylko o pewnej funkcjonalności a nie o czymś na czym opiera się działanie całego forum.

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Łukasz Bandzarewicz:
Rafał Dudziński:
Jeżeli użytkownik musiał by się zalogować aby przeczytać swoje zapamiętane- nieprzeczytane wątki, to może wystarczyło by porównywać czas ostatniego zalogowania się z czasem ostatniego postu w danym wątku?

Miało by szansę działać, ale użytkownicy z reguły (w i ja ;)) nie wylogowują się z serwisów, tylko raczej zamykają przeglądarkę. Przeglądarka może trzymać ciasteczko z sesją i po następnym wejściu na stronę użytkownik jest nadal zalogowany.
..trzeba będzie pogrzebać nieco w trzewiach forów opensourcowych. ;)

Możesz przecież ustawić czas życia dla sesji lub ewentualnie robić to Cronem.
Marcin Lejman

Marcin Lejman Właściciel, iTrans

Temat: Forum - nieprzeczytane wątki/fora

Ja bym proponował podejrzeć gotowe rozwiązania - jest masa skryptów opensource do obsługi for - ten problem jest tam już dawno rozwiązany.

Jeżeli masz dostęp do komercyjnych skryptów, np. Vbulletin, to tam można nawet wybrać sobie jedną z kilku opcji śledzenia przeczytanych/nieprzeczytanych wątków (baza danych, ciasteczka itd.).

Inspiracji znajdziesz aż nadto...

Temat: Forum - nieprzeczytane wątki/fora

Rafał Dudziński:
Jeżeli użytkownik musiał by się zalogować aby przeczytać swoje zapamiętane- nieprzeczytane wątki, to może wystarczyło by porównywać czas ostatniego zalogowania się z czasem ostatniego postu w danym wątku?

Tylko chodziło o nieprzeczytane wątki. Mogę przecież wejść na forum nie czytając żadnego wątku, później gdy wejdę ponownie okaże się, że mam wszystkie przeczytane chociaż tego nie zrobiłem :)
Robiąc swoje małe forum wykorzystałem taki sposób bo jest szybki i nie trzeba kombinować ale chciałbym go zmienić bo jak na razie to to można nazwać "nowe posty od ostatniej wizyty" :)

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Wtedy rzeczywiście wystarczy dodać tabelę z użytkownikami i obserwowanymi wątkami oraz czasem ostatniego wejścia na wątek. Wielkość tabeli można by było ograniczyć Cronem który sprawdzał by kto nie odwiedzał wątku np. przez 2 miesiące i usuwał niepotrzebne rekordy.

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Marcin Lejman:
Ja bym proponował podejrzeć gotowe rozwiązania - jest masa skryptów opensource do obsługi for - ten problem jest tam już dawno rozwiązany.

Jeżeli masz dostęp do komercyjnych skryptów, np. Vbulletin, to tam można nawet wybrać sobie jedną z kilku opcji śledzenia przeczytanych/nieprzeczytanych wątków (baza danych, ciasteczka itd.).

Inspiracji znajdziesz aż nadto...

Oczywiście, ale czasami warto zrobić coś samemu aby wiedzieć co jak działa i jakie problemy można napotkać. Wtedy gotowe rozwiązania mogą okazać się dobre nie tylko dlatego że są gotowe i darmowe.Rafał Dudziński edytował(a) ten post dnia 03.06.08 o godzinie 12:51
Michał Sznurawa

Michał Sznurawa Scala Developer

Temat: Forum - nieprzeczytane wątki/fora

Można jeszcze tak: tabela w której są zapamiętane albo tylko wątki przeczytane albo tylko wątki nieprzeczytane. (trzebaby się zastanowić, których będzie mniej). Do tego zapamiętywać datę momentu, w którym wszystkie były przeczytane (albo w w drugim przypadku żaden nie był przeczytany), aby ograniczyć liczbę rekordów w tabeli.
Maciej W.

Maciej W. a czy ty masz swój
ręcznik?...

Temat: Forum - nieprzeczytane wątki/fora

heja

myślałem kiedyś nad czymś takim i przyszło mi do głowy jedno rozwiązanie ale w kilku wydaniach.

Oczywiście w grę nie wchodzi sytuacja, że będziemy trzymali informacje o tym co zostało przeczytane bo to się mija z celem, ale to co nie zostało przeczytane.

No i myślałem czy nie zrobić tego na zasadzie liczb pierwszych, czyli że:

mamy wątek nr 1, 2, 3, 4, 5, 6, 7, 8
i to odpowiada0, 1, 2, 4, 8,16,32,64

jeśli mamy nieprzeczytane 4 i 7 to widać, że w bazie danych przechowamy sobie 36, jako po prostu sumę potęg dwójki (potęga odpowiada id wątku). Fajne rozwiązanie dobrze się sprawuje przy niezbyt wysokich liczbach. Jednakże jeśli już mówimy o tysięcznym wątku to zastanawiałem się czy tego nie można jakoś skracać. Stworzyć wzór, może usuwać z listy wątki które zostały przeczytane przez wszystkich... tutaj rozwiązania jeszcze nie mam, gdyż nie było do końca potrzebne, ale myślę, że idąc tą drogą jakieś rozwiązanie w końcu się trafi

powodzenia życzę
Piotr Lewandowski

Piotr Lewandowski Programista
aplikacji
internetowych (PHP,
MySQL, SF2, Mag...

Temat: Forum - nieprzeczytane wątki/fora

Łukasz Bandzarewicz:
Jakub Świegot:
A jak niby inaczej chciałbyś to zrobić? ;))

To, że zrobisz taką tabelę nie znaczy, że będzie mało wydajna. Jeśli dobrze skonstruujesz zapytania - będzie wydajna.

Przy dużej ilości wątków i dużej ilości użytkowników tabela taka będzie puchła w zastraszającym tępię.

Hmm... A moze by trzymac zserializowana tablice zawierajaca id przeczytanego watku i date ostatniego postu w danym watku, w polu w tabeli z danymi o uzytkownikach. Jesli id postu nie istnieje w tablicy, albo data ostatniego postu w watku jest nowsza niz ta w tablicy to watek jest oznaczony jako nie przeczytany. Dodatkowo moze wprowadzic jakies ogranicznie np. posty starsze niz miesiac oznaczane jako przeczytane? I wtedy moznaby bylo usuwac elementy z tablicy starsze niz miesiac. To samo mozna zrobic chyba z tabelka w bazie danych....

Swoja droga wcale nie jestem pewien czy zserializowana tablica bedzie wydajnym rozwiazaniem :)

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Maciej Wróbel:
heja

myślałem kiedyś nad czymś takim i przyszło mi do głowy jedno rozwiązanie ale w kilku wydaniach.

Oczywiście w grę nie wchodzi sytuacja, że będziemy trzymali informacje o tym co zostało przeczytane bo to się mija z celem, ale to co nie zostało przeczytane.

No i myślałem czy nie zrobić tego na zasadzie liczb pierwszych, czyli że:

mamy wątek nr 1, 2, 3, 4, 5, 6, 7, 8
i to odpowiada0, 1, 2, 4, 8,16,32,64

jeśli mamy nieprzeczytane 4 i 7 to widać, że w bazie danych przechowamy sobie 36, jako po prostu sumę potęg dwójki (potęga odpowiada id wątku). Fajne rozwiązanie dobrze się sprawuje przy niezbyt wysokich liczbach. Jednakże jeśli już mówimy o tysięcznym wątku to zastanawiałem się czy tego nie można jakoś skracać. Stworzyć wzór, może usuwać z listy wątki które zostały przeczytane przez wszystkich... tutaj rozwiązania jeszcze nie mam, gdyż nie było do końca potrzebne, ale myślę, że idąc tą drogą jakieś rozwiązanie w końcu się trafi

powodzenia życzę

Uważaj bo int'y skończą ci się na 2147483647 co daje jakieś 14654 wątki :P

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Rafał Dudziński:
... porównywać czas ostatniego zalogowania się z czasem ostatniego postu w danym wątku?
A co z postami, które mają czas młodszy od ostatniego logowania ale NIE były czytane ?
Marcin Lejman:
Ja bym proponował podejrzeć gotowe rozwiązania - jest masa skryptów opensource do obsługi for - ten problem jest tam już dawno rozwiązany.
Rozwiązania, które działaj różnie.Robert B. edytował(a) ten post dnia 04.06.08 o godzinie 18:45

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Robert B.:
Rafał Dudziński:
... porównywać czas ostatniego zalogowania się z czasem ostatniego postu w danym wątku?
A co z postami, które mają czas młodszy od ostatniego logowania ale NIE były czytane ?
Marcin Lejman:
Ja bym proponował podejrzeć gotowe rozwiązania - jest masa skryptów opensource do obsługi for - ten problem jest tam już dawno rozwiązany.
Rozwiązania, które działaj różnie.Robert B. edytował(a) ten post dnia 04.06.08 o godzinie 18:45
Ja widzę takie opcje:

- jeżeli data ostatniego postu < data logowania = stary
- jeżeli data ostatniego postu > data logowania = nowy

Jeżeli nie wystarcza nam opcja 'newsy od ostatniego logowania' to dodajemy tabelę do bazy i:

- jeżeli data ostatniego postu < data wejścia na post dla konkretnego użytkownika = stary
- jeżeli data ostatniego postu > data wejścia na post dla konkretnego użytkownika = nowy

Dodatkowo zrobił bym chyba 2 tabele. Pierwsza obsługująca posty 2 miesiące wstecz od ostatniego logowania dla poszczególnych użytkowników. Miała by mniej rekordów i na pewno była by najczęściej przepytywana. Druga jako archiwum gdzie przenoszone by były rekordy z pierwszej jeżeli posty były by nieprzeczytane i starsze niż 2 miesiące. Ona miała by więcej rekordów ale była by mniej używana. Jeżeli ktoś 'odświeżył' by stary post, wtedy rekord powędrował by do pierwszej tabeli.

Zakładam że przeciętny użytkownik nie szpera w wątkach 2 miesiące wstecz, no chyba że czegoś szuka, oraz zdaję sobie sprawę że podział na 2 tabele zwiększał by wydajność wraz ze wzrostem ilości wątków które po jakimś czasie przechodziły by do archiwum.

Oczywiście trzeba by było wszystko zbadać podczas działania. Ciężko przewidzieć jak szybko będą się 'starzały' wątki, jak szybko będą przybywały nowe, jaki procent będzie 'odwiedzany' itp.

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

A ja mam takie uwagi:
1. Po co cytować w całości cudzą wypowiedź gdy odnosisz się tylko do części wypowiedzi?
2. Dlaczego nie czytasz ze zrozumieniem ? (Zacytowałeś wypowiedź, która obalała Twoją teorię - mimo wszystko wygłosiłeś ją.)

.. oraz :
Rafał Dudziński:
...
Dodatkowo zrobił bym chyba 2 tabele. Pierwsza obsługująca posty 2 miesiące wstecz od ostatniego logowania dla poszczególnych użytkowników.
... i do tego mechanizm przenoszący rekordy z tabeli 1. do 2. i na odwrót.
Po tym widać, że niewiele znasz się na bazach danych.

konto usunięte

Temat: Forum - nieprzeczytane wątki/fora

Skoro znasz się lepiej, jakie jest twoje rozwiązanie ?Rafał Dudziński edytował(a) ten post dnia 04.06.08 o godzinie 20:04



Wyślij zaproszenie do