Sdílet prostřednictvím


Modely shardování v elastických clusterech ve službě Azure Database for 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ě tvoří úplnou datovou sadu horizontálních oddílů.

Elastické clustery na flexibilních serverových instancích Azure Database for PostgreSQL nabízejí dva typy shardování dat: založené na řádcích a schématu. Každá možnost má své vlastní kompromisy, takže si můžete vybrat přístup, který nejlépe odpovídá požadavkům vaší aplikace.

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

Tabulky horizontálních oddílů v modelu sdíleného schématu jednoúčelové databáze, označované také jako horizontální dělení založené na řádcích, tenanti společně existují jako řádky ve stejné tabulce. Tenant je určen definováním distribučního sloupce, který umožňuje vodorovné rozdělení tabulky.

Shardování založené na řádcích je nejúčinnější metoda 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 podle tohoto sloupce. 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.
  • Vyžaduje, aby všichni tenanti sdíleli stejné schéma.

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

Horizontální dělení na základě schématu je sdílená databáze, samostatný model schématu a 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 se při přepínání tenantů nastavily 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 (nezávislí dodavatelé softwaru) nasazující aplikace, které nemohou projít změnami potřebnými k onboardingu horizontálního dělení založeného na řádcích.

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 Ano 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ů.