Strategie architektury służące do optymalizowania wydajności danych

Dotyczy tego zalecenia listy kontrolnej wydajności platformy Azure Well-Architected Framework:

PE:08 Optymalizowanie wydajności danych. Zoptymalizuj magazyny danych, partycje i indeksy pod kątem zamierzonego i rzeczywistego użycia w obciążeniu.

W tym przewodniku opisano zalecenia dotyczące optymalizowania wydajności danych. Optymalizacja wydajności danych polega na uściśliniu wydajności, za pomocą której obciążenie przetwarza i przechowuje dane. Każda operacja obciążenia, transakcja lub obliczenia zwykle opiera się na szybkim i dokładnym pobieraniu, przetwarzaniu i przechowywaniu danych. Gdy wydajność danych jest zoptymalizowana, obciążenie działa bezproblemowo. Obniżona wydajność przetwarzania danych wywołuje efekt domina, prowadząc do spadku ogólnej efektywności. Niepowodzenie optymalizacji wydajności danych powoduje opóźnienia odpowiedzi, zwiększone opóźnienie i ograniczoną skalowalność. Zagraża to wydajności całego obciążenia.

Definicje

Termin Definition
Twierdzenie CAP Struktura używana do rozważenia spójności, dostępności i tolerancji partycji w celu wyjaśnienia kompromisów w spójności danych.
Ponowne kompilowanie indeksu bazy danych Operacja konserwacyjna, która usuwa i ponownie tworzy indeks.
Reorganizacja indeksu bazy danych Działanie konserwacji, które optymalizuje bieżący indeks bazy danych.
Magazyn danych Zasób, który przechowuje dane, takie jak baza danych, magazyn obiektów lub udział sieciowy.
Spójność ostateczna Model synchronizacji danych, który umożliwia tymczasową niespójność replik danych przed ich ostateczną synchronizacją.
Index Struktura bazy danych, która zapewnia szybki dostęp do elementów.
Przetwarzanie analityczne online (OLAP) Technologia, która organizuje duże bazy danych biznesowych, obsługuje złożoną analizę i wykonuje złożone zapytania analityczne bez negatywnego wpływu na systemy transakcyjne.
Przetwarzanie transakcji online (OLTP) Technologia, która rejestruje interakcje biznesowe, gdy występują w codziennych operacjach organizacji.
Optymistyczna współbieżność Podejście do aktualizowania baz danych, które używają migawek do wprowadzania aktualizacji zamiast tradycyjnych mechanizmów blokowania, poprawy wydajności i skalowalności.
Twierdzenie PACELC Struktura używana do rozważenia tolerancji partycji, dostępności, spójności i opóźnień w celu wyjaśnienia kompromisów w spójności danych.
Partitioning Proces fizycznego dzielenia danych na oddzielne magazyny danych.
Dostrajanie zapytań Proces, który optymalizuje szybkość zapytania bazy danych.
Replika do odczytu Kopia na żywo podstawowej bazy danych, która umożliwia odciążanie ruchu odczytu z bazy danych zapisu.

Aby zoptymalizować użycie danych, upewnij się, że magazyny danych, partycje i indeksy są zoptymalizowane pod kątem ich zamierzonego użycia i rzeczywistego użycia w obciążeniu. Zoptymalizowane użycie danych może poprawić wydajność zapytań, zmniejszyć zużycie zasobów i zwiększyć ogólną wydajność systemu. Rozważ następujące strategie:

  • Dane profilu. Zapoznaj się z danymi i upewnij się, że model danych jest odpowiedni dla obciążenia. Rozważ czynniki, takie jak normalizacja danych, strategie indeksowania i techniki partycjonowania. Aby uzyskać wydajne pobieranie danych, upewnij się, że wybrano odpowiednie typy danych, zdefiniuj relacje między jednostkami i określ optymalną strategię indeksowania.

  • Dostosuj konfigurację magazynu danych. Skonfiguruj infrastrukturę magazynu danych, aby dopasować się do wymagań dotyczących obciążenia. Wybierz odpowiednią technologię magazynowania, na przykład relacyjne bazy danych, bazy danych NoSQL i magazyny danych. Zoptymalizuj ustawienia magazynu, takie jak rozmiar buforu, mechanizmy buforowania i kompresja.

  • Optymalizowanie wydajności zapytań. Analizowanie i optymalizowanie zapytań uruchamianych w ramach obciążenia roboczego. Użyj technik, takich jak optymalizacja zapytań, indeksowanie i buforowanie. Aby zidentyfikować wąskie gardła, użyj planów zapytań i narzędzi do monitorowania wydajności, a następnie wprowadź niezbędne ulepszenia.

  • Regularnie monitoruj i dostrajaj system. Stale monitoruj wydajność obciążenia i iteruj konfigurację magazynu danych i optymalizacje zapytań. Na podstawie najlepszych rozwiązań dotyczących dostrajania wydajności przeanalizuj metryki systemu, zidentyfikuj obszary ulepszeń i zaimplementuj zmiany.

