Terve
Tässä taas hieman projektia pukkaa ja tulin hieman miettineeksi tietokantaratkaisuja. Eli, järjestelmään lähetetään ilmoituksia asiakkaan toimesta ja niihin pystyy vastaamaan. Toiminta on siis vähän samanlainen kuin foorumeissa (Thread --> reply, reply)
Kuitenkin tulin miettineeksi jos järjestelmässä on esim. 1500 ilmoitusta ja jokaisessa näistä on esimerkiksi 5 vastausta. Tämä tekee jo siis 7500 vastausta. Onko siis järkevintä tehdä taulut: ilmoitukset ja vastaukset? Tämähän kuormittaisi tietokantaa aivan luvattomasti jos, joka kerralla käydään selectillä kaikki 7500 vastausta läpi kun katsellaan jotain ilmoitusta.
Onko tämä silti paras keino vai onko vaihtoehtoisia menetelmiä?
On tuo paras keino. Ja indeksoimalla vastauksista ilmoituksiin viittaavan sarakkeen, ei noita kaikkia 7500 käydä läpi joka kerta. Useimmiten myös kummankin taulun Id-kentät kannattaa indeksoida.
Ja hakuhan kahdesta taulusta menee sitten ihan simppelillä JOINilla.
Niin, et maininnut tietokantaa, mutta MySQL:n dokumentaatiosta löytyy ihan hyvää kannasta riippumatonta perusinfoakin:
http://dev.mysql.com/doc/refman/5.1/en/
Ei se kuormita tietokantaa juuri lainkaan, kunhan käytät indeksejä järkevästi. Eli vaikka teet automaattisesti arvon antavan VastausID- ja IlmoitusID-kentät, jotka sitten ovat indeksinä (vaikka primary keynä). Noiden indeksien idea on sitten että kaikki mahdolliset haut tehdään niiden avulla, aina kun mahdollista, sillä niiden käyttö on erittäin nopeaa. Kun kannasta haetaan indeksin perusteella, ei muita arvoja tarvitse käydä lävitse laisinkaan, sillä tietokantamoottori pitää kirjaa siitä että missä mikäkin indeksi onkaan (vertaa vaikka kirjojen sisällysluetteloon).
Sen sijaan jos indeksejä ei ole, tai niitä ei käytetä haussa, pitää tietokantamoottorin kahlata kaikki tietokannan (tai taulun) arvot lävitse. Ja tämä on se operaatio joka menee hitaaksi kun arvoja alkaa olemaan kymmeniä tuhansia ja enemmänkin.
Meni ehkä vähän offtopiciksi indekseistä paasaamiseksi, mutta kuitenkin ne ovat todella tärkeässä asemassa mikäli haluaa käyttää niitä tietokantoja vähänkään kuten on tarkoitettu.
Indeksin käytöstä vielä sen verran, että aina se ei ole järkevää. Luonnollisesti indeksien päivittäminen on hidasta, koska silloin JTS:ää mukaillen "päivitetään sisällysluettelo". Jos tietokannan käyttötarkoitus on sellainen, että sinne tuupataan ja sieltä vaikka poistetaan jatkuvasti dataa ja raportti luodaan kerran päivässä, ei kannata indeksoida käytännössä mitään, sillä indeksit joudutaan laskemaan aina muutoksen yhteydessä uudestaan. Mutta yleensähän webbisovelluksissa kannan käyttötarkoitus on juuri päinvastainen.
Tuo auttoi paljon. Täytyykin vähän tutkiskella näitä indexejä ja niiden toimintaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.