Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Keskustelufoorumiin "uudet viestit"-ominaisuus

antsa [04.11.2007 02:25:44]

#

Kuten kaikki varmaan ovat nähneet, on lähes kaikissa noissa suuremmissa keskustelufoorumisysteemeissä (PHPBB, YaBB, SMF jne...) se ominaisuus, että käyttäjä näkee, mitä viestejä hän ei ole vielä lukenut (luetulla threadilla erilainen ikoni kuin lukemattomalla)

Olen aina välillä miettinyt, miten kyseisenlainen ominaisuus olisi järkevintä koodata? Jos joku on joskus tehnyt tällaisen ominaisuuden johonkin foorumiinsa, kuulisin mielelläni, miten se on toteutettu.

Systeemi, joka itselläni tuli päällimmäisenä mieleen, perustuisi tietokantaan luotavaan tauluun, johon lisättäisiin aina merkintä, kun kukin käyttäjä avaa jonkin viestiketjun. Tällaisesta toteutuksesta vain seuraa järjettömän suurelta kuulostava määrä tietokantarivejä; jos nimittäin olisi esimerkiksi 1000 käyttäjää ja 10 000 viestiketjua ja kaikki lukisivat kaikki threadit, tulisi pelkästään sillä tauluun jo 10 000 000 riviä (ja viestien/käyttäjien yhä lisääntyessä myös tuon taulun rivimäärä kasvaisi nopeasti).
Ei kuulosta minun korvaani järkevältä toteutustavalta, kun ottaa huomioon, että ko. ominaisuus ei edes ole foorumin toiminnan kannalta kovin tärkeä..

Niko [04.11.2007 10:55:50]

#

Itse tekisin juuri tavalla jonka mainitsit.

Tuo 10 000 ei ole paljoa.
3 kokonaislukua (käyttäjä, aihe, viimeisin viesti) on helposti alle 50 tavua joten noin. 500 kilotavua menisi tohon 10k (ilman indeksejä).

Lisäksi, kun viestejä luetaan niin voi tutkia, että onko kaikki viestit kys. alueelta luettu jos on, viesti kohtaiset voidaan korvata yhdellä merkinnällä "kaikki viestit ennen x luettu alueelta y" (tai jos käyttäjä merkkaa kaikki viestit luetuksi).

Antti Laaksonen [04.11.2007 12:26:46]

#

Tuollainen systeemi vie väistämättä paljon tilaa tietokannassa, koska jotenkin ne tiedot täytyy tallentaa, vaikka toteutus olisi millainen.

Rivien määrää vähentää, että moni käyttäjä vierailee keskustelussa ani harvoin, ja lisäksi esim. kuukauden vanhat viestit voidaan merkitä kaikille vanhoiksi. Jos keskustelussa on 1000 käyttäjää ja 10000 viestiketjua, ehkä 100 käyttäjää lukee viestejä vakituisesti ja kuukaudessa tulee 200 uutta viestiketjua. Tällöin tarvittava rivien määrä on 100 * 200 = 20000, mikä kuulostaa jo mahdolliselta.

antsa kirjoitti:

Ei kuulosta minun korvaani järkevältä toteutustavalta, kun ottaa huomioon, että ko. ominaisuus ei edes ole foorumin toiminnan kannalta kovin tärkeä..

Minä olen aika lailla samaa mieltä, ja siksi tätä ominaisuutta ei ole Ohjelmointiputkan keskustelussa. Yksi vaihtoehto on muuttaa viestiketjujen linkkejä niin, että ne vaihtuvat uuden viestin tullessa. Tällöin käyttäjä näkee linkin väristä, onko hän jo lukenut uuden viestin. Tosin tämä ratkaisu toimii vain silloin, kun käyttäjän tietokone ja selain pysyvät koko ajan samana.

Niko kirjoitti:

Lisäksi, kun viestejä luetaan niin voi tutkia, että onko kaikki viestit kys. alueelta luettu jos on, viesti kohtaiset voidaan korvata yhdellä merkinnällä "kaikki viestit ennen x luettu alueelta y"

Periaatteessa idea on ihan ovela, mutta kuinkahan on käytännön toteutuksen laita? Minusta vähän tuntuu, että järjestelmästä tulisi helposti todella monimutkainen ja toimivuuskin voisi olla hieman niin ja näin.

ajv [04.11.2007 14:09:02]

#

Kuhassa on tuntunut olevan ihan toimiva toteutus.

Merri [04.11.2007 18:53:41]

#

phpBB2:ssa on pari eri tapaa merkata uusia viestejä. En muista miten homma tarkkaan toimii, mutta tietyin väliajoin asetetaan päivämäärä, jonka pohjalta katsotaan onko viesti uusi vaiko ei (esim. edellinen käyntikerta; tämä tosin vaatii sekin hieman omaa miettimistään, miten tunnistaa käyntikerrat toisistaan). Sen lisäksi tallennetaan kekseihin merkintöjä keskustelualueista ja viestiketjuista, jotka on luettu. Tämä toimii hyvin, sillä ihminen ei vaan pysty aiheuttamaan niin paljon keksejä että yhteys kuormittuisi liikaa.

Viestien merkkaaminen on kuitenkin aina useamman eri tavan yhdistelmää. Jossakin vaiheessa on kuitenkin aina pakko merkata lukemattomia viestejä luetuksi, jotta kuorma pysyy kevyenä.

Wizard [06.11.2007 15:36:44]

#

Kokeilkaapa lähestymistapaa:

'Edellisen käyntikerran jälkeiset lukemattomat viestit'

Näin ei tarvita ylimääräisiä tauluja: tarvitaan vain aika-arvo milloin käyttäjä on kirjautunut sisään viimeksi ja sitten sitä verrataan niihin viesteihin jotka ovat päivittyneet/lisätty sen jälkeen.

Toimii "sinne päin" eikä vaadi mahdottomia. Aukoton järjestelmä vaatii valtavia tauluja sekä indeksejä ja hidastaa aika hyvin todella ruuhkaisella palstalla.


--W--

Vastaus

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

Tietoa sivustosta