Dane profilu

Profilowanie danych obejmuje badanie danych ze źródła i zbieranie informacji o nim. Celem jest zrozumienie jakości, struktury i cech danych obciążenia. Ten proces umożliwia identyfikację problemów, takich jak brakujące wartości, duplikaty, niespójne formaty i inne anomalie. W celu efektywnego profilowania danych należy wziąć pod uwagę następujące strategie:

  • Omówienie struktury danych. Sprawdź strukturę danych, w tym tabele, kolumny i relacje. Określ typy danych, długości i ograniczenia, które są stosowane do każdej kolumny. Ocena struktury danych pomaga zrozumieć, jak dane są zorganizowane i jak są powiązane z innymi elementami danych.

  • Analizowanie woluminu danych. Oceń ilość danych, aby zrozumieć ogólny rozmiar i wzorce wzrostu. Określ liczbę rekordów lub dokumentów oraz rozmiar poszczególnych tabel lub kolekcji. Te informacje pomagają oszacować wymagania dotyczące magazynu i zidentyfikować problemy ze skalowalnością.

  • Identyfikowanie relacji danych. Zapoznaj się z relacjami między elementami danych, takimi jak relacje podstawowe i obce. Dowiedz się, jak dane są połączone, aby określić, jak zmiany w jednej tabeli lub dokumencie mogą mieć wpływ na powiązane dane.

  • Ocena jakości danych. Oceń jakość danych, sprawdzając czynniki, takie jak kompletność, dokładność, spójność i unikatowość. Zidentyfikuj anomalie danych, brakujące wartości lub zduplikowane rekordy, które mogą mieć wpływ na integralność danych i wydajność zapytań. Ten krok pomaga zidentyfikować obszary czyszczenia i ulepszania danych.

  • Przechwytuj rozkład danych. Przeanalizuj rozkład wartości w każdej kolumnie, aby określić wzorce danych. Identyfikowanie częstych i rzadkich wartości, wartości odstających i niesymetrycznych danych. Aby zoptymalizować wydajność zapytań, wybierz odpowiednie strategie indeksowania i techniki optymalizacji zapytań na podstawie dystrybucji.

Monitorowanie wydajności danych

Monitorowanie wydajności danych to praktyka spójnego śledzenia wydajności magazynów danych, partycji i indeksów w czasie rzeczywistym. Obejmuje ona zbieranie i analizowanie metryk wydajności specyficznych dla operacji danych, przy użyciu narzędzi dostosowanych do rozwiązań do monitorowania na poziomie systemu, bazy danych lub innych firm. Efektywne monitorowanie wydajności danych umożliwia proaktywne identyfikowanie i eliminowanie potencjalnych wąskich gardeł, dzięki czemu procesy i zadania związane z danymi są wydajne. Aby monitorować wydajność danych, należy wziąć pod uwagę następujące strategie:

  • Zbieranie metryk specyficznych dla danych. Zbierz kluczowe metryki, które bezpośrednio odnoszą się do wydajności danych. Te metryki obejmują czasy odpowiedzi zapytań, przepływność danych, we/wy dysku związane z dostępem do danych oraz czasy ładowania określonych partycji danych.

  • Konfigurowanie alertów dotyczących danych. Skonfiguruj alerty specjalnie dla metryk danych. Użyj wstępnie zdefiniowanych progów lub anomalii w tych metrykach, aby wyzwolić alerty. Alerty umożliwiają otrzymywanie powiadomień, gdy metryki wydajności przekraczają dopuszczalne zakresy lub pokazują nietypowe zachowanie. Jeśli na przykład zapytanie bazy danych trwa dłużej niż oczekiwano lub jeśli przepływność danych znacznie spadnie, wyzwoli alert. Te alerty można skonfigurować przy użyciu wyspecjalizowanych narzędzi do monitorowania lub skryptów niestandardowych.

  • Diagnozowanie problemów z wydajnością danych. Regularnie przeglądaj zebrane metryki danych, aby zidentyfikować potencjalne wąskie gardła lub pogorszenie wydajności operacji na danych. Narzędzia do wizualizacji lub panele kontrolne mogą być nieocenione w tym procesie, pomagając uwidocznić trendy, wąskie gardła i wartości odstające w danych dotyczących wydajności. Po zidentyfikowaniu zapoznaj się z głównymi przyczynami tych problemów i strateguj odpowiednie kroki korygowania.

Partycjonowanie danych

