Księgarnia PWN

   

   

   

   

   

   

   

   

.

.

Bezpłatny newsletter


Hurtownie danych - sekwencja ładowania

Hurtownie danych - sekwencja ładowania

Określenie poprawnej kolejności ładowania (czyli ostatniego etapu ETL) tylko z pozoru jest rzeczą łatwą. Projektant musi wziąć pod uwagę cały szereg czynników. Nieuwzględnienie choć jednego z nich może w najlepszym wypadku negatywnie wpłynąć na wydajność procesu zasilania hurtowni, a w najgorszym naruszyć integralność danych. Zdarzają się nawet sytuacje skrajne, gdy niedopracowana kolejność ładownia danych całkowicie uniemożliwia zasilenie hurtowni.

W aplikacjach operacyjnych, w których mamy do czynienia głównie z przetwarzaniem transakcyjnym, kolejność wstawiania wierszy do tabel jest naturalna, określają ją praktycznie tylko dwa czynniki: kolejność procesu biznesowego i zdefiniowane w bazie związki referencyjne (najpierw tabele nadrzędne, potem potomne). Ewentualne konflikty rozwiązujemy, stosując odpowiednie poziomy izolacji i łącząc instrukcje w zamknięte logicznie całości – transakcje. W przypadku hurtowni danych sprawa nie jest taka prosta. Musimy odpowiedzieć na dwa pytania: w jakiej kolejności ładować tabele i które tabele mogą być zasilane jednocześnie. Drugi problem ma kluczowe znaczenie dla wydajności ETL. Gdybyśmy zasilali tabele danymi kolejno, jedna po drugiej, czas ładowania byłby nieakceptowalnie długi. Dlatego należy połączyć tabele w grupy. Do tej samej grupy wchodzą tabele, które:

  • nie są ze sobą powiązane logicznie, a tym samym mogą być niezależnie zasilane danymi. Dotyczy to zarówno możliwości ładowania równoległego, jak i dowolności kolejności ładowania (każda z tabel w grupie może być zasilona danymi przed lub po każdej innej tabeli grupy),
  • mają takie same wymagania odnośnie zasilenia danymi obiektów poprzedzających, a tym samym mogą być zasilane danymi w tym samym czasie (żadna z tabel w grupie nie czeka na „przygotowanie” obiektu pomocniczego lub nadrzędnego).

Każdej grupie przyporządkowujemy kolejny numer – oznacza on pozycję grupy w sekwencji ładowania.

Pułapka: Przynależność tabel do tej samej grupy nie oznacza, że wszystkie one muszą być ładowane równolegle, a jedynie, że istnieje taka możliwość. O stopniu zrównoleglenia w obrębie grupy decyduje szereg czynników specyficznych dla danego środowiska. Są to przede wszystkim: możliwości narzędzi wykorzystywanych w procesie ETL, możliwości serwera baz danych i możliwości sprzętu (najwymyślniejszy algorytm ładowania niewiele pomoże, gdy żądania zapisu utkną w kolejce do dysku).

Oto klasyczny podział na grupy ładowania:

  • Tabele robocze i tabele pomocnicze,
  • Tabele wymiarów. W obrębie tej grupy wyróżniamy podgrupy składające się z trzech tabel: tabela podstawowa, tabela grupy i most,
  • Mosty hierarchii,
  • Tabele faktów i migawki przyrostowe,
  • Migawki okresowe (do tej grupy należą także widoki zmaterializowane zawierające w swych definicjach funkcje agregujące).

Zaprezentowany powyżej podział sprawdzi się tylko wtedy, kiedy mamy do czynienia z modelem wielowymiarowym w stu procentach zgodnym z teorią. W praktyce rzadko udaje się uzyskać taki efekt (wspominałam o tym podczas omawiania indeksowania), dlatego zależności są bardziej skomplikowane. Za przykład weźmy wymiar PACJENT, w którym zdefiniowano atrybuty ZAWÓD i UPRAWIANA_DYSCYPLINA_SPORTU. W trakcie projektowania uznano, że warto utworzyć oddzielne wymiary ZAWÓD i DYSCYPLINA_SPORTU, gdyż niektóre tabele faktów będą analizowane w kontekście tych wartości bez uwzględnienia pozostałych danych pacjenta. Korzyść jest oczywista: po nałożeniu filtra na przykład na atrybut „uprawiany sport” nie musimy przeszukać dużej tabeli wymiaru PACJENT, a tylko niewielki wymiar DYSCYPLINA_SPORTU. Z drugiej strony, informacja o dyscyplinach sportu uprawianych przez pacjentów jest dość ciekawa dla osób badających zachowania klientów, stąd decyzja o pozostawieniu atrybutów także w wymiarze PACJENT. Problem polega na tym, że jedynym źródłem danych dla tabel wymiarów DYSCYPLINA_SPORTU i ZAWÓD są odpowiednie atrybuty wymiaru PACJENT. Tak więc, ładowanie danych do tych wymiarów można rozpocząć dopiero po zakończeniu zasilania wymiaru PACJENT. I tak, podział na grupy sekwencji ładowania ulegnie zmianie.

  • Tabele robocze i tabele pomocnicze,
  • Tabele wymiarów (za wyjątkiem wymiarów zależnych ZAWÓD i DYSCYPLINA SPORTU). W obrębie tej grupy wyróżniamy podgrupy składające się z trzech tabel: tabela podstawowa, tabela grupy i most,
  • Tabele wymiarów zależnych ZAWÓD i DYSCYPLINA SPORTU,
  • Mosty hierarchii,
  • Tabele faktów i migawki przyrostowe,
  • Migawki okresowe (do tej grupy należą także widoki zmaterializowane zawierające w swych definicjach funkcje agregujące).

Dodatkowe komplikacje pojawiają się, gdy zamiast schematu gwiazdy zastosujemy schemat płatka śniegu. Przypomnę, że w schemacie tym tabele wymiarów są częściowo znormalizowane (w niektórych przypadkach możemy nawet spotkać dobrze nam znaną trzecią postać normalną). W takiej sytuacji zasilanie danymi zaczynamy od tabel nadrzędnych, a następnie przechodzimy do kolejnych poziomów potomnych. Podział na grupy sekwencji ładowania rozrasta się przy tym o kolejne pozycje.

  • Tabele robocze i tabele pomocnicze,
  • Tabele wymiarów nadrzędnych (za wyjątkiem wymiarów zależnych ZAWÓD i DYSCYPLINA SPORTU). W obrębie tej grupy wyróżniamy podgrupy składające się z trzech tabel: tabela podstawowa, tabela grupy i most,
  • Tabele wymiarów zależnych ZAWÓD i DYSCYPLINA SPORTU oraz tabele podrzędne pierwszego poziomu,
  • Tabele podrzędne drugiego poziomu,
  • Tabele podrzędne n-tego poziomu,
  • Mosty hierarchii,
  • Tabele faktów i migawki przyrostowe,
  • Migawki okresowe (do tej grupy należą także widoki zmaterializowane zawierające w swych definicjach funkcje agregujące).

Więcej informacji na temat schematu płatka śniegu znajduje się w rozdziale „Model logiczny”, w części „Schemat płatka śniegu”, książki "Hurtownie danych w teorii i praktyce", która będzie miała swoją premierę 28.07.2014.

Autor: Agnieszka Guyrics-Chodkowska

Polecamy

Partnerzy