Partition (databáze)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Úprava partitioningu tabulky v nástroji Adminer.

Partitioning je technologie sloužící v relační databázi k fyzickému rozdělení rozsáhlých datových tabulek do menších částí na základě logického členění dat v tabulce, nazývaných partition (český přibližný ekvivalent oddíl se příliš neadaptoval). Pokud databázový server poskytuje takovou možnost, umožňuje tato technologie rychlejší manipulaci s tabulkami, jejichž velikost se pohybuje na hranici možností použitých systémových prostředků. Prakticky (a nejčastěji) bývá realizován rozdělením tabulky na více pevných disků, což představuje rozložení zátěže oproti stavu, kdy všechny požadavky musel obsluhovat pouze jeden disk. Důvodem tedy kromě velikosti dat může být také požadavek na větší rychlost. To, podle jakého klíče k rozdělení dojde, dovoluje většina databázových strojů, které tuto funkci podporují, určit – většinou se jedná o rozdělení podle určitého sloupce nebo jeho hašovací funkce.

Partitioning podporují např. databázové systémy Oracle, MySQL od verze 5.1, MSSQL 2005 a další.

Nastavení partitioningu[editovat | editovat zdroj]

V rámci vytvoření tabulky (příkaz CREATE TABLE jazyka SQL) je možné definovat, na základě kterého sloupce ve struktuře tabulky a podle jakých kritérií bude tabulka členěna.

CREATE TABLE slovnik (id INT, heslo VARCHAR(100), vyznam TEXT)
    ENGINE=INNODB
    PARTITION BY HASH(heslo)
    PARTITIONS 5;

Výše uvedený příklad (v MySQL) nastaví rozdělování v tabulce slovnik podle výsledku hašovací funkce sloupce heslo na 5 oddílů.

Chceme-li partitioning u již existující odebrat, můžeme napsat:

ALTER TABLE slovnik
    REMOVE PARTITIONING;

Rozdělení partitioningu[editovat | editovat zdroj]

Horizontální partitioning[editovat | editovat zdroj]

Rozděluje se na úrovni celých řádků. Využití: např. u rozsáhlých tabulek, u nichž se část dat (např. archiv článků) používá velmi zřídka a naopak u několika posledních řádků je požadavek na rychlý přístup (ty se pak umístí na nejrychlejší disk).

Vertikální partitioning[editovat | editovat zdroj]

Partitioning se rozděluje podle sloupců tabulky, tj. sloupce tabulky mohou být uloženy na jiných discích. Využití: např. u tabulky obsahující pole pro ukládání rozsáhlého textového nebo binárního obsahu (slovníky, tabulky článků, obrázků nebo jiných souborů uložených v databázi).

Statický partitioning[editovat | editovat zdroj]

Příklad: Tabulka titulů v katalogu firmy distribuující hudební nahrávky může být členěna podle počátečního písmena názvu - vzniká tabulka s předem pevně daným počtem partitions.

Statický partitioning vzniká též při užití hašovací funkce na aspekt, podle kterého se má určit, do kterého oddílu daný řádek (sloupec) spadne.

Dynamický partitioning[editovat | editovat zdroj]

Příklad: Tabulka zákaznických objednávek v databázi téže firmy může být členěna podle data pořízení objednávky a to po kalendářních měsících (jeden měsíc - jedna partition). Vzniká tak tabulka s dynamicky rostoucím počtem partitions - každý měsíc přibude jedna nová.

Vlastnosti partitioningu[editovat | editovat zdroj]

Užitečnost partitioningu vyplývá z možnosti pracovat nikoliv s celou tabulkou, ale pouze s její relevantní částí:

  • Takto dělená tabulka se pak ukládá do více souborů, z nichž každý může být uložen na jiném disku - to je vhodné především u velkých tabulek jako jsou faktové tabulky v datovém skladu.
  • Procesy, které hromadně mění data v tabulce, jsou řádově rychlejší, pokud se mohou „opřít“ o způsob členění tabulky do partitions - například u mazání starých dat (příkazem DELETE jazyka SQL) může být tento rozdíl oproti stejnému příkazu spuštěnému nad nerozdělenou velkou tabulkou až tisícinásobný.
  • Agregační funkce spouštěné nad dělenou tabulkou může databázový server rozdělit podle rozdělení v definici partitioningu do více procesů, spustit každý takový proces na respektivním místě souborového systému, a nakonec získané mezivýsledky sloučit do celkového výsledku.
  • Pokud to SŘBD dovoluje, může mít každá partition trochu jiné nastavení z pohledu její správy – dle příkladu u dynamického partitioningu je logické, aby partitions obsahující objednávky starší tří měsíců byly pouze pro čtení (read-only), což podstatně sníží časové a kapacitní nároky na zálohování celé tabulky.
  • Při vhodném použití indexů pracuje většina běžných procesů (přidání řádku do tabulky, změna v jednom nebo několika řádcích, získání dat z tabulky za určité omezené časové období apod.) nad jednou konkrétní partition. Podstatně se tím zvyšuje počet uživatelů, kteží mohou s tabulkou pracovat paralelně, aniž by se vzájemně omezovali - tato vlastnost se ještě umocňuje, pokud je databáze umístěna na víceprocesorovém serveru.

Externí odkazy[editovat | editovat zdroj]