Modely horizontálního dělení

PLATÍ PRO: Azure Cosmos DB for PostgreSQL (využívající rozšíření databáze Citus do PostgreSQL)

Horizontální dělení je technika používaná v databázových systémech a distribuovaná výpočetní prostředí k horizontálnímu dělení dat mezi více servery nebo uzly. Zahrnuje rozdělení velké databáze nebo datové sady na menší a lépe spravovatelné části označované jako horizontální oddíly. Horizontální oddíl obsahuje podmnožinu dat a společně horizontální oddíly tvoří úplnou datovou sadu.

Azure Cosmos DB for PostgreSQL nabízí dva typy shardování dat, konkrétně založené na řádcích a schématu. Každá možnost má své vlastní kompromisy s horizontálním dělením, což vám umožní zvolit přístup, který nejlépe odpovídá požadavkům vaší aplikace.

Horizontální dělení na základě řádků

Tradiční způsob, jakým tabulky horizontálních oddílů Azure Cosmos DB for PostgreSQL tvoří jednoúčelovou databázi, model sdíleného schématu označovaný také jako horizontální dělení na základě řádků, tenanti spolu existují jako řádky ve stejné tabulce. Tenant je určen definováním distribučního sloupce, který umožňuje vodorovné rozdělení tabulky.

Založená na řádcích je nejúčinnější způsob horizontálního dělení hardwaru. Tenanti jsou hustě zabalení a distribuovaná mezi uzly v clusteru. Tento přístup ale vyžaduje, aby všechny tabulky ve schématu měly distribuční sloupec a aby všechny dotazy v aplikaci filtrovaly. Horizontální dělení založené na řádcích svítí v úlohách IoT a pro dosažení nejlepšího okraje při použití hardwaru.

Výhody:

  • Nejlepší výkon
  • Nejlepší hustota tenanta na uzel

Nevýhody:

  • Vyžaduje úpravy schématu.
  • Vyžaduje úpravy dotazů aplikace.
  • Všichni tenanti musí sdílet stejné schéma.

Horizontální dělení na základě schématu

K dispozici s Citus 12.0 ve službě Azure Cosmos DB for PostgreSQL je horizontální dělení na základě schématu sdílená databáze, samostatný model schématu, schéma se stane logickým horizontálním oddílem v databázi. Víceklientské aplikace můžou pomocí schématu na tenanta snadno shardovat podle dimenze tenanta. Změny dotazů se nevyžadují a aplikace potřebuje jenom malou úpravu, aby při přepínání tenantů nastavil správné search_path. Horizontální dělení založené na schématu je ideální řešení pro mikroslužby a pro nezávislé výrobce softwaru, kteří nasazují aplikace, které nemůžou procházet změnami potřebnými k onboardingu horizontálního dělení na základě řádků.

Výhody:

  • Tenanti můžou mít heterogenní schémata.
  • Nejsou vyžadovány žádné úpravy schématu.
  • Nejsou vyžadovány žádné úpravy dotazů aplikace.
  • Kompatibilita SQL s horizontálním dělením na základě schématu je lepší v porovnání s horizontálním dělením na základě řádků.

Nevýhody:

  • Méně tenantů na uzel ve srovnání s horizontálním dělením na základě řádků

Kompromisy s horizontálním dělením

Horizontální dělení na základě schématu Horizontální dělení na základě řádků
Model s více tenanty Samostatné schéma na tenanta Sdílené tabulky se sloupci ID tenanta
Verze Citus 12.0+ Všechny verze
Extra kroky ve srovnání s vanilla PostgreSQL Žádná, pouze změna konfigurace Použití create_distributed_table v každé tabulce k distribuci a spolulokaci tabulek podle ID tenanta
Počet tenantů 1–10 tisíc 1–1 M+
Požadavek na modelování dat Žádné cizí klíče napříč distribuovanými schématy Do každé tabulky a v primárních klíčích je potřeba zahrnout sloupec ID tenanta (distribuční sloupec označovaný také jako klíč horizontálního dělení) a v primárních klíčích cizí klíče.
Požadavek SQL na dotazy s jedním uzlem Použití jednoho distribuovaného schématu na dotaz Spojení a klauzule WHERE by měly zahrnovat sloupec tenant_id
Paralelní dotazy napříč tenanty No Ano
Definice vlastních tabulek na tenanta Yes No
Řízení přístupu Oprávnění schématu Oprávnění schématu
Sdílení dat mezi tenanty Ano, použití referenčních tabulek (v samostatném schématu) Ano, použití referenčních tabulek
Izolace horizontálního dělení tenanta Každý tenant má svou vlastní skupinu horizontálních oddílů podle definice. Prostřednictvím isolate_tenant_to_new_shard může konkrétní ID tenantů poskytnout vlastní skupinu horizontálních oddílů.