Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Oma koodattu foorumi

Sivun loppuun

aeolus [05.06.2005 12:10:23]

#

eli en enään tykkäisi käyttää noita phpBB:ita ja invisioneita, yabbeita, tai smfää, haluaisin väsätä itse oman foorumini, niinkuin ohjelmointiputkankin foorumi on ylläpito väsännyt itse, eli jelppiä tähän?

Mazuli [05.06.2005 12:42:33]

#

kannattaisi eka varmaan tutkia jonkin foorumin lähdekoodia, että saat jotain ideaa foorumin toiminnasta ja tietojen tallentamisesta. sitten alat miettiä miten tulet tallentamaan viestit,alueet,aiheet,käyttäjät ym, miten hoidat rekkaamisen ja loggaamisen ym. sitten lopuksi suunnitella ulkoasua...

ajv [05.06.2005 14:45:30]

#

Olet oikeilla jäljillä, nuo valmisfoorumit on IHMO aivan syvältä. Oman kun tekee, niin tietää tasan tarkkaan miten se toimii ja sen upottaminen muuhun sivustoon on 100 x helpompaa.

Ensimmäiseksi tosiaan kannattaa suunnitella se tietokanta. Tähän kannattaa tuhlata aikaa ja testata nopeudet myös suuremmilla datamäärillä. Tietokantana voi käyttää jopa flatfileä, mutta itse käyttäisin kyllä jotakin oikeaa tietokantaa. Kun tietokanta on valmis, loppu on pelkkää koodaamista :)

T.M. [05.06.2005 14:51:02]

#

Foorumien rakenne on tyyliin:

foorumi(
    alue(
        aihe(
            viesti()
            viesti()
            ...
        )
        aihe(
            viesti()
            viesti()
            ...
        )
    )
    alue(
        aihe(
            viesti()
            viesti()
            ...
        )
        aihe(
            viesti()
            viesti()
            ...
        )
    )
)

Ei tarkoita että nuo kaikki olisi yhdessä taulukossa...
Itse sitten keksit parhaimman tavan lukea alueet / aiheet / viestit

Mitä foorumien lähdekoodien lukemiseen tulee, niin en suosittele sitä käyttämään oppimiseen. Menee vain aikaa ja yöunet :)

Heikki [05.06.2005 15:33:27]

#

Aluksi kannattaa tosiaan tehdä selkeä suunnitelma tietokannasta. Jos käytössä on MySQL tai muu 'oikea' tietokanta, käytä sitä. Jos joudut käyttämään tiedostoja, tulee foorumista vain hankalammin koodattava (joudut parseroimaan) ja epävarmemmin toimiva. Kuitenkin homma onnistuu myös tiedostoilla.

Itse ainakaan en katsellut mitään valmiita koodeja, itse tekemällä ja miettimällä sekä oppii että tajuaa toiminnan.

Foorumi ei loppujen lopuksi ole mikään mahdoton homma, etenkin kunnon tietokantaa käytettäessä sen koodaus on jopa kohtalaisen helppoa, tosin työtä vaaditaan jonkin verran.

hunajavohveli [05.06.2005 15:47:04]

#

Tietokannoilla varmaan sujuisi kätevimmin, mutta minulla ei ollut sellaisia käytössä, joten koodasin foorumin pelkillä tiedostoilla. Rakenne siinä on semmoinen, että kaikki viestit ovat omissa tiedostoissaan. Aihetiedostoissa on peräkkäin viestien ID:t ja aluetiedostoissa peräkkäin aiheiden ID:t.

squid [05.06.2005 18:11:32]

#

Eikös tuo hunajavohvelin tapa tuota aika paljon tiedostoja, varsinkin jos on kyseessä isompi yhteisö? Tosin noin se taitaa olla helpointa.

Oma ehdotus on, että MySQL käyttöön, jos mahdollista.

ajv [05.06.2005 19:17:43]

#

ajv kirjoitti:

nuo valmisfoorumit on IHMO aivan syvältä.

Jopa IMHO siis :P

Biotank [06.06.2005 10:09:27]

#

Foorumini on nyt yksinkertaisuudessaan melkein valmis. Mietin vieläkin yhtä pulmaa:

Miten tallennan tietokantoihin onko käyttäjä lukenut aiheen? Teenkö uuden taulukon, jossa on topic_id, topic_msgs, user_id ja jokaisen alueen topic-tietokantakyselyssä olisi onko_lukenut-kysely (jossa tarkistetaan onko kirjautunut käyttäjä lukenut aiheesta x y viestiä)?

