Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |