egy nagy tábla vs. sok ugyanolyan kicsi
Sziasztok! Egy elméleti beszélgetés közben merült fel egy olyan kérdés, hogy megéri-e egy nagy projekthez különálló adatbázisokat, különálló adattáblákat használni, vagy akármennyi adat is van, az ugyanolyan adatokat ugyanabba a táblába tartsuk-e?
Kicsit konkrétabban, vegyünk egy blog szolgáltatót, amely több ezer blog oldallal rendelkezik, ott több százezer blogbejegyzés, amelyekhez több millió hozzászólás tartozik. Mindez MySql adatbázissal.
Megéri azzal játszani, hogy ne többmilliós hozzászólás táblát használjunk, hanem blog-onként önálló táblákat, vagy akár blog-onként önálló adatbázisokat?
Első körben én arra gondolnék, hogy csak egy hozzászólás tábla van, akár több tíz/százmillió hozzászólással is, de gyakorlati tapasztalatom nincs ekkora rekordszámmal kapcsolatban.
Létezik olyan határ, ahol már azt mondjuk, hogy ne legyen egy tábla, hanem valami kerülőmegoldással több kisebb?
■ Kicsit konkrétabban, vegyünk egy blog szolgáltatót, amely több ezer blog oldallal rendelkezik, ott több százezer blogbejegyzés, amelyekhez több millió hozzászólás tartozik. Mindez MySql adatbázissal.
Megéri azzal játszani, hogy ne többmilliós hozzászólás táblát használjunk, hanem blog-onként önálló táblákat, vagy akár blog-onként önálló adatbázisokat?
Első körben én arra gondolnék, hogy csak egy hozzászólás tábla van, akár több tíz/százmillió hozzászólással is, de gyakorlati tapasztalatom nincs ekkora rekordszámmal kapcsolatban.
Létezik olyan határ, ahol már azt mondjuk, hogy ne legyen egy tábla, hanem valami kerülőmegoldással több kisebb?
Partícionálás
A partícionálást akkor is el lehet végezni, amikor már kész van egy adatbázis, így elég lesz akkor foglalkoznod vele, ha tényleg nagy a terhelés vagy sok a rekord.
Megelőztél. Igaz, én csak
Igaz, én csak annyit akartam írni, hogy "partícionálás" :)
Lehet belőle gond üzemeltetési oldalon, úgy emlékszem, de amennyit tanultam adatbázis normalizálás címszó alatt, annak alapján üzemeltetési szempontoktól függően vagy egy adatbázisba tennék mindent vagy minden (a példában szereplő) blog kapna önálló usert és adatbázist.
Hogy blogonként más táblanevek, azt kerülendőnek tartom (úgy általában a dinamikusan kezelt táblaneveket)
Köszönöm.
Maximum number of partitions
Nem fenékig teljfel
Nem lesznek közös indexek, a sok-sok tábla mindegyikén végig kell keressen az engine. Ugyanígy JOIN-nál sem tudnak segíteni az indexek. (Kicsit rég volt, lehet hogy nem pontosan amlékszem).
Persze különféle szituációkban hasznos lehet (ismerned kell az adatod és a queryjeid természetét), ha pl ország központú adatokat tárolsz, és nem lesz olyan lekérdezés ami egynél több országot érint jó ötlet lehet a partícionálás, de semmiképpen sem automatikus megoldás.
milyen a mostani?
Lehet, hogy itt egyszerűbb a külön adatbázis, azonos tábla szerkezet.
Viszont ha a jelenlegi rendszer egy db-re épült, akkor a partícionálás könnyebben kivitelezhető.
Még nincs...
Amit problémának érzek sok adatbázis esetén, hogy egy-egy apró adatbázis séma módosítás is túl nagy feladat lenne.
igen
A különböző db mellett Kb csak az szól, hogy HA leegyszerűsíti a jogok kezelését.
Külön táblákat semmiképp sem
A változásokat meg scripttel kezelném.
Szerintem így skálázhatóbb lenne a rendszer.
Többi tábla?
Par tiz
Ilyen formaban - sajnos - a kerdes ertelmetlen.
Re: Pár tíz
Mivel nem itt látok először
Mondjuk a blogos példánál maradva:
blogger1_felhasznalo
blogger1_bejegyzes
blogger1_hozzaszolasok
blogger2_felhasznalo
blogger2_bejegyzes
blogger2_hozzaszolasok
...
? Ez így elfogadott, korrekt megoldás? Csak mert úgy tűnt, rajtam kívül ez ellen senki szólt egy szót sem és felmerült bennem, hogy én tudom rosszul és mégsem annyira gázos az ilyen megoldás, mint ahogy azt képzelem.
Probléma
nem szerencsés a példa.
De mondok egy valós példát:
Logolásnál viszonylag bevett szokás hogy havonta/naponta/óránként új táblát nyitunk, és az előzött mindig aggregáljuk egy központi táblába. (friss táblában egyébként más select nincs, csak insert)
De ez is sok mindentől függ hogy megéri-e ezt csinálni. Még ha csak a MySQL-nél is maradunk, ott is verzióktól, beállításoktól (szerver és tábla), vagy hogy van-e replikálás és ha milyen, milyen beállításokkal.
Optimalizálásnál mindig, mindent ki kell mérni.
Mindig előjön... :)
Sharding