Partycjonowanie obejmuje podzielenie dużych zestawów danych lub obciążeń o dużej ilości na mniejsze, możliwe do zarządzania podzestawy. Partycjonowanie zwiększa wydajność danych, dystrybuując obciążenie i poprawiając przetwarzanie równoległe. Zapewnia również bardziej skuteczny dostęp do danych na podstawie konkretnych potrzeb i wzorców zapytań. Dane można partycjonować w pionie lub w poziomie (nazywane również fragmentowaniem).

Strategia Definition Example Przypadki użycia
Partycjonowanie pionowe Podziel tabelę na mniejsze tabele, wybierając określone kolumny lub pola dla każdej partycji. Każda partycja reprezentuje podzbiór pełnych danych. Jeśli masz tabelę z kolumnami A, B, C i D, możesz utworzyć jedną tabelę z kolumnami A i B, a drugą z kolumnami C i D. — Tabela zawiera wiele kolumn, ale zapytania nie uzyskują dostępu do wszystkich kolumn razem.
— Niektóre kolumny są większe niż inne i oddzielanie ich może zwiększyć wydajność operacji we/wy.
— Różne części danych mają różne wzorce dostępu.
Partycjonowanie poziome Podziel dane na podstawie wierszy lub zakresów wartości (nazywanych również fragmentowaniem). Każda partycja zawiera podzbiór wierszy mających podobne cechy. Jeśli masz tabelę z wierszami od 1 do 1000, możesz utworzyć jedną partycję z wierszami od 1 do 500, a drugą z wierszami od 501 do 1000. — Zestaw danych jest zbyt duży dla pojedynczej lokalizacji lub serwera.
— Dostęp do danych jest uzyskiwany na podstawie określonych zakresów lub filtrów.
— Aby zwiększyć wydajność, należy rozłożyć obciążenie między węzły fizyczne lub serwery.

Aby podzielić dane na partycje, rozważ następujące kroki:

  • Analizowanie danych i zapytań. Analizowanie wzorców danych i zapytań w celu zidentyfikowania odpowiednich strategii partycjonowania lub fragmentowania. Poznaj charakter danych, wzorców dostępu i wymagań dotyczących dystrybucji.

  • Określ klucz. Wybierz klucz partycjonowania lub fragmentowania, aby dystrybuować dane między partycjami lub fragmentami. Starannie wybierz klucz na podstawie cech danych i wymagań dotyczących zapytań.

  • Określanie logiki. Ustal logikę partycjonowania lub fragmentowania na podstawie wybranego klucza. Rozważ podzielenie danych na zakresy, zastosowanie algorytmów tworzenia skrótów lub użycie innych technik partycjonowania.

  • Konfigurowanie infrastruktury. Skonfiguruj system bazy danych do obsługi partycjonowania lub fragmentowania. Rozważ utworzenie niezbędnej infrastruktury, zdefiniowanie partycji lub fragmentów oraz skonfigurowanie dystrybucji danych.

Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące partycjonowania danych.

Optymalizowanie zapytań bazy danych

Optymalizacja zapytań bazy danych obejmuje uściślianie zapytań przy użyciu technik, takich jak wskazówki dotyczące indeksu i buforowanie. Te korekty zwiększają wydajność i szybkość pobierania danych. W związku z tym baza danych ma lżejsze obciążenie, zasoby działają wydajniej, a użytkownicy korzystają z łagodniejszych interakcji. Aby zoptymalizować zapytania bazy danych, należy wziąć pod uwagę następujące strategie:

  • Ponowne zapisywanie zapytań. Przejrzyj i przeanalizuj złożone zapytania, aby zidentyfikować możliwości ich ponownego zapisania. Rozważ restrukturyzację logiki zapytań, wyeliminowanie nadmiarowych operacji lub uproszczenie składni zapytań.

  • Unikaj problemu z zapytaniem N+1. Zminimalizuj liczbę połączeń z bazą danych za pomocą sprzężeń i pobierania wsadowego, aby wydajnie pobierać powiązane dane.

  • Zmień kolejność złączeń. Oceń plan zapytania i rozważ zmianę kolejności sprzężenia, aby zminimalizować liczbę wierszy w każdej operacji sprzężenia. Kolejność łączenia tabel może mieć wpływ na wydajność zapytań.

  • Użyj podpowiedzi indeksów. Użyj wskazówek dotyczących indeksu, aby aparat bazy danych mógł określić użycie indeksów podczas uruchamiania zapytania. Wskazówki dotyczące indeksu prowadzą optymalizator do wybierania najbardziej odpowiednich indeksów.

  • Buforowanie zapytań. Przechowuj wyniki często uruchamianych zapytań w pamięci. Buforowanie zapytań eliminuje konieczność wielokrotnego uruchamiania tego samego zapytania i zmniejsza obciążenie związane z przetwarzaniem zapytań.

  • Optymalizowanie blokowania. Unikaj niepotrzebnych lub restrykcyjnych wskazówek dotyczących blokowania w zapytaniach. Wydajne strategie blokowania mogą zwiększyć wydajność zapytań i współbieżność. Zastosuj zoptymalizowane mechanizmy blokowania zapewniane przez system bazy danych. Analizowanie i dostosowywanie poziomów izolacji w celu zrównoważenia spójności danych i wydajności zapytań.

  • Monitorowanie i dostrajanie. Monitorowanie metryk wydajności zapytań, takich jak środowisko uruchomieniowe, wykorzystanie zasobów i przepływność zapytań. Użyj narzędzi profilowania bazy danych i funkcji monitorowania, aby zidentyfikować zapytania o niskiej wydajności. Ocenianie i dostosowywanie planów zapytań na podstawie zebranych danych wydajności. Analizowanie planów zapytań i statystyk oczekiwania w celu zidentyfikowania wąskich gardeł. Użyj tych informacji, aby zoptymalizować wydajność zapytań.

Optymalizowanie wydajności indeksu

Indeksy zwiększają szybkość pobierania danych, umożliwiając bazom danych szybkie znajdowanie danych przy użyciu określonych kolumn lub pól. Podczas optymalizowania tych indeksów operacje sortowania i łączenia stają się bardziej wydajne, co prowadzi do szybszego wykonywania zapytań. Dobrze zoptymalizowane indeksy wycinają operacje we/wy dysku wymagane dla zapytań. Usunięcie niepotrzebnych lub nadmiarowych indeksów zwalnia również cenne miejsce do magazynowania. Aby zoptymalizować wydajność indeksu, rozważ następujące strategie:

  • Analizowanie wzorców zapytań. Poznaj wzorce zapytań uruchamiane w bazie danych. Zidentyfikuj zapytania, które są często uruchamiane i mogą obniżyć wydajność. Analizowanie wzorców zapytań w celu określenia, które indeksy są korzystne dla optymalizacji wydajności.

  • Oceń istniejące indeksy. Przejrzyj istniejące indeksy w bazie danych. Oceń ich użycie, efekty wydajności i istotność wzorców zapytań. Zidentyfikuj nadmiarowe lub nieużywane indeksy, które można usunąć, aby zwiększyć wydajność zapisu i zmniejszyć obciążenie magazynu.

  • Identyfikowanie kolumn do indeksowania. Zidentyfikuj kolumny, które są często używane w klauzulach where, join i order by zapytań. Te kolumny są potencjalnymi kandydatami do indeksowania, ponieważ umożliwiają szybkie pobieranie danych.

  • Wybierz odpowiedni typ indeksu. Wybierz odpowiedni typ indeksu na podstawie systemu bazy danych. Typowe opcje obejmują indeksy b-tree dla zapytań równości i zakresu, indeksy skrótów dla dokładnych zapytań dopasowania i indeksy pełnotekstowe dla operacji wyszukiwania tekstu. Wybierz typ indeksu, który najlepiej odpowiada wymaganiom zapytania.

  • Rozważ kolejność kolumn indeksu. Podczas tworzenia indeksów złożonych lub indeksów z wieloma kolumnami należy wziąć pod uwagę kolejność kolumn. Umieść kolumny, które są najczęściej używane w zapytaniach na początku indeksu. Kolejność kolumn pomaga zagwarantować, że obciążenie efektywnie używa indeksów dla szerokiego zakresu zapytań.

  • Zrównoważ rozmiar indeksu. Unikaj tworzenia indeksów w kolumnach o niskiej kardynalności lub kolumnach, które mają niewielką liczbę unikatowych wartości. Takie indeksy mogą być nieefektywne i zwiększać rozmiar bazy danych. Zamiast tego indeksuj kolumny o wysokiej selektywności.

  • Zachowaj użycie indeksu. Stale monitoruj użycie i wydajność indeksów. Poszukaj możliwości tworzenia nowych indeksów lub modyfikowania istniejących indeksów na podstawie zmian w wzorcach zapytań lub wymaganiach dotyczących wydajności. Usuń lub zaktualizuj indeksy, które nie są już korzystne. Indeksy mają obciążenie związane z konserwacją. W miarę zmian danych indeksy mogą fragmentować i wpływać na wydajność. Regularnie wykonuj zadania konserwacji indeksu, takie jak ponowne kompilowanie lub reorganizacja indeksów, aby zapewnić optymalną wydajność.

  • Przetestuj i zweryfikuj. Przed zmianą indeksów w środowisku produkcyjnym należy przeprowadzić dokładne testowanie i walidację. Mierzenie wpływu poprawek indeksu na wydajność przy użyciu reprezentatywnych obciążeń. Zweryfikuj ulepszenia względem predefiniowanych benchmarków.

Kompromis: indeksy B-tree mogą wymagać dużo miejsca na dysku, a zapytania o dokładne dopasowanie mogą działać wolno. Indeksy haszujące nie nadają się do zapytań zakresowych ani operatorów porównania. Indeksy pełnotekstowe mogą mieć wysokie wymagania dotyczące magazynu, a zapytania dotyczące danych nietekstowych mogą być powolne.

Rozważ kompresję danych

Kompresja danych to proces zmniejszania rozmiaru danych w celu zoptymalizowania miejsca do magazynowania i zwiększenia wydajności obciążenia. Skompresowane dane wymagają mniejszej ilości miejsca do magazynowania i mniejszej przepustowości do przesyłania, co skutkuje szybkim transferem danych. Kompresujesz dane, aby zmniejszyć ilość miejsca do magazynowania i skrócić czas dostępu do danych. Kompresowanie danych zmniejsza wymagania dotyczące operacji we/wy i przepustowości sieci.

Kompresja bezstratna i kompresja strat to algorytmy kompresji danych. Algorytmy kompresji bez strat zmniejszają rozmiar danych bez utraty żadnych informacji. Algorytmy kompresji stratnej osiągają wysokie współczynniki kompresji, usuwając mniej ważne lub nadmiarowe informacje.

Kompromis: aby kompresować i dekompresować dane, potrzebne są zasoby obliczeniowe, takie jak procesor CPU i pamięć. Tym więcej danych kompresujesz, tym więcej potrzebnych zasobów.

Archiwizowanie i przeczyszczanie danych

Archiwizowanie i przeczyszczanie to strategie usprawniające przechowywanie danych. Archiwizowanie przenosi starsze, rzadziej używane dane do bardziej ekonomicznego magazynu. Przeczyszczanie danych trwale usuwa nadmiarowe dane. Przyczyniają się one do wydajności dzięki zmniejszeniu ilości danych, zwiększeniu szybkości dostępu do danych oraz skróceniu czasu tworzenia kopii zapasowych i odzyskiwania:

  • Zmniejszenie ilości danych: mniejsze ilości danych oznacza krótszy czas przetwarzania, zapewniając szybkie odpowiedzi na żądania użytkowników.

  • Zwiększanie szybkości dostępu do danych: przycięty zestaw danych umożliwia szybsze wykonywanie zapytań i pobieranie danych, optymalizowanie czasu odpowiedzi systemu.

  • Skrócenie czasu tworzenia kopii zapasowych i odzyskiwania: mniejsze zestawy danych przyspieszają procesy tworzenia kopii zapasowych i przywracania, minimalizując przestoje i zapewniając spójną wydajność.

Archiwizowanie i przeczyszczanie odgrywa kluczową rolę w utrzymaniu szczytowej wydajności w systemach opartych na danych.

Optymalizowanie obciążenia magazynu

Optymalizacja obciążenia magazynu oznacza strumieniowe przesyłanie żądań do systemu magazynu. Pomaga wyeliminować niepotrzebne żądania. Zwiększa również pobieranie danych i zapobiega przeciążeniu magazynu. Optymalizacja obciążenia pamięci masowej zapewnia, że system pamięci masowej sprawnie odpowiada na uprawnione żądania i utrzymuje maksymalną wydajność. Zaimplementuj strategie, aby zmniejszyć obciążenie przetwarzania magazynu danych. Aby zoptymalizować obciążenie magazynu danych, należy wziąć pod uwagę następujące strategie:

Korzystanie z buforowania

Pamięć podręczna przechowuje często wykorzystywane dane w obszarze szybkiego dostępu, dzięki czemu ich pobieranie jest szybsze niż pobieranie ich z głównego źródła. Ta technika zwiększa wydajność danych, skracając czas dostępu i unikając powtarzających się pobierania danych. Buforowanie poprawia szybkość odczytu i odpowiedź użytkowników, zwłaszcza w przypadku często używanych danych. Ta metoda jest najskuteczniejsza w przypadku danych statycznych lub danych, które rzadko się zmieniają.

