Pereiti prie turinio

MySQL galimybės


Rekomenduojami pranešimai

Sveiki :),

 

Norėčiau sužinoti, kokios yra MySQL Duomenų bazės galimybės, nes internete nepavyko rasti atsakymų į mano klausimą. Taigi, norėčiau paklausti kiek duomenų bazė gali atlaikyti įrašų, ar tai labai sulėtins tinklapio veikimą ir pan. Na pavyzdžiui paimkime žinučių sistemą. Pagalvojus kiek vienas vartotojas gali parašyti žinučių kitam vartotojui per dieną tai jau yra šis tas, o jeigu tai darytų 1000 ar net 10 000 vartotojų... Sunku išsivaizduoti kaip turėtų veikti svetainė su tiek įrašų :) o kur dar visa kita informacija.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

MySQL tikrai pati neturi tokių mažų ribų, kaip 1000 vartotojų po keletą žinučių per dieną.

 

Apskritai, kai kalbame apie (rimtas, laiko patikrintas) DB, viskas priklauso nuo, sakyčiau, poros faktorių: sysadmino optimizacijos skillų ir hardware. :) Galbūt kas palaikys tai per didele generalizacija ir ką nors pridės, bet iš esmės visa kita susieina į tuos du dalykus.

 

Pats MySQL software nėra automatiškai kažkokia riba, begalės didelių tinklalapių naudoja MySQL. Žinoma, didelės kompanijos turi gerus adminus ir pinigus hardware'ui (vėlgi, grįžtam prie tų dalykų) :)

 

Todėl iš esmės to ir reikia: jei administruosi pats, tai paskirti pakankamai laiko mokymuisi ne vien kaip parašyti vieną ar kitą užklausą, tačiau apie MySQL (ar apskritai OS, serverio) optimizavimą ir, aišku, jei hardware nebeatlaiko – pasirūpinti nauju.

 

Bet tas problemas spręsk, kai iš tikrųjų turėsi 10000 labai aktyvių vartotojų kasdien. "Premature optimization sucks" :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Viskas priklauso nuo įrašų ilgio, parametrų. 100k įrašų (kad ir vartotojų) be jokių ten didelių pribombasų (id, slapyvardis, slaptažodis, paštas, parametras_1, parametras_2) nesvers nei 20MB... O 20MB - lašas jūroje. Yra duomenų bazių su 100MB, yra su 1GB. Tokios duomenų bazės dar palyginus normalios, o įrašų gali turėti ir po milijoną ir daugiau. Įrašų limitas toks didelis, kad gali užsimerkti ir negalvoti apie tai (mažiausias skaičius šioje bazėje - 4 milijardai).

 

Įrašų kiekis ir gausa, parametrų tipai lemia, sakyčiau, nedaug. Visą spartą (ko tu ir klausi) lemia pats skriptas. Jeigu gerą kodą sukursi, tai ir su milijonų įrašų niekas tau ten labai nelagins. Aišku, visada yra ribos ir nesitikėk, kad pats geriausias skriptas apsaugos nuo bent minimalaus lago, kuomet duomenų bazė milžiniška.

 

P.S. Kaip ir minėjo kolega Silkė, hardware - kas be ko.

Redagavo Galantion
Nuoroda į pranešimą
Dalintis kituose puslapiuose

10 000 čia dar lengvas skaičius....yra ir su milijoniniais įrašais, bet aišku, tokios bazės jau ne ant paprasto serveriuko sukasi

 

Na bet paėmus, kad ir 10 000 žmonių ir jei jie parašytų na tarkim po 100 žinučių, per dieną tai jau yra 10 000 * 100 = 1000000, per mėnesį 1000000 * 31 = 31 000 000 įrašų :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O šiaip jau niekas tau netrukdo pasidaryti tokias simuliacijas (darau prielaidą, kad jei tokie klausimai kyla, programuoti jau moki). Įsiterpk tuos 31 mln. įrašų ir tada leisk užklausas, stebėk, kas vyksta.

 

BET! Kai pamatysi, kad užklausa vykdosi lėtai, tai nereiškia, kad MySQL su tiek nesusitvarko (nes milijonai – dar ne riba). Tai tiesiog reiškia, kad kažko neoptimizavai. Galbūt pati užklausa neefektyviai parašyta, galbūt nesudėti indeksai, galbūt netinkamas mysql configas. Vėlgi, viskas susieina iki to, kiek mokėsi optimizuoti. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Viskas priklauso nuo įrašų ilgio, parametrų. 100k įrašų (kad ir vartotojų) be jokių ten didelių pribombasų (id, slapyvardis, slaptažodis, paštas, parametras_1, parametras_2) nesvers nei 20MB... O 20MB - lašas jūroje. Yra duomenų bazių su 100MB, yra su 1GB. Tokios duomenų bazės dar palyginus normalios, o įrašų gali turėti ir po milijoną ir daugiau. Įrašų limitas toks didelis, kad gali užsimerkti ir negalvoti apie tai (mažiausias skaičius šioje bazėje - 4 milijardai).

 

Įrašų kiekis ir gausa, parametrų tipai lemia, sakyčiau, nedaug. Visą spartą (ko tu ir klausi) lemia pats skriptas. Jeigu gerą kodą sukursi, tai ir su milijonų įrašų niekas tau ten labai nelagins. Aišku, visada yra ribos ir nesitikėk, kad pats geriausias skriptas apsaugos nuo bent minimalaus lago, kuomet duomenų bazė milžiniška.

 

P.S. Kaip ir minėjo kolega Silkė, hardware - kas be ko.

 

