ďťż
Podstrony
|
telcocafeZamierzam zrobić moduł forum na stronę i mam problem. Nie wiem jak przechowywać informacje o przeczytanych portach userów. W moim pierwszym projekcie jest to ciąg identyfikatorów postów oddzielonych znakami - rozwalana jest z tego tablica. Tylko przychodzi problem, gdy pojawia się spora ilość takowych postów w poszczególnych forach. Serwer staje się obciążony,a ja nie chcę tego. W jaki inny,prostszy sposób mogę rozwiązać ten problem?Użytkownik andrzej_aa edytował ten post 18 lipiec 2007, 21:51 mozesz przechowywac te dane w cookies / ew. bazie danych A może oddzielna tabela przechowująca przeczytane posty wszystkich użytkowników. Czyli dwie kolumny id użytkownika i id postu. Ewentualne zobacz bazy danych gotowych for dyskusyjnych i tam może znajdziesz odpowiedź jak to zrobić. Cookies raczej nie. Gdyby ktoś wchodził na forum z różnych komputerów to jest niewygodne. Jeżeli o sposób na oddzielną tabelę. Jeżeli id to postów bo przechowywać po jednym poście jest niewygodnie. Chociaż ten sposób to ja mam w starym forum,tylko jest to przechowywane w tabeli użytkownika. W ostateczności . . . Lubię stosować własne rozwiązania. A wie ktoś,w którym Ekspercie jest zbiór for dyskusyjnych? Bo zapomniałem,a wyszukiwarka w menu Eksperta u mnie nie działa. A może zamiast informacji w bazie danych o przeczytanych postach userów, zrobić tabelę o nieprzeczytanych postach. Każdy nowy post wstawiałby swój identyfikator do wiersza każdego z użytkowników. Czyli tworzyłby się taki odpowiedni łańcuszek identyfikatorów oddzielany znakiem tak jak masz obecnie, ale krótszy w miarę rozwoju forum. Przeczytanie posta usuwałoby ten identifikator z wiersza id użytkownika. Dziwny pomysł. Powiedzmy tak: jest ok. 2 tys. użytkowników,z czego zaledwie 200 coś skrobie na forum. Baza nieprzeczytanych postów rośnie i ani widzi zmaleć. Każdy nowy post dodaje każdemu z 2 tys. userów swoje info. Tworzy się zamieszanie,bałagan i obciążenie serwera. Ten pomysł nie przejdzie :/ //edit Chociaż gdyby po pewnej dacie filtrować zawartość tabeli . . . Ale to tez by było utrudnienie - za każdym razem przebudowywać to wszystko? Jednak realniejszy sposób to przechowywanie przeczytanych postów. Tylko ja bym chciał,by to były jak najmniejsze objętościowo tabele . . . Myślałem nad dodatkowym podziałem na fora,ale co,gdyby przenieść temat między forami? Kolejny problem . . . Użytkownik andrzej_aa edytował ten post 19 lipiec 2007, 22:35 mozesz przeciez wstawic crona ktory bedzie codziennie sprawdzal wszyskie indexy nieprzeczytanych postow i usuwal starsze niz np. aktualna data-30dni? sam z takiego crona korzystam.. tak samo z niektywnymi userami, po co przechowywac ich w bazie? ja tak to widze :> bo po co kombinowac? $ow = time(); // ostatnia wizyta $dp = time(); // czas napisania ostatniego posta w temacie $czytany = ($dp > $ow) ? "czytany.gif" : "nieczytany.gif"; Bikstopa: A jeśli ktoś nie przeczyta wszystkich tematów podczas 1 wizyty lub zostawi niektóre na później? Chyba najlepszym sposobem jest przechowywanie przeczytanych bądź nieprzeczytanych postów w tabeli z polami: - ID postu | ID użytkownika Gdy użytkownik kliknie "zaznacz wszystkie tematy jako przeczytane", wtedy w tabeli użytkowników ustawiasz mu odpowiedni wpisz i usuwasz wszystkie rekordy z tabeli wymienionej w wyższym akapicie. no, może i jest to skuteczny sposób, ale trzeba brać pod uwagę wielkość bazy po takim zabiegu. Przypatrzmy się 10 000 userom i nikt nie czytał ani jednego posta. Jak się baza rozrasta? Zwykła baza 10mb nie wystarczy :/ //Edit: Mozna tez zrobić limit, ale to kolejne zapytanie dla bazy ;) Użytkownik Petermechanic edytował ten post 20 lipiec 2007, 08:24 A może wystarczy do tabeli danego postu dodać komórkę, do której będzie dodawany ID usera (ale jako ciąg znaków), czyli na przykład1|324|64|22|79 - IMO proste, szybki i nie aż tak wielkie :) A w PHP explode() i po kłopocie :) Użytkownik DJ_ProG edytował ten post 20 lipiec 2007, 08:44 @ferrari: statystyki pewnego forum Tematy: 24,914, Posty: 432,714, Użytkownicy: 113,522 24914 tematow to ilosc cyfr ok 125000 113522 uzytkownikow to ilosc cyfr ok 650000 czyli w bazie trzeba by trzymac twoja metoda 81 250 000 000 batjow/75~ giga bajtow danych tylko informacyjnych czy dany post jest przeczytany czy nie, wg mnie to nie ma sensu... @tolszewski: nie wiem czy cron pójdzie na każdym serwerze :) chyba że jest możliwość jego uruchomienia na każdym (nawet darmowym) serwerze. @bikstopa: ten pomysł mi się podoba :) tylko czas na stronę,co by zmniejszyło (mam nadzieję) rozmiar bazy - gdy w temacie dużo postów - wystarczy id:czas zamiast id:id:id:id itd. @DJ_ProG: ten sposób to właściwie już znam - mam go w starym forum i próbuję zastąpić go czymś innym . . . jeżeli nic się nie znajdzie to pozostanę przy tym,ale jeszcze poeksperymentuje :) sorry za to,że bez cytatów,ale ta Opera ma jakieś błędy czy coś . . . MyBB robi to mniej więcej tak, jak mówi bikstopa - tabelka tid,uid,timestamp z datą ostatniego obejrzenia tematu tid przez użytkownika uid i porównywanie z aktualną datą. Nowy rekord w tabelce pojawia się dopiero po pierwszym otwarciu tematu przez usera. Równie dobrze można zamiast timestamp zapisywać id ostatniego posta, do jakiego user doczytał. Dla forum 25 000 tematow / 100 000 userów to jest w najgorszym wypadku kilkadziesiąt GB danych :> Ale nie widzę możliwości zejścia niżej, chyba że np. sciskając ID na 24 bity. Można to też wchrzanić userowi do cookies, niech się sam męczy. ew mozna zrobic tak jak jest w skrypcie przemo czyli tak A wie ktoś,w którym Ekspercie jest zbiór for dyskusyjnych? Bo zapomniałem,a wyszukiwarka w menu Eksperta u mnie nie działa. http://www.forummatrix.org/index.php @bikstopa: Ewentualnie,czyli jak bo to zdanie jest jakby niedokończone . . . http://www.forummatrix.org/index.php Niestety,nie mam dostępu do komputera więc nie skorzystam . . . |
|||
Sitedesign by AltusUmbrae. |