Aby zapewnić optymalną efektywność pamięci podręcznej, weź pod uwagę takie czynniki jak zasady wygasania, strategie usuwania oraz zarządzanie wielkością pamięci podręcznej. Dostosuj ustawienia, takie jak czas wygaśnięcia (TTL), aby uzyskać optymalną wydajność. Aby zoptymalizować obciążenie pamięci masowej za pomocą pamięci podręcznej, rozważ następujące strategie:

  • Buforowanie w pamięci: buforowanie w pamięci umożliwia przechowywanie często używanych danych w pamięci w celu szybkiego pobierania. Tej techniki można użyć w przypadku danych aplikacji, które są kosztowne do obliczeń lub pobierania z bazy danych. Buforowanie w pamięci jest przydatne w przypadku często odczytywanych danych, ale nie zmieniają się często.

  • Buforowanie zapytań bazy danych: ta technika służy do buforowania wyników zapytań bazy danych, aby uniknąć wielokrotnego uruchamiania tego samego zapytania. Buforowanie zapytań bazy danych jest przydatne w przypadku złożonych i czasochłonnych zapytań bazy danych. Gdy buforujesz wyniki zapytania, kolejne żądania dla tego samego zapytania są zwracane szybko.

  • Buforowanie sieci dostarczania zawartości: ta technika służy do buforowania zawartości internetowej na rozproszonych serwerach sieciowych, aby zmniejszyć opóźnienia i poprawić dostarczanie zawartości. Buforowanie sieci dostarczania zawartości jest skuteczne w przypadku zawartości statycznej, takiej jak obrazy, pliki CSS i pliki JavaScript. Sieci dostarczania zawartości przechowują kopie zawartości w wielu lokalizacjach na całym świecie, dzięki czemu użytkownicy mogą uzyskiwać dostęp do zawartości z serwera, który znajduje się w pobliżu nich geograficznie.

Korzystanie z replik do odczytu

Wiele baz danych obsługuje wiele replik do odczytu. Rozłóż zapytania odczytu między repliki, aby zminimalizować obciążenie bazy danych obsługującej zapisy. Każda replika do odczytu może obsługiwać część ruchu, co może poprawić wydajność.

Jeśli masz obciążenie z wieloma replikami danych, które powinny pozostać zsynchronizowane, warto modelować ten rozproszony system przy użyciu twierdzenia PACELC. Twierdzenie PACELC pomaga zrozumieć wybory kompromisu między opóźnieniem a spójnością, gdy w systemie nie występuje partycjonowanie. Skorzystaj z tych informacji, aby wybrać silnik bazy danych i strategię synchronizacji danych, które najlepiej sprawdzą się w systemie w stanie partycjonowanym i niepartycjonowanym. Aby uzyskać więcej informacji, zobacz Wzorzec podziału odpowiedzialności poleceń i zapytań (CQRS).

Optymalizowanie spójności danych

W obciążeniu rozproszonym, w którym dane znajdują się w wielu węzłach lub lokalizacjach, wybierany poziom spójności określa, jak szybko zmiany w jednej lokalizacji odzwierciedlają się w innych. Wybranie bardziej rygorystycznej spójności zużywa więcej zasobów obliczeniowych i może negatywnie wpłynąć na wydajność. Z drugiej strony mniej rygorystyczny poziom spójności, taki jak spójność ostateczna, wprowadza tymczasowe niespójności między węzłami, ale może zwiększyć wydajność.

Spójność ostateczna zapewnia równowagę między dokładnością danych a wydajnością obciążenia. Zmiany są wprowadzane stopniowo, a nie natychmiast, co zwiększa responsywność obciążeń roboczych i szybkość przetwarzania danych. Chociaż wprowadza krótkotrwałe niespójności, obciążenie robocze ostatecznie zapewnia spójność danych we wszystkich węzłach. Wybranie spójności ostatecznej może zwiększyć wydajność obciążenia i zwiększyć jego dostępność i skalowalność.

Optymalizowanie aktualizacji danych

Możesz użyć optymistycznej współbieżności do obsługi współbieżnych aktualizacji tych samych danych. Zamiast blokować dane i zapobiegać innym aktualizacjom, optymistyczna współbieżność umożliwia wielu użytkownikom lub procesom równoczesną pracę i zakłada, że konflikty są rzadkie.

W przypadku optymistycznej współbieżności każda operacja aktualizacji zawiera wersję lub sygnaturę czasową reprezentującą stan danych w momencie aktualizacji. Po wykryciu aktualizacji powodującej konflikt system rozwiązuje konflikt, odrzucając aktualizację lub scalając zmiany.

Optymistyczna współbieżność minimalizuje rywalizację i umożliwia współbieżne aktualizacje do kontynuowania bez niepotrzebnego blokowania. Skraca czas oczekiwania na zasoby i zapewnia wysoką przepływność.

Optymalizowanie przenoszenia i przetwarzania danych

Optymalizacja przenoszenia i przetwarzania danych obejmuje poprawę wydajności i wydajności operacji związanych z wyodrębnianiem, przekształcaniem, ładowaniem i przetwarzaniem danych. Rozważ następujące kluczowe aspekty optymalizacji przenoszenia i przetwarzania danych:

  • Optymalizacja wyodrębniania, przekształcania i ładowania (ETL): Optymalizowanie procesów ETL w celu zminimalizowania czasu przetwarzania. Możesz usprawnić proces ekstrakcji, wdrożyć wydajne algorytmy transformacji i zoptymalizować proces ładowania. Gdy każdy etap jest wydajny, możesz zoptymalizować cały przepływ pracy.

  • Przetwarzanie równoległe: korzystaj z technik przetwarzania równoległego, aby zwiększyć wydajność. Podczas dystrybucji zadań przetwarzania danych w wielu wątkach lub węzłach można dzielić i przetwarzać obciążenie współbieżnie, co powoduje szybkie przetwarzanie.

  • Przetwarzanie wsadowe: grupuj podobne zadania, aby zmniejszyć narzut wynikający z powtarzających się operacji. Przetwarzanie wielu zadań w partii w celu skrócenia ogólnego czasu przetwarzania.

Optymalizowanie projektu magazynu

Optymalizacja projektu magazynu wiąże się z tworzeniem precyzyjnej architektury magazynu danych i wybierania odpowiednich technologii magazynowania. Uproszczona konstrukcja systemu przechowywania danych usprawnia dostęp do danych, ich pobieranie i przetwarzanie. Dzięki strategicznemu projektowi pamięci masowej obciążenie robocze osiąga krótsze czasy odpowiedzi i lepszą ogólną funkcjonalność.

Projektowanie z myślą o bliskości danych

Bliskość danych odnosi się do strategicznego umieszczania danych bliżej użytkowników lub usług, które najczęściej uzyskują do niego dostęp. Dzięki zmniejszeniu fizycznej lub logicznej odległości między danymi a użytkownikami bliskość danych zapewnia szybszy dostęp do danych i lepszą szybkość reakcji. Aby zoptymalizować projekt pod kątem bliskiej odległości, rozważ następujące strategie:

  • Oceń wzorce dostępu do danych: Przeanalizuj wzorce dostępu w ramach obciążenia i często używane dane. Ta analiza może pomóc w ustaleniu, gdzie należy umieścić dane w celu uzyskania maksymalnej korzyści.

  • Wybierz rozwiązania obsługujące relokację danych: rozważ rozwiązania, które oferują dynamiczną relokację danych na podstawie zmieniających się wzorców dostępu, zapewniając optymalne pozycjonowanie danych.

  • Wybierz rozwiązania, które obsługują synchronizację danych: jeśli catering jest oparty na rozproszonej bazie użytkowników, wybierz rozwiązania, które ułatwiają synchronizację danych w różnych regionach, zapewniając, że repliki danych są dostępne w pobliżu użytkowników.

Kompromis: jeśli podstawowe dane zmieniają się często, zaimplementuj mechanizm unieważniania pamięci podręcznej, aby zapewnić aktualność buforowanych danych.

Stosuj trwałość poliglotyczną

Poliglotyczna persystencja to praktyka wykorzystywania wielu technologii przechowywania danych do składowania i zarządzania różnymi typami danych w obrębie aplikacji lub systemu. Różne typy baz danych lub rozwiązań magazynu spełniają różne wymagania dotyczące danych.

Podejście polyglot persistence wykorzystuje zalety każdej technologii przechowywania danych, aby zapewnić optymalną wydajność i skalowalność dla każdego rodzaju danych. Na przykład możesz użyć relacyjnej bazy danych do przechowywania danych strukturalnych, transakcyjnych. Baza danych NoSQL może być używana do przechowywania danych bez struktury lub częściowo ustrukturyzowanych.

Zaprojektuj schemat dla każdej technologii przechowywania danych na podstawie wymagań dotyczących danych. W przypadku relacyjnych baz danych można utworzyć znormalizowane tabele z odpowiednimi relacjami. W przypadku baz danych NoSQL można zdefiniować struktury dokumentów lub pary klucz-wartość. Opracuj niezbędne komponenty umożliwiające współpracę z każdą technologią przechowywania danych, takie jak interfejsy API, warstwy dostępu do danych lub potoki integracji danych. Upewnij się, że aplikacja może odczytywać i zapisywać dane w odpowiednich magazynach danych.

Kompromis: Struktura danych o niskiej normalizacji może poprawić wydajność, ale wprowadzić złożoność.

Oddzielanie systemów OLTP i OLAP

Aby oddzielić systemy OLTP i OLAP , projektuj i wdrażaj różne systemy na potrzeby zadań przetwarzania transakcyjnego i przetwarzania analitycznego. Ta separacja pozwala zoptymalizować każdy system pod kątem określonych obciążeń i cech.

Systemy OLTP są używane do przetwarzania transakcyjnego w czasie rzeczywistym. Efektywnie i niezawodnie obsługują poszczególne transakcje. Systemy OLTP są zwykle używane do wykonywania codziennych zadań operacyjnych, takich jak przetwarzanie zamówień online, zarządzanie zapasami i zarządzanie danymi klientów. Systemy OLTP priorytetują czas odpowiedzi, spójność i współbieżność.

