Myslím, že zde máte pár pojmů popletených.
Všechna vaše data jdou do jedné databáze (neboli schématu). V databázi můžete mít tabulky.
např.
table employee
id integer
name varchar
address varchar
country varchar
table office
id integer
employee_id integer
address varchar
Uvnitř tabulek máte pole (id, name, address)
aka columns.A tabulky mají jeden nebo více řádků.
Příklad pro zaměstnance tabulky:
id name address country
----------------------------------------------------
1 John 1 Regent Street UK
2 James 24 Jump Street China
3 Darth Vader 1 Death Star Bestine, Tatooine
Tolik k základům.
Proč rozdělení
Nyní předpokládejme, že máme v databázi mnoho a mnoho lidí (řádků).
Pamatujte si, že jde o galaktickou databázi, takže máme 100 miliard záznamů.
Pokud chceme prohledávat tak rychle je hezké, když to můžeme dělat paralelně.
Takže rozdělíme tabulku (řekněme podle země) a pak můžeme mít x serverů, které budou hledat každý v 1 zemi.
Rozdělení mezi servery se nazývá sharding
.
Nebo můžeme rozdělit např. historická data podle roku, takže nemusíme procházet vše data jen proto, abyste získali nejnovější zprávy. Zbývá nám projít jen přepážkou pro letošní rok. Toto se nazývá partitioning
.
Jaký je velký rozdíl mezi sharding
stačí partitioning
?
Sharding
V sharding
předpokládáte, že vše vaše údaje jsou relevantní a stejně pravděpodobné, že budou dotazovány. (např. google může očekávat, že budou dotazována všechna jeho data; archivace části dat je pro ně k ničemu).
V tomto případě chcete, aby vaše data prohlíželo mnoho počítačů paralelně, kde každý počítač provádí část práce.
Takže každému počítači dáte jiný oddíl (shard) dat a všem strojům zadáte stejný dotaz. Až vyjdou výsledky, UNION
všechny dohromady a vytisknout výsledek.
Základní rozdělení
V základním partitioning
část vašich dat je hot
a část je not
. Typickým případem jsou historická data, nová data jsou hot
, stará data se téměř nedotýkají.
Pro tento případ použití je zbytečné dávat stará data na samostatné servery. Tyto stroje budou jen čekat a čekat a nic nedělají, protože se o stará data nikdo nestará kromě některých auditorů, kteří se na ně jednou ročně podívají.
Takže tato data rozdělíte podle roku a server automaticky archivuje staré oddíly, takže vaše dotazy se budou dívat pouze na jeden (možná 2) roky dat a budou mnohem rychlejší.
Potřebuji rozdělení?
Rozdělování provádíte pouze tehdy, když máte mnoho a mnoho dat, protože to komplikuje nastavení.
Pokud nemáte více než milion záznamů, nemusíte o rozdělení uvažovat.
Pokud máte mít více než 100 milionů záznamů, měli byste to rozhodně zvážit.
Další informace najdete na:http://dev.mysql.com/ doc/refman/5.1/en/partitioning.html
a:http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Viz také wiki:http://en.wikipedia.org/wiki /Partition_%28database%29
Toto jsou pouze mé osobní heuristiky YMMV.