čtvrtek 12. listopadu 2009

Oracle 11gR2 - Hybrid columnar compression

Před několika týdny byla uvolněna nová verze databáze Oracle 11G R2 a ta, mimo jiná „vylepšení“, obsahuje jednu velmi zajímavou funkčnost, která se týká způsobu uložení dat. Na první pohled to vypadá jako převratná novinka ve světě uložení dat, ale Oracle není první, kdo se pustil do vertikálního konceptu. Na druhou stranu můžeme být jen rádi, že Oracle stále sleduje současné trendy vývoje v oblasti relačních databází pro systémy pro podporu rozhodování a v ničem nezůstává pozadu proti specializovaným produktům pro DWH/BI ostatních konkurentů. Prvním důkazem je nám všem dobře známá Exadata, která je pravou Datawarehouse Appliance, a samozřejmě její víc než zajímavé vylepšení, a to nejen technologické, tak zejména z hlediska poměru ceny za TB, v podobě Exadata 2. Druhým průlomovým krokem je funkcionalita, o které bych se rád zmínil v tomto článku, a to hybridní vertikální komprese.

Relační databáze, které jsou dnes dostupné na trhu, podporují vesměs jeden z následujících dvou konceptů uložení:
  • Řádkové uložení, neboli N-ary Storage Model (NSM)
  • Sloupcové uložení, neboli Decomposition Storage Model (DSM)
Řádkové uložení dat
Řádkové uložení je zřejmě nejvíce používaným způsobem uložení dat, tak jak jej známe ze všech verzí Oracle, MS SQL, PostgreSQL, MySQL a dalších. Data jsou ukládána po jednotlivých blocích a v rámci každého bloku jsou organizována po řádcích, stejně tak bloky jsou organizovány po řádcích. Každý řádek v rámci jednoho bloku obsahuje na začátku pointer, který označuje začátek řádku. To proto, protože řádky nemají fixní délku díky atributům s proměnnou délkou. Pokud je blok naplněn, další řádek se již zapisuje do dalšího volného bloku. Tento storage model je vhodný zejména pro OLTP systémy, kdy potřebujeme s vysokou selektivitou získat mnoho atributů z jednoho řádku. Pak se typicky provádí scan přes všechny řádky, případně indexy, filtruje se požadovaný záznam a vrací výsledek zpět. V případě OLAP/DSS systémů je výsledkem dotazu zpravidla restrikce (filtrování) dat, jejich následná agregace a projekce (vrácení pouze jednoho nebo několika atributů), jako např. aktuální počet zákazníků, nebo celkový objem transakcí za určité období. V tomto případě, i když potřebujeme z tabulky transakcí pouze datum a objem transakce, musíme projít všechny záznamy přes všechny atributy, což dotaz výrazně zpomaluje. Na druhou stranu čím více atributů z tabulky potřebujeme dostat, tím se řádkové uložení stává užitečnější.

Sloupcové uložení dat
Sloupcové, nebo také vertikální uložení dat, je koncept navržený výhradně pro DSS systémy. Místo toho, aby byly tabulky uloženy po jednotlivých řádcích, jsou uloženy po sloupcích. Hodnoty atributů jednotlivých řádků jsou tak uloženy vedle sebe, každá hodnota má navíc pointer, ukazující řádek, do kterého hodnota patří. Výhod tohoto způsobu uložení dat je hned několik – pokud použijeme v dotazu restrikci na určitý rozsah hodnot atributu (range restriction), pak se provádí nejprve scan jen jednoho atributu, po nalezení požadovaných hodnot se provádí tzv. rekonstrukce řádku, kdy se spojují nalezené hodnoty přes řádkový pointer na ostatní atributy a vrací se výsledek. V případě dotazů nad několika málo atributy je tento koncept vysoce efektivní proti řádkovému a přináší značné úspory v I/O operacích (čtení z disku). Problémy však nastanou, kdy je potřeba vrátit více atributů, pak se provádí nákladná rekonstrukce řádku přes více atributů a to zpracování velmi zpomaluje. Tento problém se však některé databáze snaží eliminovat pomocí tzv. „affinity graphs“, které seskupují atributy do skupin podle četnosti v dotazech. Další velkou výhodou vertikálního uložení dat je velmi rychlý update, pokud aktualizujeme jen jeden atribut přes všechny řádky. Poslední, ne nevýznamnou výhodou, je komprese, kdy pomocí vertikálního uložení dat můžeme dosáhnout mnohem vyššího kompresního poměru, proti řádkovému uložení. Důvodem je ukládání atributů po blocích a tím i možnost existence stejných hodnot v rámci jednoho bloku. Kompresí se také výrazně zrychluje čtení z disku, kdy se čte menší objem dat, tedy je menší náročnost na I/O a odpověď na dotaz je o to rychlejší. Tento koncept byl poprvé popsán již v roce 1979.

