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?
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...
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 :)
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 :)
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.
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.
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 kirjoitti:
nuo valmisfoorumit on IHMO aivan syvältä.
Jopa IMHO siis :P
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?
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ä.
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.
Saattaisin joskus keskikesällä alkaa väsätä sitä foorumia.
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.
Mutta jos viestit olisi tallennettu yhteen tai muutamaan tiedostoon, esim. viestin muokkaus / poisto ominaisuuksien teko vaikeutuisi.
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.
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).
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?
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.
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.
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ää.
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.
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.