Na paskaičius šį komentarą tikrai nuvertinau duomenų bazę :) Tačiau ar tiek daug įrašų gali tilpti vienoje lentelėje, tiksliau ar yra kokie apribojimai ir pan.?

 

O šiaip jau niekas tau netrukdo pasidaryti tokias simuliacijas (darau prielaidą, kad jei tokie klausimai kyla, programuoti jau moki). Įsiterpk tuos 31 mln. įrašų ir tada leisk užklausas, stebėk, kas vyksta.

 

BET! Kai pamatysi, kad užklausa vykdosi lėtai, tai nereiškia, kad MySQL su tiek nesusitvarko (nes milijonai – dar ne riba). Tai tiesiog reiškia, kad kažko neoptimizavai. Galbūt pati užklausa neefektyviai parašyta, galbūt nesudėti indeksai, galbūt netinkamas mysql configas. Vėlgi, viskas susieina iki to, kiek mokėsi optimizuoti. :)

 

Na taip, visgi viskas susimeta į tavo parašytą script'ą, šitas tai beabėjo :) na programuoju gan neblogai, todėl iškilo toki klausimai, nes neteko susidurti su tokiu kiekiu įrašų

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na paskaičius šį komentarą tikrai nuvertinau duomenų bazę :) Tačiau ar tiek daug įrašų gali tilpti vienoje lentelėje, tiksliau ar yra kokie apribojimai ir pan.?

 

Ne visiški ekspertai, nesigilinantys į skaičius žmonės linkę sakyti, jog nėra limito, kiek įrašų gali tilpti į lentelę - viskas priklauso nuo to, kokio dydžio HDD turi.

 

Vis dėlto, priklausomai nuo tam tikrų parametrų mažiausias limitas - 4.3 milijardo, didžiausias ~ 18500000000000000000. Čia jau net nelabai įvardinsiu kaip šis skaičius vadinasi. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na paskaičius šį komentarą tikrai nuvertinau duomenų bazę :) Tačiau ar tiek daug įrašų gali tilpti vienoje lentelėje, tiksliau ar yra kokie apribojimai ir pan.?

https://dev.mysql.com/doc/refman/5.6/en/table-size-limit.html

 

Turėk omeny, kad yra technikų vieną lentelę paskirstyti per kelias DB (sharding), kas dar išplečia šiuos limitus.

 

Bet pala, rimtai, dėl ko tu taip baiminiesi? Tarkim, žinutė sveria 10kB (net blogiausiu atveju tai yra keli tūkstančiai unikodo simbolių). Tada vis tiek į tuos 4 TB (kas yra ext3 limitas) tilps beveik pusė milijardo žinučių. O tuo labiau:

With JFS and XFS, petabyte and larger files are possible on Linux.

Pe-ta-bai-tai!

 

Na taip, visgi viskas susimeta į tavo parašytą script'ą, šitas tai beabėjo :)

Pastebėk, kad daug kur miniu būtent DB serverio (ir apskritai serverio) optimizavimą – ne vien tavo programos ir jos užklausų. Vietų, per kur optimizuoti – pilna: MySQL konfigas, OS nustatymai, failų sistema, ...

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ar "MySQL patemps" - klausimas kyla tik prie didelių skaičių, pvz milijono įrašų lentelėje.

 

O šiaip tai ne MySQL turi patempti kaip variklis, bet ir pati duomenų bazė turi būti optimizuota.

 

Konkretus pvz apie tavo žinutes, jeigu tu DB lentelėje saugosi [iD, Vartotojo ID, Žinutė] tada ok, bet jeigu saugosi pvz [iD, Vartotojo VARDAS, Žinute] (esu tokių variantų matęs) ir tada darysi nuolat "select * from zinutes where vartotojo_vardas = 'xxx' tai suksis žymiai lėčiau negu pagal vartotojo ID.

 

Mintis kokia - kad jeigu jau pradeda kažkas lėčiau veikti, tai problema gali būti tikrai ne dėl to, kad pasirinkai MySQL, o ne kokią kitą DB, reikia pačią DB struktūrą ir užklausas žiūrėti. O po to jau taip - kešavimas, hardware, PHP kodo optimizavimas.

 

Mano patirtis buvo su vienu projektu, kuriame buvo 8 milijonai įrašų dažnai naudojamoje MySQL lentoje, bet kadangi buvo didelis puslapio lankomumas (20k per parą), tai buvo labai daug padaryta iš PHP pusės - kešavimas visoks ir kiek įmanoma mažesnis duombazės naudojimas iš viso.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

https://dev.mysql.com/doc/refman/5.6/en/table-size-limit.html

 

Turėk omeny, kad yra technikų vieną lentelę paskirstyti per kelias DB (sharding), kas dar išplečia šiuos limitus.

 

Bet pala, rimtai, dėl ko tu taip baiminiesi? Tarkim, žinutė sveria 10kB (net blogiausiu atveju tai yra keli tūkstančiai unikodo simbolių). Tada vis tiek į tuos 4 TB (kas yra ext3 limitas) tilps beveik pusė milijardo žinučių. O tuo labiau:

 

Pe-ta-bai-tai!

 

 

Pastebėk, kad daug kur miniu būtent DB serverio (ir apskritai serverio) optimizavimą – ne vien tavo programos ir jos užklausų. Vietų, per kur optimizuoti – pilna: MySQL konfigas, OS nustatymai, failų sistema, ...

 

Dabar jau nesibaiminu :) viską supratau, ačiū už paaiškinimus

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...