Modele shardingu w klastrach elastycznych w usłudze Azure Database for PostgreSQL — elastyczny serwer

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 na serwerach elastycznych Azure Database for PostgreSQL oferują dwa typy fragmentowania danych: oparte na wierszach i oparte 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 fragmentowane w modelu schematu współdzielonego w pojedynczej bazie danych, znanym również jako fragmentacja oparta na wierszach, gdzie dzierżawcy współistnieją w postaci wierszy w tej samej tabeli. Definiujesz kolumnę dystrybucji, aby określić dzierżawcę, co powoduje poziomy podział tabeli.

Sharding oparty na wierszach jest metodą najefektywniej wykorzystującą zasoby sprzętowe. Węzły w klastrze gęsto upakowują i rozmieszczają dzierżawców. Jednak takie podejście wymaga upewnienia się, że wszystkie tabele w schemacie mają kolumnę dystrybucji oraz że wszystkie zapytania w aplikacji filtrują według tej kolumny. Fragmentacja według wierszy sprawdza się dobrze w przypadku obciążeń IoT oraz pozwala jak najlepiej wykorzystać sprzęt.

Korzyści:

  • Najlepsza wydajność.
  • Najwyższa gęstość dzierżawców na węzeł.

Wady:

  • Wymaga modyfikacji schematu.
  • Wymaga modyfikacji zapytań aplikacji.
  • Wymaga, aby wszyscy dzierżawcy korzystali z tego samego schematu.

Fragmentowanie oparte na schemacie

Fragmentowanie oparte na schemacie korzysta z udostępnionej bazy danych i oddzielnego modelu schematu. Każdy schemat działa jako logiczny fragment w bazie danych. Aplikacje wielodzierżawne mogą korzystać z osobnego schematu dla każdego dzierżawcy, aby łatwo shardować dane według dzierżawców. Nie musisz zmieniać zapytań, a aplikacja wymaga jedynie niewielkiej modyfikacji, aby podczas przełączania dzierżawców ustawić właściwą search_path. Fragmentacja na poziomie schematu jest idealnym rozwiązaniem dla mikrousług oraz dla niezależnych dostawców oprogramowania (ISV, Independent Software Vendors) wdrażających aplikacje, w których nie można wprowadzić zmian wymaganych do zastosowania fragmentacji opartej na wierszach.

Korzyści:

  • Dzierżawcy mogą mieć heterogeniczne schematy.
  • Nie są wymagane żadne modyfikacje schematu.
  • Nie są wymagane żadne modyfikacje zapytań aplikacji.
  • Zgodność z SQL w przypadku fragmentacji opartej na schemacie jest lepsza niż w przypadku fragmentacji opartej na wierszach.

Wady:

  • Mniej dzierżawców na węzeł w porównaniu z shardingiem 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 współlokować tabele według identyfikatora dzierżawcy
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żna przypisać określonym identyfikatorom dzierżawców własną grupę fragmentów danych przy użyciu isolate_tenant_to_new_shard