Systemy OLAP są używane do złożonego przetwarzania analitycznego i raportowania. Obsługują duże ilości danych i wykonują intensywne obliczenia i agregacje. Systemy OLAP są używane do zadań, takich jak analiza biznesowa, wyszukiwanie danych i pomoc techniczna w zakresie podejmowania decyzji. Systemy OLAP ustalają priorytety wydajności zapytań, agregacji danych i analizy wielowymiarowej.

W przypadku oddzielenia systemów OLTP i OLAP można przydzielić odpowiednie zasoby i zoptymalizować każdy system pod kątem określonego obciążenia. Separacja umożliwia zastosowanie różnych technik modelowania danych do każdego systemu. Systemy OLTP zwykle używają znormalizowanych schematów do wydajnego przetwarzania transakcyjnego. Systemy OLAP mogą używać zdenormalizowanych schematów lub technik magazynowania danych w celu zoptymalizowania wydajności zapytań.

Ułatwienia platformy Azure

Dane profilowania: platforma Azure oferuje narzędzia i usługi, których można użyć do profilowania danych, takich jak Azure Data Catalog, Azure Purview i Azure Synapse Analytics. Te narzędzia umożliwiają wyodrębnianie, przekształcanie i ładowanie danych z różnych źródeł, przeprowadzanie kontroli jakości danych i uzyskiwanie wglądu w dane.

Monitorowanie wydajności danych: aby monitorować wydajność danych, możesz użyć usługi Azure Monitor do zbierania i analizowania metryk infrastruktury, dzienników i danych aplikacji. Możesz zintegrować usługę Monitor z innymi usługami, takimi jak Application Insights. Usługa Application Insights zapewnia monitorowanie wydajności aplikacji i obsługuje wiele platform.

Usługa Application Insights zbiera dane użycia i wydajności. Za pomocą usługi Log Analytics można skorelować te dane z danymi konfiguracji i wydajności w zasobach platformy Azure.

Aby monitorować bazę danych, możesz użyć funkcji szczegółowych informacji usług Azure SQL i Azure Cosmos DB . Ta funkcja umożliwia diagnozowanie i dostosowywanie problemów z wydajnością bazy danych.

Partycjonowanie danych: platforma Azure oferuje różne strategie partycjonowania dla różnych magazynów danych. Każdy magazyn danych może mieć różne zagadnienia i opcje konfiguracji partycjonowania danych. Aby uzyskać więcej informacji, zobacz Strategie partycjonowania danych.

Optymalizowanie zapytań bazy danych i wydajności indeksu: użyj funkcji szczegółowych informacji o wydajności zapytań usługi Azure SQL Database, aby zoptymalizować zapytania, tabele i bazy danych. Za pomocą tej funkcji można identyfikować i rozwiązywać problemy z wydajnością zapytań.

W przypadku relacyjnych baz danych należy postępować zgodnie z wytycznymi dotyczącymi projektowania indeksów, wskazówkami dotyczącymi indeksu programu SQL Server i wskazówkami dotyczącymi indeksu usługi Azure Cosmos DB. Użyj usługi SQL Database, aby wykonać automatyczne dostrajanie zapytań w celu zwiększenia ich wydajności.

W bazach danych SQL należy regularnie reorganizować lub ponownie kompilować indeksy. Zidentyfikuj wolne zapytania i dostrój je, aby poprawić wydajność. Wiele silników baz danych ma funkcje optymalizacji zapytań. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące wydajności zapytań.

Usługa Azure Cosmos DB ma domyślne zasady indeksowania, które indeksują każdą właściwość każdego elementu i wymuszają indeksy zakresu dla dowolnego ciągu lub liczby. Te zasady zapewniają wydajną wydajność zapytań i nie trzeba zarządzać indeksami z góry.

W przypadku wzorców zapytań z przewagą operacji odczytu, które nie odpowiadają transakcyjnemu kluczowi partycji, globalne indeksy pomocnicze w usłudze Azure Cosmos DB udostępniają indeksy tylko do odczytu z niezależnymi kluczami partycji. Użyj ich, aby zmniejszyć koszt zapytań między partycjami, ale zaplanuj dodatkowe kwestie związane z projektem indeksowania i przepustowością.

Optymalizacja obciążenia magazynu: wiele usług bazy danych platformy Azure obsługuje repliki do odczytu. Dostępność i konfiguracja replik do odczytu różnią się w zależności od usługi azure database. Zapoznaj się z oficjalną dokumentacją każdej usługi, aby poznać szczegóły i opcje.

Optymalizacja projektowania pamięci masowej: Azure oferuje wiele różnych usług magazynowania danych dostosowanych do wymagań obciążeń roboczych. Omówienie typów magazynów danych i wybieranie magazynu danych platformy Azure dla aplikacji.

Lista kontrolna efektywności wydajnościowej

Zapoznaj się z pełnym zestawem zaleceń.