sql >> Databáze >  >> RDS >> Mysql

proč rozdělujeme mysql tabulku na mnoho menších tabulek?

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.



  1. Vkládání dat do více tabulek pomocí jednoho formuláře

  2. Porovnání vysoké dostupnosti databáze – replikace MySQL / MariaDB vs Oracle Data Guard

  3. Základy tabulkových výrazů, část 12 – Inline tabulkové funkce

  4. MySQL PHP skupina po dnech a celkem za každý den