Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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 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 |