Příkladem relační databáze, používající vertikální koncept je Sybase IQ, která je na trhu už od 90 — tých let minulého století, dále pak novější a méně známé produkty, jako PARAccel, Infobright nebo Vertica.

PAX
Za tajemnou zkratkou PAX se skrývá název Partition Attributes Accross, což je koncept uložení dat, který byl poprvé popsán v roce 2001. Jedná se v podstatě o kombinaci dvou předchozích modelů, tedy řádkového a sloupcového s tím, že PAX eliminuje nevýhody obou a vytváří jakýsi hybrid, tedy „hybrid columnar storage“, na kterém je založena novinka v Oracle 11gR2.

Princip modelu spočívá v tom, že data jsou, podobně jako v případě řádkové uložení, ukládána po blocích, ale v rámci každého bloku jsou již organizována po sloupcích. V rámci bloku se vytváří tzv. minibloky, kde každý miniblok obsahuje hodnoty jednoho atributu pro řádky, které jsou součástí bloku. Tímto způsobem se eliminuje problém sloupcového uložení, kdy se musí provádět náročná rekonstrukce řádků při požadavku na větší počet atributů v dotazu, protože hodnoty atributu jsou uloženy spolu s ostatními atributy řádku v jednom bloku a tedy i rekonstrukce řádku je velmi jednoduchá. Při dotazu obsahujícím restrikci (filtr) na určitý sloupec jsou z disku čteny jen hodnoty tohoto sloupce, je provedena restrikce a následně rekonstrukce řádků. Neprovádí se tedy scan přes všechny atributy, jako v případě řádkového uložení, ale jen rychlý výběr hodnot jednoho sloupce. U tabulek s větším počtem atributů to může být velmi efektivní. Stejně tak zůstane zachována výhoda komprese u sloupcového uložení, kdy hodnoty atributu jsou uloženy vedle sebe. Teoreticky může být hodnota komprese zvýšena způsobem seřazení záznamů, kdy sloupec, podle kterého setřídíme data, bude mít nejspíše nejlepší kompresní poměr.

Oracle a PAX
V současné době existují pouze dohady, jakým způsobem je přesně implementován hybridní sloupcový model uložení v Oracle, pravděpodobně však inspirací je právě koncept PAX. Kompresí nad takto uloženými daty je pak možno dosáhnout 10x -40x kompresní poměr, podle charakteru dat (čím více opakujících se hodnot, tím vyšší kompresní poměr). Hovoří se také o možnosti vybrat si jen část dat, která bude uložena tímto způsobem a zbytek zůstane v klasickém řádkovém uložení. Zůstává otázkou, zda tento hybrid přinese i nějaký benefit v podobě zrychlení odezvy na některé typy dotazů. Z titulu komprese a tím menšího počtu I/O to pravděpodobné bude, z hlediska sloupcového uložení to záleží na skutečnosti, zda implementace je více sloupcová nebo více řádková. Více se snad dozvíme z dalších materiálů, které budou publikovány Oraclem k tomuto tématu.

V úvodu článku jsem se zmínil, že Oracle není jedinou databází, která přichází na trh s hybridní sloupcovou organizací dat. Dalším produktem, který se již brzy objeví na trhu je nová verze Vertica 3.5 a její koncept nazvaný Flex Store, který řeší něco podobného. Ovšem Vertica začala úplně z jiné strany než Oracle, jde od sloupcového uložení směrem k hybridnímu, Oracle od řádkového k hybridnímu. Budou tedy všechny databázové systémy pro podporu rozhodování v budoucnosti jen „hybridy“ ?


Radan Návrat (DWH architect v T-Systems)

Žádné komentáře: