Udostępnij za pośrednictwem


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