Udostępnij za pomocą


Modele fragmentowania

Ważne

Usługa Azure Cosmos DB for PostgreSQL nie jest już obsługiwana w przypadku nowych projektów. Nie używaj tej usługi dla nowych projektów. Zamiast tego użyj jednej z tych dwóch usług:

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 sprawdza się w obciążeniach IoT i pozwala osiągnąć najlepszy możliwy zwrot z wykorzystania 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ępne w Citus 12.0 w usłudze Azure Cosmos DB for PostgreSQL, fragmentowanie oparte na schemacie stosuje model współdzielonej bazy danych z oddzielnymi schematami, gdzie schemat staje się logicznym fragmentem w bazie danych. Aplikacje wielodostępne mogą używać schematu dla każdego najemcy, aby łatwo rozdzielać dane według najemców. Zmiany zapytań nie są potrzebne, a aplikacja wymaga jedynie niewielkiej modyfikacji, aby ustawić odpowiedni search_path podczas przełączania najemców. 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:

  • Najemcy mogą mieć heterogeniczne schematy
  • 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 najemców na węzeł w porównaniu z fragmentowaniem opartym na wierszach

Kompromisy fragmentowania

Fragmentowanie oparte na schemacie Fragmentowanie oparte na wierszach
Model wielonajemczy Oddzielny schemat dla najemcy Udostępnione tabele z kolumnami ID dzierżawcy
Wersja Citus 12.0+ Wszystkie wersje
Dodatkowe kroki w porównaniu ze standardowym PostgreSQL Brak, tylko zmiana konfiguracji Użyj create_distributed_table dla każdej tabeli, aby dystrybuować i przyporządkować tabele według identyfikatora najemcy
Liczba dzierżaw 1–10 tys. 1–1 M+
Wymaganie modelowania danych Brak kluczy obcych w schematach rozproszonych Należy uwzględnić kolumnę identyfikatora najemcy (kolumnę dystrybucji, znaną również jako klucz fragmentowania) w każdej tabeli oraz w kluczach podstawowych i 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żdy najemca ma własną grupę shardó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