Sdílet prostřednictvím


Modely horizontálního dělení

Důležité

Azure Cosmos DB for PostgreSQL se už pro nové projekty nepodporuje. Tuto službu nepoužívejte pro nové projekty. Místo toho použijte jednu z těchto dvou služeb:

  • Azure Cosmos DB for NoSQL můžete použít pro distribuované databázové řešení navržené pro vysoce škálovatelné scénáře s 99,999% smlouvou o úrovni služeb (SLA), okamžitým automatickým škálováním a automatickým převzetím služeb při selhání napříč několika oblastmi.

  • Použijte funkci Elastic Clusters služby Azure Database for PostgreSQL pro horizontálně dělené PostgreSQL pomocí opensourcového rozšíření Citus.

Sharding je technika používaná v databázových systémech a distribuovaných výpočetních prostředích pro rozdělení dat mezi více servery nebo uzly. Zahrnuje rozdělení velké databáze nebo datové sady na menší a lépe zvládnutelné části, označované jako shardy. 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 při sharding, což vám umožní zvolit přístup, který nejlépe odpovídá požadavkům vaší aplikace.

Dělení podle řádků

Tradiční způsob, jakým Azure Cosmos DB for PostgreSQL particionuje tabulky, spočívá v použití modelu jednoduché databáze se sdíleným schématem, známého také jako horizontální dělení na základě řádků; nájemci 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.

Řádkově orientované je nejefektivnější způsob shardingu z hlediska využití hardwaru. Nájemníci jsou hustě umístěni a distribuováni 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. Dělení na úrovni řádků se skvěle uplatňuje v pracovních úlohách IoT a při dosažení nejlepší efektivity z využití hardwaru.

Výhody:

  • Nejlepší výkon
  • Nejlepší hustota nájemců 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

Ve službě Azure Cosmos DB for PostgreSQL je s verzí Citus 12.0 k dispozici horizontální dělení na základě schématu. Toto je model, kde je databáze sdílena, ale jednotlivá schémata jsou samostatná. Schéma se stává logickým oddílem v rámci databáze. Víceklientské aplikace mohou pomocí schématu na úrovni tenanta snadno rozdělovat 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 řádkovým šardováním

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

Horizontální dělení na základě schématu Dělení podle řádků
Model s více tenanty Samostatné schéma pro každého nájemce Sdílené tabulky se sloupci ID tenanta
Verze Citus 12.0+ Všechny verze
Další kroky ve srovnání se standardním PostgreSQL Žádná, pouze změna konfigurace Použijte create_distributed_table na každou tabulku k distribuci a kolokaci tabulek podle tenant ID.
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 Ne Ano
Definice vlastních tabulek pro každého tenanta Ano Ne
Ří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 mezi tenanty a shardami Každý tenant má svou vlastní skupinu horizontálních oddílů podle definice. Pomocí isolate_tenant_to_new_shard lze konkrétnímu ID tenanta poskytnout vlastní skupinu shardů.