Olisiko mitään yksinkertaisempaa ratkaisua? :> Kannattaako ylipäätänsä tehdä tuollaista, jos foorumin käyttäjäkunta on varsin iso?

hunajavohveli [06.06.2005 10:17:38]

#

Putkassa on käytetty sitä ratkaisua, että aiheen viimeisimmän viestin id lisätään aiheen osoitteeseen. Osoite siis vaihtuu aina, kun lähetetään uusi viesti. Eli kun aihe luetaan, sen osoite tallentuu selaimen muistiin, ja se näkyy violettina. Kun lähetetään viesti, saadaan uusi osoite, jossa ei ole käyty, joten se näkyy sinisenä.

aeolus [06.06.2005 10:24:04]

#

hunajavohveli kirjoitti:

Putkassa on käytetty sitä ratkaisua, että aiheen viimeisimmän viestin id lisätään aiheen osoitteeseen. Osoite siis vaihtuu aina, kun lähetetään uusi viesti. Eli kun aihe luetaan, sen osoite tallentuu selaimen muistiin, ja se näkyy violettina. Kun lähetetään viesti, saadaan uusi osoite, jossa ei ole käyty, joten se näkyy sinisenä.

Hyvä idea.

aeolus [06.06.2005 15:23:07]

#

Saattaisin joskus keskikesällä alkaa väsätä sitä foorumia.

kayttaja-2791 [06.06.2005 18:50:01]

#

hunajavohveli kirjoitti:

Tietokannoilla varmaan sujuisi kätevimmin, mutta minulla ei ollut sellaisia käytössä, joten koodasin foorumin pelkillä tiedostoilla. Rakenne siinä on semmoinen, että kaikki viestit ovat omissa tiedostoissaan. Aihetiedostoissa on peräkkäin viestien ID:t ja aluetiedostoissa peräkkäin aiheiden ID:t.

Tässä huomionarvoinen seikka on se että tuhoton määrä eri tiedostoja vie järkyttävästi tilaa suhteessa siihen että kaikki viestit tallennettaisiin yhteen tai muutamaan tiedostoon.

tuomas [06.06.2005 19:21:37]

#

Mutta jos viestit olisi tallennettu yhteen tai muutamaan tiedostoon, esim. viestin muokkaus / poisto ominaisuuksien teko vaikeutuisi.

exAtuu [08.06.2005 03:21:36]

#

Lisäksi tiedämme, että PHP hidastuisi kovin jos alamme sillä lukemaan 50Mt tiedostoja, joten eiköhän hunajavohvelin ratkaisu ole se toimivin kun käytetään tekstitiedostoja.

Lebe80 [08.06.2005 09:33:48]

#

MasaVista kirjoitti:

Lisäksi tiedämme, että PHP hidastuisi kovin jos alamme sillä lukemaan 50Mt tiedostoja, joten eiköhän hunajavohvelin ratkaisu ole se toimivin kun käytetään tekstitiedostoja.

ei, eikös Hunajavohveli juuri tarkoittanut, ettei käytä tekstitiedostoja, vaan tietokantaa.

Lisäksi oikean tekstitiedoston löytäminen tarvitsee oman "tektitiedoston".

Muutenkin toimivan statistiikan tekeminen _vaatii_ tietokannan. Tekstitiedostohan täytyy avata kokonaan, ja jos aiheessa on monta viestiä, tuntuu jotenkin turhalta kahlata se koodissa läpi ja näyttää sitä vain muutamat (mitkä näkyy sivulla).

Teuvo Töhvelö [08.06.2005 10:33:38]

#

Itsekin olen tässä mietiskellyt keskustelufoorumin tekoa. Se on tosin täysin suunnitteluasteella, enkä tiedä vielä, viitsinkö sitä tehdä ollenkaan: ongelmaksi saattaisi muodostua juuri tuo tietokannan rakenne; jos on heikko ja hidas tietokanta, niin sitä on paha sitten myöhemmin ruveta korjailemaan...

Oliskohan mitään järkeä tehdä jokaiselle topikille oma taulu? Siitä tulisi tuhottoman paljon tauluja. Toisaalta, kannattaisiko sellainenkaan, että tehdään yksi viestit-taulu, johon on tallennettu jokaikisen topiikin viestit? Silloin tulisi kamala sähläys ID:iden kanssa. Mitäs mieltä olette?

