Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů. |