úterý 25. prosince 2007

Sharding: rozčtvrťte data

Horizontální dělení dat alias sharding je přístup pro dosažení škálovatelnosti na velkých objemech dat. Sharding byl úspěšně implementován jako součást architektury Google aplikací a nebo Flickr či Friendster. Myšlenka shardingu je velice jednoduchá, data jsou podle určitého klíče rozloženy do několika fyzických úložišť (databází). Představme si aplikaci typu seznamka. Data je možné rozložit podle různých strategií.

  • data uživatelů A-G jdou do databáze A, data uživatelů H-R jdou do databáze B atd.
  • informace o uživatelích jdou do databáze A, historie jejich konverzaci do databáze B, veřejná diskusní fóra do databáze C
  • všechna data uživatelů z Česka do databáze A, všechna data uživatelů ze Slovenska do databáze B

Sharding nám přinese několik výhod.

  • aplikace pracuje na omezeném (relativně malém) množství dat, z toho plyne jejich rychlejší zpracování - čtení, zápis
  • výpadek jednoho databázového stroje (shardu) neznamená výpadek celé služby, postiženi jsou pouze a jenom data na daném stroji.
  • pri zajištění maximální dostupnosti (high availibility) dat není potřeba replikovat všechna data, ale pouze daný shard.
  • zpracování dat lze paralelizovat, můžeme například jeden dotaz pustit paralelně na několika shardech

Samozřejmě sharding má i svoje nevýhody.

  • data mezi shardy nejsou normalizovány, tedy nemůžeme udělat jednoduše dotaz přes více shardů. To musíme udělat programově spuštěním dotazu nad všemi shardy a spojením jejich výsledků.
  • je potřeba mít speciální strategii pro zjištění v jakém shardu leží data
  • sharding nelze udělat transparentně, logika pro přístup k datům si musí být vědoma toho, že data jsou rozdělená

Pokud nepočítám Hibernate Shards, který mi přijde ještě celkem syrový, tak si celé řešení bude muset člověk ztlouci na koleni. Zkuste si představit, jak to naimplementujete pomocí JDBC, to nebude rozhodně práce na dva dny. Na druhou, stranu celé řešení budeme mít plně pod kontrolou, aniž bychom museli záviset na "krvavě zaplacených" možnostech databáze. Celkově vzato, jakmile začnete horizontálně dělit data, musíte změnit přístup k práci s nimi.

Docela by mě zajímalo jestli sharding využívají vysoce exponované České portály jako například Seznam a nebo Aukro.

V tomto postu jsem hojně čerpal z informací uvedených v článku An Unorthodox Approach to Database Design : The Coming of the Shard, který vřele doporučuji k přečtení.