» »

Nekaj o zgradbi tega foruma

Nekaj o zgradbi tega foruma

Microsoft ::

Zanimata me dve stvari glede zgradbe takega foruma, kot je tale.

Prva stvar:
Tale forum ima 100.000 razlicnih tem. Vsaka tema ima svoje poste. Izpis vsake od teh tem pa se izvede preko URLja . Torej, za izpis teme skrbi recimo ena sama stran (izpisitemo.php), ki vzame en argument (threadID).

Tu me zanima sledece. V kaksni obliki so shranjene vse teme? A je vse to v eni bazi podatkov?
In potem, ko imas vse teme, kako ves, kateri posti pasejo v vsako od teh tem?
Pogledal sem, kako ima to nareto en free forum. Vsa sporocila se shranjujejo v access bazo, pri tem pa vsakem sporocilu doda Topice_ID stevilko. Ce gre za sporocila v isti temi, bodo imela isto stevilko. Kot recimo vsi, ki boste odgorovrili na tale post, bo vase sporocilo imelo isto stevilko, kot tole prvo.
Pri taksnem nacinu me predvsem skrbi performance. Ce je na STju 100.000 tem, potem je sigurno nekje 1.000.000 postov. Zdej, da bi mel eno samo tabelo z vsemi moznimi posti in sel pol iskat, kater od teh miljon postov spada v neko temo... je izvedljivo. Samo, vprasanje, kolko minut bos cakal na razultalt. Skratka, dvomim v hitrost taksnega izvajanja.
Kako torej razvrsacti (ce sploh) vsak post, da bo potem lazje skupaj dobit vse poste, ki spadajo v doloceno temo?

Potem se ena majhna zadevica glede texbox-a, kamor vpisujes novo sporocilo. Videl sem, da se nova vrstica shrani kot 'br' (namesto ' je spicast oklepaj), tako da je v bazi poleg napiasnega sporocila se nekaj html kode. In potem ti pri izpisu ni treba skrbeti za nove vrstice. Je to nacin, ki je pravi, ali se uporablja se kaka druga metoda.

Druga stvar:
Kot sem zgoraj napisal, se tema z vsemi sporocili izpise tako, da gres na ...izpisitemo.php?threadId=xxxxxx. Ampak, ko jaz zahtevam izpis teme, bom dobil drugacne moznosti, kot vsak drug.
Vsak uporabnik bo dobil pri svojih sporocilih moznost urejanja le teh. Recimo, Gandalfar, pa bo poleg tega dobil se globalno moznost urejanja in brisanja sporocil, zaklepa in preminovanje teme, pa se kaj.

Tu me zanima to. Kako in kdaj se izvede preverjanje, kater uporabnik zahteva neko temo?

Pa tudi to, v kaksni obliki so shranjene te lastnosti uporabnika. Recim, jaz sem uporabnik, nekdo drug je policaj, ta tretji pa je pisun. A so sedaj v bazi (ali kje) char zapisi (user, policaj, pisun,..), int zapisi (0,1,2,...) ali kaj drugega?
Sicer, tole zadnje dovoljuje samo en profil, ker je samo en stolpec. Razen, ce ne naredis moznosti 'pisundAndPolicaj' ali '3'.

Bo zaenkrat dovolj. Pa dobrojutro vam, in lahko noc meni.:P


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

darh ::

1. Osnove SQL-a, indexov in dobro spisanih poizvedb v bazi.. stvar še pol sekunde ne traja če je še toliko vnosov
2. Rešitev z pravicami je monogo, med najelegantneše spadajo recimo ACLji (to kar ima tudi NTFS - preveri npr msdn dokumentacijo), in če se ne motim ST uporablja ravno to. Seveda se da stvar tudi bolj preprosto rešit - poleg tabele z uporabniki in oddelki imaš še tabelo ki zrušuje ta dva podatka in dodaten podatek o pravicah uporabnika v tem oddelku (tako dobiš moderatorje), lastnika teme itak veš, tajno policijo pa označiš z zastavico na uporabniku
Excuses are useless! Results are priceless!

OwcA ::

Videl sem, da se nova vrstica shrani kot 'br' (namesto ' je spicast oklepaj), tako da je v bazi poleg napiasnega sporocila se nekaj html kode. In potem ti pri izpisu ni treba skrbeti za nove vrstice. Je to nacin, ki je pravi, ali se uporablja se kaka druga metoda.

Sporočilo, ki bo prikazano in celotna zgodovina oddanih sporočil se se shranjujeta ločeno, zato da ni potrebno vsakič znova obdelati st.tagov, smajlijev in podobne navlake.
Otroška radovednost - gonilo napredka.

Loki ::

poglej, kako je narejen phpbb (struktura baze & co). ima tudi zelo mocan urejevalnik pravic (katerega si tudi poglej).

Trubadur ::

xbite kaj pa tista tvoja metoda uporabljena pri open source SLP?

OwcA ::

Tu si lahko prebereš malo o tem, kako so implementirani indeksi v PostgreSQL (le-to uporabljamo mi).
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Microsoft ::

Ok, recimo konkretno za oddelek Pomoč in nasveti.

- A so vse teme shranjene v eni sami tabeli?
- A so vsi posti ene teme v eni sami tabeli? Ali pa so vsi posti tega oddelka v eni sami tabeli?
- Ali pa so vsi posti v eni sami tabeli, pri tem pa so vsi posti, ki spadajo pod eno samo temo, v eni sami vrstici v tabeli?

Nisem se gledal, vendar kaksne so kaj omejitve dolzine stringa, ki ga lahko das v podatkovno bazo?


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

T(he) Boss ::

Mene pa zanima ta rdeca crta. Je zelo uporabna in zanimiva, samo dokaj redka na forumih. Je mogoce razlog v tem, da je zaradi vizualne malenkosti (ki je zgolj to samo na pogled, drugace pa mnogo vec) baza prevec obremenjena? Ker ce pogledamo tako cez prst, potem mora bit v vsaki temi shranjena pozicija oz. cas, kdaj jo je uporabnik gledal, potem pa ima vsak post shranjen cas, kdaj je nastal in se potem glede na to narise crta?

Gandalfar ::

T(he) Boss: ja, rdeca/modra crta obcutno vpliva na velikost baze in stevilo cpu ciklov, ki jih mora server izvajat

Dman ::

"Rdeča črta" je zelo dober podatek za uporabnika. Ne vem pa zakaj bi bilo toliko več shranjenih podatkov, glede na to, da večina ljudi ne pogleda vse teme, ampak le nekaj in se samo tam zapiše, do katerega sporočila je bila tema za tega uporabnika že videna.

OwcA ::

A so vse teme shranjene v eni sami tabeli?

Ja.

A so vsi posti ene teme v eni sami tabeli? Ali pa so vsi posti tega oddelka v eni sami tabeli?

Vsi odgovori so v eni tablei.

Ali pa so vsi posti v eni sami tabeli, pri tem pa so vsi posti, ki spadajo pod eno samo temo, v eni sami vrstici v tabeli?

Glej zgoraj, s tem, da je vsak odgovor svoja vrstica, če že hočeš.

Ne vem pa zakaj bi bilo toliko več shranjenih podatkov, glede na to, da večina ljudi ne pogleda vse teme, ampak le nekaj in se samo tam zapiše, do katerega sporočila je bila tema za tega uporabnika že videna.

Kar računaj. Pribljižno 1000 odgovorov na dan, nekaj 10.000 ogledov ... Se nabere.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Gandalfar ::

Zato, ker si vecina forumov zapomni zadnji cas obiska foruma in na podlagi tega izracuna kere so nove teme. V primeru da gres na forum in ga potem zapustis bodo vse teme kar naenkrat 'prebrane' ceprav jih nisi videl.

Tako recimo phpbb2 dela. En podatek nekje. Ce bi hotel modro crto bi pa moral vedet zame za vsako temo, ki sem jo kliknil in kdaj.

Nerdor ::

Gandalfar: Zanimivo. A tako deluje tudi ST Forum ? To v zvezi modre črte?

Gandalfar ::

Se enkrat preberi kaj sem napisal.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
!

Prijavljanje napak (strani: 1 2 3 471 72 73 74 )

Oddelek: Slo-Tech
3669527902 (5447) bastadu
»

Kakšnih sprememb si želite? (strani: 1 2 )

Oddelek: Slo-Tech
928438 (6813) Bor H
»

pa še 2 PHP problema ... (strani: 1 2 )

Oddelek: Programiranje
503005 (2554) rasta

Več podobnih tem