Olga [08.06.2005 11:44:07]

#

Alueille oma taulu, ketjuille oma taulu ja viesteille oma taulu. Siinäpä se pääperiaatteissaan. Sähläystä ei tapahdu, vaan periaatteena on käyttää tietokannan tarjoamia mahdollisuuksia parhaan mukaan hyväksi.

ajv [08.06.2005 13:05:46]

#

Tuo Olgan tietokantarakenne lienee se paras ja itselläkin on se käytössä. Hieman vain kiinnostaisi tietää, miten esim. putkassa on toteutettu esim. "PHP ja Internet-ohjelmointi:"-alueen etusivulle tuo viestin aloittajan näkyminen ja viimeisimmän viestin kirjoittaja? Minun SQL-ymmärrykseni mukaan haettaessa "ketjut"-taulusta, ei ensimmäisen ja viimeisen viestin haku "viestit"-taulusta samalla kyselyllä onnistu mitenkään.

hunajavohveli [08.06.2005 18:07:44]

#

Lebe80 kirjoitti:

ei, eikös Hunajavohveli juuri tarkoittanut, ettei käytä tekstitiedostoja, vaan tietokantaa.

Niin, itselläni ei siis ollut sellaisia käytössäni, joten tein oman foorumini tiedostoilla, mutta sama periaate toimii varmaan myös tietokannoilla, joten niitä kannattanee käyttää.

kayttaja-2791 [08.06.2005 19:00:56]

#

MasaVista kirjoitti:

Lisäksi tiedämme, että PHP hidastuisi kovin jos alamme sillä lukemaan 50Mt tiedostoja, joten eiköhän hunajavohvelin ratkaisu ole se toimivin kun käytetään tekstitiedostoja.

50Mt tiedostoon mahtuu suuruusluokkaa useita satoja tuhansia viestejä... Kyllä siinä saa jo SQL:nkin säätöjä ja optimointeja alkaa katsomaan hyvin tarkkaan kun määrät ovat sitä luokkaa. Ja ei niitä tietoja niihin tiedostoihin ihan tyhmästi tarvitse tallentaa. Megatavujenkin tiedostoista saa ulos täsmälleen mitä haluaa kun vain kirjaa eri tietojen paikat ja pituudet bitteinä ylös erilliseen tiedostoon jonka perusteella fseek laittaa pointerin oikeaan paikkaan ja fread lukee vain juuri halutun datan verran tiedostosta. Tämän kaiken tekee helposti hyvä flatfile-tietokantafunktio (itsellä yksi käytössä, mutta lisenssi ei ole ainakaan vielä julkinen, luulisi tuolla periaatteella toimivia olevan netissä).

Mutta tietenkään mihinkään oikeiden tietokantasovellusten nopeuksiin ei päästä, mutta jos tiedostot ovat _ainoa_ vaihtoehto niin niitäkin voidaan käyttää nopeasti ja tilaa tuhlaamatta.

exAtuu [08.06.2005 21:20:53]

#

Lebe80 kirjoitti:

ei, eikös Hunajavohveli juuri tarkoittanut, ettei käytä tekstitiedostoja, vaan tietokantaa.

Mutta minähän puhuin että tuo on paras ratkaisu silloin kun _ei_ käytetä tietokantaa ja kun on _pakko_ käyttää tekstitiedostoja. Kyllä minä omankin foorumini olen tietokantojen päälle väsännyt, kun ne selvästi hakkaavat pelkät tekstitiedostot.

ajv [08.06.2005 23:17:24]

#

JTS kirjoitti:

50Mt tiedostoon mahtuu suuruusluokkaa useita satoja tuhansia viestejä... Kyllä siinä saa jo SQL:nkin säätöjä ja optimointeja alkaa katsomaan hyvin tarkkaan kun määrät ovat sitä luokkaa.

Oma ehkä liiankin optimoitu foorumitietokantani pystyi 50 000 käyttäjän, 100 000 viestiketjun ja miljoonan viestin (1 Gt) tietokannalla edelleenkin lataamaan sivut muutamassa millisekunnissa. Optimointi oli kohdistettu eniten sivunlatauksia sisältäville sivuille. Esim. Viestiketjujen määrää tietyllä alueella ei laskettu joka sivunlatauksella, vaan se oli aihealue-taulussa kiinteänä arvona ja se laskettiin vain uuden viestin saapuessa uudestaan, jota siis tapahtui paljon harvemmin, kuin perus-sivunlatauksia.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta