Udostępnij za pomocą


Modele shardingowe na elastycznych klastrach w usłudze Azure Database for 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.

Elastyczne klastry we elastycznych wystąpieniach serwera usługi Azure Database for PostgreSQL oferują dwa typy fragmentowania danych: opartego na wierszach i opartego na schemacie. Każda opcja zawiera własne kompromisy, dzięki czemu można wybrać podejście, które najlepiej odpowiada wymaganiom aplikacji.

Fragmentowanie oparte na wierszach

Tabele fragmentów w modelu schematu współużytkowanego pojedynczej bazy danych, nazywane również fragmentowaniem opartym na wierszach, dzierżawy 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.

Fragmentowanie oparte na wierszach to najbardziej wydajna metoda sprzętowa. 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 według tej kolumny. 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.
  • Wymaga, aby wszystkie dzierżawy musiały współużytkować ten sam schemat.

Fragmentowanie oparte na schemacie

Fragmentowanie oparte na schemacie to udostępniona baza danych, oddzielny model schematu, a 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, a aplikacja wymaga tylko niewielkiej modyfikacji, aby ustawić odpowiednie search_path podczas przełączania dzierżaw. Dzielenie na fragmenty oparte na schemacie jest idealnym rozwiązaniem dla mikrousług i dla niezależnych dostawców oprogramowania (niezależnego dostawcy oprogramowania), 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ść bazy danych SQL oparta na schemacie jest lepsza w porównaniu z fragmentowaniem opartym na wierszach.

Wady:

  • Mniej 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