Jos pitää tallentaa Helsingin, Vantaa ja Espoon asukkaiden nimi ja puhelintiedot tietokantaan, ja haku tapahtuu nimen perusteella ja paikkakunta on aina etukäteen tiedossa. Niin kannattako tallentaa kaikki tiedot samaan tietokantaan, vai tehdä kolme tietokantaa, erikseen Helsinkiläisille, Espoolaisille ja Vantaalaisille?
Haussa voi tietenkin helposti erottaa paikkakunnat, mutta entäs suorituskyvyn kannalta? Jos kaikki on samassa tietokannassa niin pitää enemmän dataa lukea puskuriin, vai onko sillä suurtakin merkitystä?
Rivejä tietokannassa tulee olemaan < 1mil, ja tietokanta on MySQL
Iso tietokanta
3
401
Vastaukset
- tohlo
Sanoisin että ehdottomasti kaikki kannattaa laittaa samaan tietokantaan. Ei muutaman sadan tuhannen rivin lisäys paljoa hauissa lisää tee, kunhan taulurakenne ja indeksit on muuten laitettu järkevästi tehostamaan käyttöä. Koko Suomen väestökin todennäköisesti kannattaa laittaa yhteen ja samaan tietokantaan (helpottaa mm. siinäkin vaiheessa kun ihmiset muuttavat paikasta toiseen).
Samoin käyttöjärjestelmäalusta välimuisteineen tuskin enää nykyisin vaikuttaa niin paljoa kuin ennen. Wintoosissa ja Linuxeissa ym. on systeemin puolesta välimuisteja, joiden seurauksena levyltäluvut ovat niin nopeita kuin ne nyt ylipäätään on mahdollista saada.
Ennen kaikkea siis taulujen kenttien tyypit, viite-eheydet ja indeksit kannattaa laittaa kuntoon. - The Rat
Taulu (ei siis tietokanta) alkaa olla "iso" kun rivejä on useita kymmeniä miljoonia.
Tietokannan kokoa mitataan usein sen kuluttamina tavuina. Itse pidän rajana jotain viittä gigatavua, jossa vaiheessa kanta alkaa olla iso - olettaen että siihen on tallennettu vain perustietoista tavaraa (ei esim. kuvia). Tuokin toimii vielä varsin nopesti ihan peruspalvelimella kunhan muistia riittää.
Tuollainen alle miljoonan rivin taulu ei ole mikään ongelma. Indeksit vain kuntoon (paikkakuntaa ei minusta kannata indeksoida, nimi riittää - siis sukunimi varmaan?) - rmac
"Haussa voi tietenkin helposti erottaa paikkakunnat, mutta entäs suorituskyvyn kannalta? Jos kaikki on samassa tietokannassa niin pitää enemmän dataa lukea puskuriin, vai onko sillä suurtakin merkitystä? "
SQL:n nopeuden kannalta yksi WHERE on aika vähämerkityksinen kunhan query optimizer toimii. Kaupungin hakemiseen voi olla parempi käyttää valikon listindexiä ja TINYINT -tyyppiä kuin stringiä - tämänkin voi testata käytännössä onko sillä merkitystä. Jos SQL on yhtään monimutkaisempaa kannattaa lausekkeet käydä huolellisesti läpi kantaa vastaan ja katsoa mikä haut tuntuvat raskailta.
Isossa taulussa kannattaa käydä läpi tietokantamoottorin asetukset (ja varmasti ymmärtää mitä mikäkin parametri tarkoittaa). Tietokantahan on siitä kätevä paikka varastoida dataa että overheadiä on aika vähän. Jos datatyypit on mietitty kunnolla ja sarakkeita ei ole paljon miljoonan rivin taulu ei välttämättä vie muistia muutamaa kymmentä megaa enemmän. Nyrkkisääntö tietokantaalustoissa muutenkin on, että koko kannan tulee mahtua muistiin. Sehän ei ole ongelma kun palvelimiin ladataan pari gigaa muistia jo ihan vain varmuuden vuoksi.
Viimeisimpänä mutta ei vähäisimpänä pitää muistaa myös backup. Perinteisesti mySQL on ollut heikoimmillaan silloin kun puhutaan tavanomaisista DBMS -apuprosesseista kuten online backup, statistiikkojen päivitys, replikointi, synkronointi jne. Kantaa suunniteltaessa pitää siis myös katsoa miten online backup toimii ja toimiiko myös sen palauttaminen.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Oletko kertonut jo muille tunteistasi?
Ystävillesi esimerkiksi? Minä en ole vielä kertonut kenellekään tästä meidän jutusta.774622- 1801897
- 1241600
- 1251134
Miten minusta tuntuu että kaikki tietää sun tunteista mua kohtaan
Paitsi suoraan minä itse, vai mitä hlvettiä täällä tapahtuu ja miksi ihmiset susta kyselee minulta 🤔❤️161081- 351036
- 78933
- 52896
Hyvää huomenta!
Mietin miten suhtaudut minuun, jos kerron tunteista. Voinko enää sen jälkeen olla samassa paikassa kanssasi, jos koet as78872- 4838