Modele fragmentowania
DOTYCZY: Usługa Azure Cosmos DB for PostgreSQL (obsługiwana przez rozszerzenie bazy danych Citus do bazy danych PostgreSQL)
Fragmentowanie jest techniką używaną w systemach baz danych i przetwarzaniem rozproszonym w celu partycjonowania danych w poziomie na wielu serwerach lub węzłach. Obejmuje to podzielenie dużej bazy danych lub zestawu danych na mniejsze, bardziej zarządzane części nazywane fragmentami. Fragment zawiera podzbiór danych, a razem fragmenty tworzą kompletny zestaw danych.
Usługa Azure Cosmos DB for PostgreSQL oferuje dwa typy fragmentowania danych, a mianowicie oparte na wierszach i oparte na schemacie. Każda opcja zawiera własne kompromisy fragmentowania, co pozwala wybrać podejście, które najlepiej odpowiada wymaganiom aplikacji.
Fragmentowanie oparte na wierszach
Tradycyjny sposób, w jaki tabele fragmentów usługi Azure Cosmos DB for PostgreSQL to pojedyncza baza danych, udostępniony model schematu znany również jako fragmentowanie oparte na wierszach, dzierżawcy współistnieją jako wiersze w tej samej tabeli. Dzierżawa jest określana przez zdefiniowanie kolumny dystrybucji, która umożliwia podzielenie tabeli w poziomie.
Oparte na wierszach to najbardziej wydajny sprzętowy sposób dzielenia na fragmenty. Dzierżawy są gęsto pakowane i dystrybuowane między węzłami w klastrze. Takie podejście wymaga jednak upewnienia się, że wszystkie tabele w schemacie mają kolumnę dystrybucji i wszystkie zapytania w filtrze aplikacji. Fragmentowanie oparte na wierszach świeci w obciążeniach IoT i osiąga najlepszy margines użycia sprzętu.
Korzyści:
- Najlepsza wydajność
- Najlepsza gęstość dzierżawy na węzeł
Wady:
- Wymaga modyfikacji schematu
- Wymaga modyfikacji zapytań aplikacji
- Wszystkie dzierżawy muszą współużytkować ten sam schemat
Fragmentowanie oparte na schemacie
Dostępny w usłudze Citus 12.0 w usłudze Azure Cosmos DB for PostgreSQL fragmentowanie oparte na schemacie jest udostępnioną bazą danych, oddzielnym modelem schematu, schemat staje się logicznym fragmentem w bazie danych. Aplikacje wielodostępne mogą używać schematu dla dzierżawy, aby łatwo fragmentować wzdłuż wymiaru dzierżawy. Zmiany zapytań nie są wymagane i aplikacja wymaga tylko niewielkiej modyfikacji, aby ustawić odpowiednie search_path podczas przełączania dzierżaw. Fragmentowanie oparte na schemacie to idealne rozwiązanie dla mikrousług, a dostawcy oprogramowania wdrażające aplikacje, które nie mogą przejść zmian wymaganych do dołączenia fragmentowania opartego na wierszach.
Korzyści:
- Dzierżawy mogą mieć schematy heterogeniczne
- Nie są wymagane żadne modyfikacje schematu
- Nie są wymagane żadne modyfikacje zapytań aplikacji
- Zgodność z fragmentowaniem SQL oparta na schemacie jest lepsza w porównaniu z fragmentowaniem opartym na wierszach
Wady:
- Mniejsza liczba dzierżaw na węzeł w porównaniu z fragmentowaniem opartym na wierszach
Kompromisy fragmentowania
Fragmentowanie oparte na schemacie | Fragmentowanie oparte na wierszach | |
---|---|---|
Model wielodostępu | Oddzielny schemat na dzierżawę | Udostępnione tabele z kolumnami identyfikatora dzierżawy |
Wersja Citus | 12.0+ | Wszystkie wersje |
Dodatkowe kroki w porównaniu z wanilią PostgreSQL | Brak, tylko zmiana konfiguracji | Użyj create_distributed_table w każdej tabeli, aby dystrybuować i kolokować tabele według identyfikatora dzierżawy |
Liczba dzierżaw | 1–10 tys. | 1–1 M+ |
Wymaganie modelowania danych | Brak kluczy obcych w schematach rozproszonych | Należy uwzględnić kolumnę identyfikatora dzierżawy (kolumnę dystrybucji, znaną również jako klucz fragmentowania) w każdej tabeli oraz w kluczach podstawowych, kluczach obcych |
Wymaganie SQL dotyczące zapytań z jednym węzłem | Używanie pojedynczego schematu rozproszonego na zapytanie | Sprzężenia i klauzule WHERE powinny zawierać kolumnę tenant_id |
Równoległe zapytania między dzierżawami | Nie. | Tak |
Niestandardowe definicje tabel na dzierżawę | Tak | Nie. |
Kontrola dostępu | Uprawnienia schematu | Uprawnienia schematu |
Udostępnianie danych między dzierżawami | Tak, przy użyciu tabel odwołań (w osobnym schemacie) | Tak, przy użyciu tabel referencyjnych |
Izolacja dzierżawy do fragmentowania | Każda dzierżawa ma własną grupę fragmentów według definicji | Może nadać określonym identyfikatorom dzierżawy własną grupę fragmentów za pośrednictwem isolate_tenant_to_new_shard |