{"id":92015,"date":"2020-08-21T19:42:13","date_gmt":"2020-08-21T17:42:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh"},"modified":"2020-08-21T19:42:13","modified_gmt":"2020-08-21T17:42:13","slug":"obzor-gibkih-metodologij-proektirovaniya-dwh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","title":{"rendered":"Przegl\u0105d elastycznych metodologii projektowania DWH","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tworzenie sk\u0142adowiska to d\u0142ugotrwa\u0142y i powa\u017cny proces. <\/p>\n<p>Wiele w \u017cyciu projektu zale\u017cy od tego, jak dobrze zaplanowany jest model obiektowy i struktura bazy na pocz\u0105tku.<\/p>\n<p>Powszechnie stosowanym podej\u015bciem by\u0142y i pozostaj\u0105 r\u00f3\u017cne warianty po\u0142\u0105czenia schematu 'gwiazdy' z trzeci\u0105 normaln\u0105 form\u0105. Zasada jest zazwyczaj taka: dane \u017ar\u00f3d\u0142owe \u2014 3NF, hurtownie \u2014 gwiazda. To podej\u015bcie, sprawdzone w czasie i potwierdzone wieloma badaniami \u2014 to pierwsze (a czasem i jedyne), co przychodzi do g\u0142owy do\u015bwiadczonemu specjalistowi DWH, kiedy my\u015bli o tym, jak powinno wygl\u0105da\u0107 analityczne sk\u0142adowisko.<\/p>\n<p>Z drugiej strony \u2014 biznes og\u00f3lnie i wymagania klienta szczeg\u00f3lnie, maj\u0105 tendencj\u0119 do szybkiej zmiany, a dane \u2014 do rozwoju zar\u00f3wno 'w g\u0142\u0105b', jak i 'na szeroko\u015b\u0107'. I tutaj objawia si\u0119 g\u0142\u00f3wny brak gwiazdy \u2014 ograniczona <b>elastyczno\u015b\u0107<\/b>.<\/p>\n<p>I je\u015bli w Twoim cichym i przytulnym \u017cyciu dewelopera DWH nagle:<\/p>\n<ul>\n<li>pojawia si\u0119 zadanie 'zr\u00f3b szybko cokolwiek, a potem zobaczymy';<\/li>\n<li>wyst\u0119puje szybko rozwijaj\u0105cy si\u0119 projekt, z pod\u0142\u0105czeniem nowych \u017ar\u00f3de\u0142 i przer\u00f3bk\u0105 modelu biznesowego co najmniej raz w tygodniu;<\/li>\n<li>pojawia si\u0119 klient, kt\u00f3ry nie wyobra\u017ca sobie, jak ma wygl\u0105da\u0107 system i jakie funkcje ma spe\u0142nia\u0107 w ko\u0144cu, ale jest got\u00f3w na eksperymenty i stopniowe doprecyzowanie po\u017c\u0105danego wyniku z cyklicznym zbli\u017caniem si\u0119 do niego;<\/li>\n<li>ukaza\u0142 si\u0119 mened\u017cer projektu z radosn\u0105 nowin\u0105: 'A teraz mamy Agile!'.<\/li>\n<\/ul>\n<p>\nLub je\u015bli po prostu chcesz si\u0119 dowiedzie\u0107, jak jeszcze mo\u017cna budowa\u0107 sk\u0142adowiska \u2014 zapraszamy poni\u017cej!<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/59cd70ca3af4841d0c5c9bfbbd7636a3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Co oznacza 'elastyczno\u015b\u0107'<\/h3>\n<p>\nNa pocz\u0105tek ustalmy, jakie cechy powinna mie\u0107 system, aby mo\u017cna go by\u0142o nazwa\u0107 'elastycznym'. <\/p>\n<p>Osobno nale\u017cy zaznaczy\u0107, \u017ce opisane cechy powinny odnosi\u0107 si\u0119 w\u0142a\u015bnie do <b>systemu<\/b>, a nie do <b>procesu <\/b>jego rozwoju. Dlatego je\u015bli chcia\u0142e\u015b przeczyta\u0107 o Agile jako metodologii rozwoju, lepiej zapozna\u0107 si\u0119 z innymi artyku\u0142ami. Na przyk\u0142ad, na Habrze znajduje si\u0119 mn\u00f3stwo interesuj\u0105cych materia\u0142\u00f3w (zar\u00f3wno <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/436178\/\">przegl\u0105dowych<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/284012\/\">praktycznych<\/a><\/noindex>, jak i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dataart\/blog\/245605\/\">problemowych<\/a><\/noindex>).<\/p>\n<p>To nie oznacza, \u017ce proces tworzenia i struktura hurtowni danych w \u017caden spos\u00f3b nie s\u0105 ze sob\u0105 powi\u0105zane. Og\u00f3lnie rzecz bior\u0105c, rozwijanie hurtowni z elastyczn\u0105 architektur\u0105 w podej\u015bciu Agile powinno by\u0107 znacznie \u0142atwiejsze. W praktyce jednak cz\u0119\u015bciej spotykamy przypadki zwi\u0105zane z klasycznym DWH wed\u0142ug Kimbala oraz Data Vault \u2014 w metodyce kaskadowej, ni\u017c szcz\u0119\u015bliwe zbiegi okoliczno\u015bci w elastyczno\u015bci w obu jej formach w jednym projekcie.<\/p>\n<p>A wi\u0119c, jakie cechy powinno mie\u0107 elastyczne hurtownia danych? Mo\u017cna wyr\u00f3\u017cni\u0107 trzy punkty:<\/p>\n<ol>\n<li><b>Wczesna dostawa i szybka modyfikacja<\/b> \u2014 to oznacza, \u017ce idealnie pierwszy wynik biznesowy (na przyk\u0142ad pierwsze dzia\u0142aj\u0105ce raporty) powinien by\u0107 uzyskany jak najszybciej, czyli jeszcze przed pe\u0142nym zaprojektowaniem i wdro\u017ceniem ca\u0142ego systemu. Przy tym ka\u017cda kolejna modyfikacja r\u00f3wnie\u017c powinna zajmowa\u0107 jak najmniej czasu.<\/li>\n<li><b>Iteracyjna modyfikacja<\/b> \u2014 to oznacza, \u017ce ka\u017cda kolejna modyfikacja nie powinna w idealnym przypadku wp\u0142ywa\u0107 na ju\u017c dzia\u0142aj\u0105ce funkcje. Ten moment cz\u0119sto staje si\u0119 najwi\u0119kszym koszmarem w du\u017cych projektach - pr\u0119dzej czy p\u00f3\u017aniej poszczeg\u00f3lne obiekty zaczynaj\u0105 gromadzi\u0107 tak wiele zale\u017cno\u015bci, \u017ce \u0142atwiej jest ca\u0142kowicie powieli\u0107 logik\u0119 w obok, ni\u017c doda\u0107 pole do istniej\u0105cej tabeli. A je\u015bli zastanawiasz si\u0119, dlaczego analiza wp\u0142ywu modyfikacji na istniej\u0105ce obiekty mo\u017ce zajmowa\u0107 wi\u0119cej czasu ni\u017c sama modyfikacja \u2014 prawdopodobnie jeszcze nie pracowa\u0142e\u015b z du\u017cymi hurtowniami danych w bankowo\u015bci lub telekomunikacji.<\/li>\n<li><b>Ci\u0105g\u0142a adaptacja do zmieniaj\u0105cych si\u0119 wymaga\u0144 biznesowych<\/b> \u2014 og\u00f3lna struktura obiekt\u00f3w powinna by\u0107 zaprojektowana nie tylko z my\u015bl\u0105 o mo\u017cliwym rozszerzeniu, ale z za\u0142o\u017ceniem, \u017ce kierunek tego kolejnego rozszerzenia m\u00f3g\u0142by nie przyj\u015b\u0107 Ci nawet do g\u0142owy na etapie projektowania.<\/li>\n<\/ol>\n<p>\nI tak, zgodno\u015b\u0107 ze wszystkimi tymi wymaganiami w jednym systemie jest mo\u017cliwa (oczywi\u015bcie w okre\u015blonych przypadkach i z pewnymi zastrze\u017ceniami).<\/p>\n<p>Poni\u017cej om\u00f3wi\u0119 dwie najbardziej popularne metodologie elastycznego projektowania dla hurtowni danych \u2014 <b>Model Anchor<\/b> i <b>Data Vault<\/b>. W nawiasach pozostaj\u0105 takie wspania\u0142e techniki, jak na przyk\u0142ad EAV, 6NF (w czystej postaci) i wszystko, co dotyczy rozwi\u0105za\u0144 NoSQL \u2014 nie dlatego, \u017ce s\u0105 one gorsze, ani nawet dlatego, \u017ce w tym przypadku artyku\u0142 m\u00f3g\u0142by zyska\u0107 obj\u0119to\u015b\u0107 przeci\u0119tnej pracy dyplomowej. Po prostu wszystko to odnosi si\u0119 do rozwi\u0105za\u0144 nieco innej klasy \u2014 albo do technik, kt\u00f3re mo\u017cna zastosowa\u0107 w specyficznych przypadkach, niezale\u017cnie od og\u00f3lnej architektury projektu (jak EAV), albo do ca\u0142kowicie innych paradygmat\u00f3w przechowywania informacji (jak na przyk\u0142ad bazy danych grafowych i inne warianty NoSQL).<\/p>\n<h3>Problemy klasycznego podej\u015bcia i ich rozwi\u0105zania w elastycznych metodach<\/h3>\n<p>\n<i>Przez klasyczne podej\u015bcie rozumiem dobr\u0105, star\u0105 gwiazd\u0119 (niezale\u017cnie od konkretnej implementacji dolnych warstw, niech mnie wybacz\u0105 zwolennicy Kimbola, Inmona i CDM).<br \/>\n<\/i><\/p>\n<h4>1. Sztywna kardynalno\u015b\u0107 relacji<\/h4>\n<p>\nW podstawie takiego modelu le\u017cy wyra\u017ane rozdzielenie danych na <b>wymiary (Dimension)<\/b> i <b>fakty (Fact)<\/b>. I to, kurcz\u0119, ma sens \u2014 bowiem analiza danych w przyt\u0142aczaj\u0105cej wi\u0119kszo\u015bci przypadk\u00f3w sprowadza si\u0119 do analizy okre\u015blonych wska\u017anik\u00f3w liczbowych (fakt\u00f3w) w okre\u015blonych przekrojach (wymiarach).<\/p>\n<p>Przy tym relacje mi\u0119dzy obiektami s\u0105 zak\u0142adane w postaci powi\u0105za\u0144 mi\u0119dzy tabelami przez klucz obcy. Wygl\u0105da to ca\u0142kiem naturalnie, ale od razu prowadzi do pierwszego ograniczenia elastyczno\u015bci \u2014 <b>sztywnego okre\u015blenia kardynalno\u015bci relacji<\/b>.<\/p>\n<p>Oznacza to, \u017ce na etapie projektowania tabel musisz dok\u0142adnie okre\u015bli\u0107, czy ka\u017cda para powi\u0105zanych obiekt\u00f3w mo\u017ce mie\u0107 relacj\u0119 wiele-do-wielu, czy tylko 1-do-wielu, i \"w kt\u00f3r\u0105 stron\u0119\". Od tego bezpo\u015brednio zale\u017cy, w kt\u00f3rej z tabel b\u0119dzie klucz podstawowy, a w kt\u00f3rej \u2014 zewn\u0119trzny. Zmiana tej relacji przy uzyskiwaniu nowych wymaga\u0144 z du\u017cym prawdopodobie\u0144stwem doprowadzi do przer\u00f3bki bazy.<\/p>\n<p>Na przyk\u0142ad, projektuj\u0105c obiekt \"paragon\", opieraj\u0105c si\u0119 na przysi\u0119g\u0142ych zapewnieniach dzia\u0142u sprzeda\u017cy, za\u0142o\u017cy\u0142e\u015b mo\u017cliwo\u015b\u0107 dzia\u0142ania <b>jednej promocji na kilka pozycji paragonu<\/b> (ale nie odwrotnie):<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/15226cb79c30364d94147383ba36a8fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA po pewnym czasie koledzy wprowadzili now\u0105 strategi\u0119 marketingow\u0105, w kt\u00f3rej na t\u0119 sam\u0105 pozycj\u0119 mog\u0105 dzia\u0142a\u0107 <b>wiele promocji jednocze\u015bnie<\/b>. I teraz musisz dostosowa\u0107 tabele, wydzielaj\u0105c relacj\u0119 w osobny obiekt. <\/p>\n<p>(Wszystkie obiekty pochodne, w kt\u00f3rych odbywa si\u0119 join check na promocji, teraz r\u00f3wnie\u017c wymagaj\u0105 poprawek).<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/3c4d84a31088660257d74c4c703071e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Powi\u0105zania w Data Vault i Modelu Ankorowym<\/b><\/p>\n<p>Unikni\u0119cie takiej sytuacji okaza\u0142o si\u0119 do\u015b\u0107 proste: nie nale\u017cy wierzy\u0107 dzia\u0142owi sprzeda\u017cy, wystarczy <b>wszystkie powi\u0105zania przechowywa\u0107 pocz\u0105tkowo w oddzielnych tabelach<\/b> i przetwarza\u0107 je jako wiele do wielu. <\/p>\n<p>Takie podej\u015bcie zosta\u0142o zaproponowane <b>przez Dana Linstedta<\/b> jako cz\u0119\u015b\u0107 paradygmatu <b>Data Vault<\/b> i zosta\u0142o ca\u0142kowicie poparte <b>przez Larsa R\u00f6nnb\u00e4cka<\/b> do <b>Modelu Ankorowego<\/b>.<\/p>\n<p>W efekcie otrzymujemy pierwsz\u0105 charakterystyczn\u0105 cech\u0119 elastycznych metodologii:<\/p>\n<blockquote><p>Powi\u0105zania mi\u0119dzy obiektami nie s\u0105 przechowywane w atrybutach encji rodzicielskich, ale stanowi\u0105 osobny typ obiekt\u00f3w.<\/p><\/blockquote>\n<p>W <b>Data Vault<\/b> takie tabele \u0142\u0105cz\u0105ce nazywane s\u0105 <b>Link<\/b>, a w <b>Modelu Ankorowym<\/b> \u2014 <b>Tie<\/b>. Na pierwszy rzut oka s\u0105 one bardzo podobne, chocia\u017c r\u00f3\u017cnice w nazwach nie wyczerpuj\u0105 tej kwestii (o czym b\u0119dzie mowa poni\u017cej). W obu architekturach tabele \u0142\u0105cz\u0105ce mog\u0105 \u0142\u0105czy\u0107 <b>dowoln\u0105 liczb\u0119 encji<\/b> (niekoniecznie 2).<\/p>\n<p>Ta na pierwszy rzut oka nadmiarowo\u015b\u0107 zapewnia znaczn\u0105 elastyczno\u015b\u0107 podczas poprawek. Taka struktura staje si\u0119 tolerancyjna nie tylko na zmiany kardynalno\u015bci istniej\u0105cych powi\u0105za\u0144, ale tak\u017ce na dodawanie nowych \u2014 je\u015bli teraz pozycja paragonu zyska dodatkowe odniesienie do sprzedawcy, powstanie takiego po\u0142\u0105czenia b\u0119dzie po prostu nadbudow\u0105 nad istniej\u0105cymi tabelami bez wp\u0142ywu na jakiekolwiek istniej\u0105ce obiekty i procesy.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/6a3b942a6e5d04dcbe2ff0881ebdf1bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>2. Duplikacja danych<\/h4>\n<p>\nDrugi problem rozwi\u0105zywany przez elastyczne architektury jest mniej oczywisty i dotyczy przede wszystkim <b>miar typu SCD2<\/b> (powoli zmieniaj\u0105ce si\u0119 miary drugiego typu), cho\u0107 nie tylko ich.<\/p>\n<p>W klasycznym sk\u0142adowisku, miara zazwyczaj przedstawia tabel\u0119, kt\u00f3ra zawiera klucz zast\u0119pczy (jako PK) oraz zestaw kluczy biznesowych i atrybut\u00f3w w oddzielnych kolumnach. <\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/059dd47b2302b58c19a0144061b78cb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli miara obs\u0142uguje wersjonowanie, do standardowego zestawu p\u00f3l dodawane s\u0105 granice czasowe obowi\u0105zywania wersji, a w \u017ar\u00f3dle pojawia si\u0119 kilka wersji w sk\u0142adowisku (po jednej na ka\u017cd\u0105 zmian\u0119 atrybut\u00f3w wersji).<\/p>\n<p>Je\u015bli miara zawiera przynajmniej jeden cz\u0119sto zmieniaj\u0105cy si\u0119 atrybut wersji, liczba wersji tej miary b\u0119dzie ogromna (nawet je\u015bli pozosta\u0142e atrybuty nie s\u0105 wersjonowane lub nigdy si\u0119 nie zmieniaj\u0105), a je\u015bli takich atrybut\u00f3w jest kilka \u2014 liczba wersji mo\u017ce rosn\u0105\u0107 w post\u0119pie geometrycznym w zale\u017cno\u015bci od ich liczby. Taka miara mo\u017ce zajmowa\u0107 znaczn\u0105 ilo\u015b\u0107 miejsca na dysku, chocia\u017c wi\u0119kszo\u015b\u0107 przechowywanych w niej danych to po prostu duplikaty warto\u015bci niezmiennych atrybut\u00f3w z innych wierszy.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/f3d5a4fd83a5ef36355961302173791d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW tym kontek\u015bcie bardzo cz\u0119sto stosuje si\u0119 r\u00f3wnie\u017c <b>denormalizacj\u0119<\/b> \u2014 cz\u0119\u015b\u0107 atrybut\u00f3w jest celowo przechowywana w postaci warto\u015bci, a nie odniesienia do s\u0142ownika lub innej miary. Takie podej\u015bcie przyspiesza dost\u0119p do danych, zmniejszaj\u0105c liczb\u0119 join\u00f3w przy odwo\u0142ywaniu si\u0119 do miary.<\/p>\n<p>Zwykle prowadzi to do tego, \u017ce <b>ta sama informacja jest przechowywana jednocze\u015bnie w kilku miejscach<\/b>. Na przyk\u0142ad, informacje o regionie zamieszkania i przynale\u017cno\u015bci do kategorii klienta mog\u0105 by\u0107 jednocze\u015bnie przechowywane w miarach \u201eKlient\u201d oraz w faktach \u201eZakup\u201d, \u201eDostawa\u201d i \u201eZg\u0142oszenia do call center\u201d, a tak\u017ce w tabeli powi\u0105za\u0144 \u201eKlient \u2014 Mened\u017cer klienta\u201d.<\/p>\n<p>Og\u00f3lnie opisane powy\u017cej odnosi si\u0119 r\u00f3wnie\u017c do zwyk\u0142ych (nie wersjonowanych) miar, ale w przypadku wersjowanych mog\u0105 mie\u0107 inny zasi\u0119g: wprowadzenie nowej wersji obiektu (szczeg\u00f3lnie z dat\u0105 wsteczn\u0105) prowadzi nie tylko do aktualizacji wszystkich powi\u0105zanych tabel, ale do kaskadowego tworzenia nowych wersji powi\u0105zanych obiekt\u00f3w \u2014 kiedy Tabela 1 jest u\u017cywana do budowania Tabeli 2, a Tabela 2 \u2014 do budowania Tabeli 3 itd. Nawet je\u015bli \u017caden atrybut Tabeli 1 nie bierze udzia\u0142u w budowaniu Tabeli 3 (a bior\u0105 udzia\u0142 inne atrybuty Tabeli 2, uzyskane z innych \u017ar\u00f3de\u0142), wersjonowa aktualizacja tej konstrukcji co najmniej skutkuje dodatkowymi kosztami, a maksymalnie \u2014 zb\u0119dnymi wersjami w Tabeli 3, kt\u00f3ra tu w og\u00f3le \u201enie ma nic do rzeczy\u201d i dalej w \u0142a\u0144cuchu.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/2935f93abc46f02bdc528accda2af758.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>3. Nieliniowa z\u0142o\u017cono\u015b\u0107 rozwoju<\/h4>\n<p>\nW tym przypadku ka\u017cda nowa witryna, budowana na podstawie innej, zwi\u0119ksza liczb\u0119 miejsc, w kt\u00f3rych dane mog\u0105 \u201erozjecha\u0107 si\u0119\u201d przy wprowadzaniu zmian w ETL. Prowadzi to z kolei do wzrostu z\u0142o\u017cono\u015bci (i czasu) ka\u017cdego kolejnego rozwoju.<\/p>\n<p>Je\u015bli powy\u017csze dotyczy system\u00f3w z rzadko aktualizowanymi procesami ETL, mo\u017cna \u017cy\u0107 w tej paradygmacie \u2014 wystarczy pilnowa\u0107, aby nowe modyfikacje by\u0142y prawid\u0142owo wprowadzane do wszystkich powi\u0105zanych obiekt\u00f3w. Je\u015bli jednak modyfikacje zachodz\u0105 cz\u0119sto, prawdopodobie\u0144stwo przypadkowego 'przeoczenia' kilku powi\u0105za\u0144 znacz\u0105co wzrasta.<\/p>\n<p>Je\u015bli dodatkowo we\u017amiemy pod uwag\u0119, \u017ce 'wersjonowany' ETL jest znacznie bardziej skomplikowany ni\u017c 'niewersjonowany', unikanie b\u0142\u0119d\u00f3w podczas cz\u0119stych modyfikacji ca\u0142ego tego systemu staje si\u0119 do\u015b\u0107 trudne.<\/p>\n<h3>Przechowywanie obiekt\u00f3w i atrybut\u00f3w w Data Vault i modelu Anchor<\/h3>\n<p>\nPodej\u015bcie proponowane przez autor\u00f3w elastycznych architektur mo\u017cna sformu\u0142owa\u0107 w ten spos\u00f3b:<\/p>\n<blockquote><p>Nale\u017cy oddzieli\u0107 to, co si\u0119 zmienia, od tego, co pozostaje niezmienne. To znaczy przechowywa\u0107 klucze oddzielnie od atrybut\u00f3w.<\/p><\/blockquote>\n<p> Przy tym nie nale\u017cy myli\u0107 <b>niewersjonowego<\/b> atrybutu z <b>niezmiennym<\/b>: pierwszy nie przechowuje historii swoich zmian, ale mo\u017ce si\u0119 zmienia\u0107 (na przyk\u0142ad przy poprawie b\u0142\u0119du wprowadzania lub uzyskaniu nowych danych), drugi \u2014 nigdy si\u0119 nie zmienia.<\/p>\n<p>Opinie na temat tego, co dok\u0142adnie mo\u017cna uzna\u0107 za niezmienne w Data Vault i modelu Ankorowym, s\u0105 podzielone.<\/p>\n<p>Z punktu widzenia architektury <b>Data Vault<\/b>, niezmienne mo\u017cna uzna\u0107 za <b>ca\u0142y zbi\u00f3r kluczy<\/b> \u2014 naturalne (NIP organizacji, kod towaru w systemie \u017ar\u00f3d\u0142owym itp.) oraz surrogatowe. Przy tym pozosta\u0142e atrybuty mo\u017cna podzieli\u0107 na grupy wed\u0142ug \u017ar\u00f3d\u0142a i\/lub cz\u0119stotliwo\u015bci zmian i <b>dla ka\u017cdej grupy prowadzi\u0107 osobn\u0105 tabel\u0119<\/b> z niezale\u017cnym zestawem wersji.<\/p>\n<p>W paradygmacie <b>modelu Anchor<\/b> niezmiennym uwa\u017ca si\u0119 <b>tylko surrogatowy klucz<\/b> encj\u0119. Wszystko inne (w tym naturalne klucze) \u2014 to tylko szczeg\u00f3lny przypadek jego atrybut\u00f3w. Przy tym <b>wszystkie atrybuty domy\u015blnie s\u0105 niezale\u017cne od siebie<\/b>, dlatego dla ka\u017cdego atrybutu powinna by\u0107 stworzona <b>oddzielna tabela<\/b>.<\/p>\n<p>W <b>Data Vault<\/b> tabele, kt\u00f3re zawieraj\u0105 klucze encji, nazywane s\u0105 <b>Hubami (Hub)<\/b>. Huby zawsze zawieraj\u0105 sta\u0142y zestaw p\u00f3l:<\/p>\n<ul>\n<li>Naturalne klucze encji<\/li>\n<li>Surrogatowy klucz<\/li>\n<li>Odno\u015bnik do \u017ar\u00f3d\u0142a<\/li>\n<li>Czas dodania rekordu<\/li>\n<\/ul>\n<p>\nRekordy w Hubach <b>nigdy si\u0119 nie zmieniaj\u0105 i nie maj\u0105 wersji.<\/b>. Zewn\u0119trzne huby s\u0105 bardzo podobne do tabel typu ID-map, stosowanych w niekt\u00f3rych systemach do generowania surrogat\u00f3w, jednak w przypadku surrogat\u00f3w w Data Vault zaleca si\u0119 stosowanie nie ca\u0142kowitoliczbowego sekwencera, a hasha z zestawu kluczy biznesowych. Takie podej\u015bcie upraszcza \u0142adowanie relacji i atrybut\u00f3w z \u017ar\u00f3de\u0142 (nie trzeba \u0142\u0105czy\u0107 z hubem w celu uzyskania surrogatu, wystarczy po prostu obliczy\u0107 hash z klucza naturalnego), ale mo\u017ce powodowa\u0107 inne problemy (zwi\u0105zane na przyk\u0142ad z kolizjami, wielko\u015bci\u0105 liter i znakami niewydrukowanymi w kluczach tekstowych itp.), dlatego nie jest powszechnie akceptowane.<\/p>\n<p>Wszystkie pozosta\u0142e atrybuty encji s\u0105 przechowywane w specjalnych tabelach, zwanych <b>Satelitami (Satellit)<\/b>. Jeden hub mo\u017ce mie\u0107 kilka satelit\u00f3w, przechowuj\u0105cych r\u00f3\u017cne zestawy atrybut\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/e145f211b8cfb51894e6e1789991e1cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRozdzielanie atrybut\u00f3w pomi\u0119dzy satelity odbywa si\u0119 na zasadzie <b>wsp\u00f3lnej zmiany<\/b> \u2014 w jednym satelicie mog\u0105 by\u0107 przechowywane atrybuty niewersjonowane (na przyk\u0142ad, data urodzenia i SNILS dla fizycznej osoby), w innym \u2014 rzadko zmieniaj\u0105ce si\u0119 wersjonowane (na przyk\u0142ad, nazwisko i numer paszportu), w trzecim \u2014 cz\u0119sto zmieniaj\u0105ce si\u0119 (na przyk\u0142ad, adres dostawy, kategoria, data ostatniego zam\u00f3wienia itp.). Wersjonowanie odbywa si\u0119 na poziomie poszczeg\u00f3lnych satelit\u00f3w, a nie encji jako ca\u0142o\u015bci, dlatego rozdzielanie atrybut\u00f3w warto przeprowadza\u0107 tak, aby przeci\u0119cie wersji w jednym satelicie by\u0142o minimalne (co zmniejsza \u0142\u0105czn\u0105 liczb\u0119 przechowywanych wersji). <\/p>\n<p>Dodatkowo, w celu optymalizacji procesu \u0142adowania danych, do osobnych satelit\u00f3w cz\u0119sto przenoszone s\u0105 atrybuty pozyskiwane z r\u00f3\u017cnych \u017ar\u00f3de\u0142.<\/p>\n<p>Satelity \u0142\u0105cz\u0105 si\u0119 z hubem poprzez <b>klucz obcy<\/b> (co odpowiada kardynalno\u015bci 1-do-wielu). Oznacza to, \u017ce wiele warto\u015bci atrybut\u00f3w (na przyk\u0142ad kilka numer\u00f3w telefon\u00f3w kontaktowych dla jednego klienta) jest wspierane przez t\u0119 architektur\u0119 \u201edomy\u015blnie\u201d.<\/p>\n<p>W <b>Model zakotwiczony (Anchor Model)<\/b> tabele, kt\u00f3re przechowuj\u0105 klucze, nazywane s\u0105 <b>Kotwicami (Anchor)<\/b>. I przechowuj\u0105 one: <\/p>\n<ul>\n<li><b>Tylko surrogatowe klucze<\/b><\/li>\n<li>Odno\u015bnik do \u017ar\u00f3d\u0142a<\/li>\n<li>Czas dodania rekordu<\/li>\n<\/ul>\n<p>\nNaturalne klucze z punktu widzenia Modelu Zakotwiczonego s\u0105 uwa\u017cane za <b>zwyk\u0142e atrybuty<\/b>. Taka opcja mo\u017ce wydawa\u0107 si\u0119 bardziej skomplikowana do zrozumienia, ale daje znacznie wi\u0119ksze mo\u017cliwo\u015bci identyfikacji obiektu.<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/0bf941581fd1177eda228d4429cf69db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa przyk\u0142ad, gdy dane o tym samym bycie mog\u0105 pochodzi\u0107 z r\u00f3\u017cnych system\u00f3w, w kt\u00f3rych u\u017cywane s\u0105 r\u00f3\u017cne klucze naturalne. W Data Vault mo\u017ce to prowadzi\u0107 do do\u015b\u0107 z\u0142o\u017conych konstrukcji z kilku hub\u00f3w (po jednym na \u017ar\u00f3d\u0142o + \u0142\u0105cz\u0105ca wersja mistrzowska), w modelu Y Anchor klucz naturalny ka\u017cdego \u017ar\u00f3d\u0142a trafia do swojego atrybutu i mo\u017ce by\u0107 u\u017cywany przy za\u0142adunku niezale\u017cnie od wszystkich pozosta\u0142ych. <\/p>\n<p>Jednak ukryty jest tutaj jeden podst\u0119pny moment: je\u015bli w jednej encji \u0142\u0105czone s\u0105 atrybuty z r\u00f3\u017cnych system\u00f3w, najprawdopodobniej istniej\u0105 pewne <b>zasady \u201e\u0142\u0105czenia\u201d<\/b>, wed\u0142ug kt\u00f3rych system powinien rozumie\u0107, \u017ce rekordy z r\u00f3\u017cnych \u017ar\u00f3de\u0142 odpowiadaj\u0105 jednemu egzemplarzowi encji. <\/p>\n<p>W <b>Data Vault<\/b> te zasady najprawdopodobniej b\u0119d\u0105 okre\u015bla\u0107 tworzenie <b>\u201esurrogatnego hubu\u201d encji g\u0142\u00f3wnej<\/b> i nie b\u0119d\u0105 mia\u0142y wp\u0142ywu na Huby, kt\u00f3re przechowuj\u0105 naturalne klucze \u017ar\u00f3de\u0142 i ich pierwotne atrybuty. Je\u015bli w pewnym momencie zasady \u0142\u0105czenia si\u0119 zmieni\u0105 (lub nadejdzie aktualizacja atrybut\u00f3w, wed\u0142ug kt\u00f3rych jest to przeprowadzane), wystarczy przekszta\u0142ci\u0107 surrogatne huby.<\/p>\n<p>W <b>Model Y Anchor<\/b> taka encja najprawdopodobniej b\u0119dzie przechowywana w <b>jednym jedynym kotwicy<\/b>. Oznacza to, \u017ce wszystkie atrybuty, niezale\u017cnie od tego, z jakiego \u017ar\u00f3d\u0142a pochodz\u0105, b\u0119d\u0105 przypisane do jednego i tego samego surrogatu. Rozdzielenie fa\u0142szywie po\u0142\u0105czonych rekord\u00f3w i og\u00f3lne \u015bledzenie aktualno\u015bci \u0142\u0105czenia w takim systemie mo\u017ce okaza\u0107 si\u0119 znacznie trudniejsze, zw\u0142aszcza gdy zasady s\u0105 dostatecznie skomplikowane i cz\u0119sto si\u0119 zmieniaj\u0105, a ten sam atrybut mo\u017ce pochodzi\u0107 z r\u00f3\u017cnych \u017ar\u00f3de\u0142 (cho\u0107 jest to z pewno\u015bci\u0105 mo\u017cliwe, poniewa\u017c ka\u017cda wersja atrybutu zachowuje odno\u015bnik do swojego \u017ar\u00f3d\u0142a).<\/p>\n<p>W ka\u017cdym razie, je\u015bli w Twoim systemie przewiduje si\u0119 realizacj\u0119 funkcji <b>deduplikacji, \u0142\u0105czenia rekord\u00f3w i innych element\u00f3w MDM<\/b>, warto szczeg\u00f3lnie uwa\u017cnie zapozna\u0107 si\u0119 z aspektami przechowywania naturalnych kluczy w elastycznych metodologiach. Mo\u017cliwe, \u017ce bardziej z\u0142o\u017cona konstrukcja Data Vault nagle oka\u017ce si\u0119 bardziej bezpieczna z punktu widzenia b\u0142\u0119d\u00f3w \u0142\u0105czenia.<\/p>\n<p><b>Model Y Anchor<\/b> zak\u0142ada tak\u017ce dodatkowy typ obiektu, zwany <b>W\u0119z\u0142em (Knot)<\/b> w zasadzie jest to specjalny <b>degeneracyjny rodzaj kotwicy<\/b>, kt\u00f3ry mo\u017ce zawiera\u0107 tylko jeden atrybut. W\u0119z\u0142y maj\u0105 by\u0107 u\u017cywane do przechowywania p\u0142askich s\u0142ownik\u00f3w (np. p\u0142e\u0107, sytuacja rodzinna, kategoria obs\u0142ugi klienta itp.). W przeciwie\u0144stwie do Kotwicy, W\u0119ze\u0142 <b>nie ma tabel zwi\u0105zanych z atrybutami<\/b>, a jego jedyny atrybut (nazwa) zawsze przechowywany jest w jednej tabeli z kluczem. W\u0119z\u0142y \u0142\u0105cz\u0105 si\u0119 z Kotwicami za pomoc\u0105 tabel powi\u0105za\u0144 (Tie) w taki sam spos\u00f3b, w jaki kotwice \u0142\u0105cz\u0105 si\u0119 ze sob\u0105.<\/p>\n<p>Nie ma jednoznacznej opinii na temat u\u017cycia W\u0119z\u0142\u00f3w. Na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/azathot\/\">Niko\u0142aj Go\u0142ow<\/a><\/noindex>, kt\u00f3ry aktywnie promuje zastosowanie modelu Kotwicy w Rosji, uwa\u017ca (nie bez podstaw), \u017ce dla \u017cadnego s\u0142ownika nie mo\u017cna jednoznacznie stwierdzi\u0107, \u017ce <b>zawsze<\/b> b\u0119dzie statyczny i jednowarstwowy, dlatego dla wszystkich obiekt\u00f3w lepiej od razu u\u017cy\u0107 pe\u0142noprawnej Kotwicy.<\/p>\n<p>Jeszcze jedna istotna r\u00f3\u017cnica mi\u0119dzy Data Vault a modelem Kotwicy polega na obecno\u015bci <b>atrybut\u00f3w przy powi\u0105zaniach<\/b>:<\/p>\n<p>W <b>Data Vault<\/b> Powi\u0105zania s\u0105 takimi samymi pe\u0142noprawnymi obiektami jak Hubs i mog\u0105 mie\u0107 <b>w\u0142asne atrybuty<\/b>. W <b>Model Y Anchor<\/b> Powi\u0105zania u\u017cywane s\u0105 tylko do \u0142\u0105czenia Kotwic i <b>nie mog\u0105 mie\u0107 w\u0142asnych atrybut\u00f3w<\/b>. Ta r\u00f3\u017cnica prowadzi do znacznie r\u00f3\u017cnych podej\u015b\u0107 do modelowania <b>fakt\u00f3w<\/b>, o czym b\u0119dzie mowa dalej.<\/p>\n<h3>Przechowywanie fakt\u00f3w<\/h3>\n<p>\nDo tej pory m\u00f3wili\u015bmy g\u0142\u00f3wnie o modelowaniu wymiar\u00f3w. Sprawy z faktami s\u0105 nieco mniej jednoznaczne.<\/p>\n<p>W <b>Data Vault<\/b> typowy obiekt do przechowywania fakt\u00f3w \u2014<b> Powi\u0105zanie (Link)<\/b>, w Satellitach kt\u00f3rych gromadzone s\u0105 wska\u017aniki rzeczywiste.<\/p>\n<p>Takie podej\u015bcie wydaje si\u0119 intuicyjnie zrozumia\u0142e. Daje prosty dost\u0119p do analizowanych wska\u017anik\u00f3w i w og\u00f3le przypomina tradycyjn\u0105 tabel\u0119 fakt\u00f3w (tylko, \u017ce wska\u017aniki przechowywane s\u0105 nie w samej tabeli, a w 's\u0105siedniej'). Ale s\u0105 te\u017c ukryte pu\u0142apki: jedno z typowych rozszerze\u0144 modelu \u2014 rozszerzenie klucza faktu \u2014 wymaga <b>dodania nowego klucza obcego w Link<\/b>. A to z kolei '\u0142ama' modularno\u015b\u0107 i potencjalnie wywo\u0142uje potrzeb\u0119 modyfikacji innych obiekt\u00f3w.<\/p>\n<p>W <b>Model Y Anchor<\/b> Powi\u0105zanie nie mo\u017ce mie\u0107 w\u0142asnych atrybut\u00f3w, wi\u0119c takie podej\u015bcie si\u0119 nie sprawdzi \u2014 absolutnie wszystkie atrybuty i wska\u017aniki musz\u0105 mie\u0107 powi\u0105zanie z jednym konkretnym kotwic\u0105. Wniosek z tego prosty \u2014 <b>dla ka\u017cdego faktu tak\u017ce potrzebna jest w\u0142asna kotwica.<\/b>. To, co przyjmujemy za pewne fakty, mo\u017ce wydawa\u0107 si\u0119 naturalne \u2014 na przyk\u0142ad fakt zakupu w pi\u0119kny spos\u00f3b odnosi si\u0119 do obiektu \u201ezam\u00f3wienie\u201d lub \u201eparagon\u201d, odwiedziny na stronie \u2014 do sesji itd. Ale s\u0105 tak\u017ce fakty, dla kt\u00f3rych znalezienie naturalnego \u201eobiektu no\u015bnika\u201d nie jest takie proste \u2014 na przyk\u0142ad zapasy towar\u00f3w w magazynach na pocz\u0105tku ka\u017cdego dnia. <\/p>\n<p>W zwi\u0105zku z tym nie ma problem\u00f3w z modu\u0142owo\u015bci\u0105 podczas rozszerzania klucza faktu w modelu Ancor (wystarczy doda\u0107 nowe Powi\u0105zanie do odpowiedniego Ancor), ale projektowanie modelu do wy\u015bwietlania fakt\u00f3w jest mniej jednoznaczne, mog\u0105 pojawia\u0107 si\u0119 \u201esztuczne\u201d Ancor, kt\u00f3re nieoczywi\u015bcie odzwierciedlaj\u0105 obiektowy model biznesu.<\/p>\n<h3>Jak osi\u0105gn\u0105\u0107 elastyczno\u015b\u0107<\/h3>\n<p>\nUzyskana konstrukcja w obu przypadkach zawiera <b>znacz\u0105co wi\u0119cej tabel<\/b>, ni\u017c tradycyjne miary. Ale mo\u017ce zajmowa\u0107 <b>znacz\u0105co mniej miejsca na dysku<\/b> przy tej samej liczbie atrybut\u00f3w wersyjnych, co tradycyjne miary. Nie ma tu \u017cadnej magii \u2014 wszystko sprowadza si\u0119 do normalizacji. Rozdzielaj\u0105c atrybuty na Satelity (w Data Vault) lub oddzielne tabele (model Ancor), zmniejszamy (lub ca\u0142kowicie eliminujemy) <b>powielanie warto\u015bci niekt\u00f3rych atrybut\u00f3w przy zmianie innych<\/b>.<\/p>\n<p>Dla <b>Data Vault<\/b> zysk b\u0119dzie zale\u017ca\u0142 od rozdzia\u0142u atrybut\u00f3w na Satelity, a dla <b>Model Y Anchor<\/b> \u2014 praktycznie proporcjonalnie do \u015bredniej liczby wersji obiektu miary.<\/p>\n<p>Jednak zysk z zajmowanej przestrzeni \u2014 to wa\u017cna, ale nie g\u0142\u00f3wna zaleta oddzielnego przechowywania atrybut\u00f3w. Razem z oddzielnym przechowywaniem powi\u0105za\u0144, takie podej\u015bcie czyni magazyn <b>modularn\u0105 konstrukcj\u0105<\/b>. Oznacza to, \u017ce dodanie zar\u00f3wno oddzielnych atrybut\u00f3w, jak i zupe\u0142nie nowych dziedzin w takim modelu wygl\u0105da jak <b>nadbudowa<\/b> nad istniej\u0105cy zbi\u00f3r obiekt\u00f3w bez ich zmiany. I to w\u0142a\u015bnie sprawia, \u017ce opisane metodologie s\u0105 elastyczne.<\/p>\n<p>To tak\u017ce przypomina przej\u015bcie od produkcji jednostkowej do masowej \u2014 je\u015bli w tradycyjnym podej\u015bciu ka\u017cda tabela modelu jest unikalna i wymaga indywidualnej uwagi, to w elastycznych metodologiach \u2014 s\u0105 to ju\u017c zestawy typowych \u201ecz\u0119\u015bci\u201d. Z jednej strony, tabel jest wi\u0119cej, procesy \u0142adowania i pobierania danych powinny wygl\u0105da\u0107 na bardziej skomplikowane. Z drugiej strony \u2014 staj\u0105 si\u0119 <b>typowe<\/b>. A to oznacza, \u017ce mog\u0105 by\u0107 <b>s\u0105 zautomatyzowane i zarz\u0105dzane danymi meta<\/b>. Pytanie \u201cjak b\u0119dziemy uk\u0142ada\u0107?\u201d, na kt\u00f3re odpowied\u017a mog\u0142a zajmowa\u0107 znaczn\u0105 cz\u0119\u015b\u0107 prac projektowych zwi\u0105zanych z modyfikacjami, teraz po prostu nie istnieje (jak r\u00f3wnie\u017c pytanie o wp\u0142yw zmiany modelu na dzia\u0142aj\u0105ce procesy). <\/p>\n<p>To nie znaczy, \u017ce analitycy w takim systemie s\u0105 ca\u0142kowicie niepotrzebni \u2014 kto\u015b wci\u0105\u017c musi opracowa\u0107 zestaw obiekt\u00f3w z atrybutami i dowiedzie\u0107 si\u0119, sk\u0105d i jak to wszystko \u0142adowa\u0107. Jednak zakres prac, a tak\u017ce prawdopodobie\u0144stwo i koszt b\u0142\u0119du s\u0105 znacz\u0105co zmniejszone. Zar\u00f3wno na etapie analizy, jak i przy tworzeniu ETL, kt\u00f3re w znacznym stopniu mo\u017ce ograniczy\u0107 si\u0119 do edytowania metadanych. <\/p>\n<h3>Ciemna strona<\/h3>\n<p>\nWszystko powy\u017csze sprawia, \u017ce oba podej\u015bcia s\u0105 naprawd\u0119 elastyczne, technologiczne i nadaj\u0105ce si\u0119 do iteracyjnej modyfikacji. Oczywi\u015bcie jest te\u017c \u2018wielka \u0142y\u017cka dziegciu\u2019, o kt\u00f3rej, s\u0105dz\u0119, ju\u017c si\u0119 domy\u015blasz.<\/p>\n<p>Dekompozycja danych, le\u017c\u0105ca u podstaw modu\u0142owo\u015bci elastycznych architektur, prowadzi do zwi\u0119kszenia liczby tabel i, odpowiednio, <b>koszt\u00f3w<\/b> przy do\u0142\u0105czaniu podczas zapyta\u0144. Aby po prostu uzyska\u0107 wszystkie atrybuty miary, w klasycznym magazynie wystarczy jeden select, a elastyczna architektura wymaga ca\u0142ego szeregu do\u0142\u0105cze\u0144. Przy tym, je\u015bli dla raport\u00f3w wszystkie te do\u0142\u0105czenia mo\u017cna napisa\u0107 z wyprzedzeniem, to analitycy, przyzwyczajeni do pisania SQL r\u0119cznie, b\u0119d\u0105 cierpie\u0107 podw\u00f3jnie.<\/p>\n<p>Istnieje kilka fakt\u00f3w, kt\u00f3re u\u0142atwiaj\u0105 tak\u0105 sytuacj\u0119:<\/p>\n<p><b>Przy pracy z du\u017cymi miarami rzadko korzysta si\u0119 jednocze\u015bnie ze wszystkich jej atrybut\u00f3w.<\/b> Oznacza to, \u017ce mo\u017ce by\u0107 mniej do\u0142\u0105cze\u0144, ni\u017c wydaje si\u0119 na pierwszy rzut oka na model. W Data Vault mo\u017cna r\u00f3wnie\u017c uwzgl\u0119dni\u0107 zak\u0142adan\u0105 cz\u0119stotliwo\u015b\u0107 wsp\u00f3\u0142dzielenia przy rozdzielaniu atrybut\u00f3w po satelitach. Przy tym same Haby lub Kotwice s\u0105 potrzebne g\u0142\u00f3wnie do generowania i mapowania substytut\u00f3w na etapie \u0142adowania i rzadko u\u017cywane s\u0105 w zapytaniach (szczeg\u00f3lnie dotyczy to Kotwic).<\/p>\n<p><b>Wszystkie do\u0142\u0105czenia \u2014 po kluczu.<\/b> Ponadto bardziej \"skompresowany\" spos\u00f3b przechowywania danych zmniejsza koszty skanowania tabel tam, gdzie jest to konieczne (np. przy filtrowaniu wed\u0142ug warto\u015bci atrybutu). Mo\u017ce to prowadzi\u0107 do sytuacji, \u017ce zapytanie z znormalizowanej bazy z wieloma z\u0142\u0105czeniami b\u0119dzie nawet szybsze ni\u017c skanowanie jednego ci\u0119\u017ckiego wymiaru z du\u017c\u0105 liczb\u0105 wersji w wierszu.<\/p>\n<p>Na przyk\u0142ad, w <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Anchor-Modeling.pdf\">tego <\/a><\/noindex> tym artykule znajduje si\u0119 szczeg\u00f3\u0142owy test por\u00f3wnawczy wydajno\u015bci modelu Wo\u0142k\u00f3w z pr\u00f3bk\u0105 z jednej tabeli.<\/p>\n<p><b>Wiele zale\u017cy od silnika.<\/b> Wiele nowoczesnych platform ma wewn\u0119trzne mechanizmy optymalizacji z\u0142\u0105cze\u0144. Na przyk\u0142ad, MS SQL i Oracle potrafi\u0105 \"omini\u0119 z\u0142\u0105cza\" do tabel, je\u015bli ich dane nie s\u0105 u\u017cywane nigdzie indziej, opr\u00f3cz innych z\u0142\u0105cze\u0144 i nie wp\u0142ywaj\u0105 na ostateczny wynik (eliminacja tabeli\/z\u0142\u0105czenia), a MPP Vertica wed\u0142ug <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Big_Data_Normalization.pdf\">do\u015bwiadcze\u0144 koleg\u00f3w z Avito<\/a><\/noindex>, okaza\u0142a si\u0119 doskona\u0142ym silnikiem dla modelu Wo\u0142k\u00f3w z uwzgl\u0119dnieniem pewnej r\u0119cznej optymalizacji planu zapytania. Z drugiej strony, przechowywanie modelu Wo\u0142k\u00f3w, na przyk\u0142ad, w Click House, maj\u0105cym ograniczone wsparcie dla z\u0142\u0105cze\u0144, na chwil\u0119 obecn\u0105 nie wygl\u0105da na najlepszy pomys\u0142.<\/p>\n<p>Ponadto, dla obu architektur istniej\u0105 <b>specjalne techniki<\/b>, kt\u00f3re u\u0142atwiaj\u0105 dost\u0119p do danych (zar\u00f3wno z punktu widzenia wydajno\u015bci zapyta\u0144, jak i dla ko\u0144cowych u\u017cytkownik\u00f3w). Na przyk\u0142ad, <b>tabele Point-In-Time<\/b> w Data Vault lub <b>specjalne funkcje tabelowe<\/b> w modelu Wo\u0142k\u00f3w.<\/p>\n<h2>Podsumowuj\u0105c<\/h2>\n<p>\nG\u0142\u00f3wna istota rozwa\u017canych elastycznych architektur polega na modu\u0142owo\u015bci ich \"budowy\". <\/p>\n<p>W\u0142a\u015bnie ta cecha pozwala:<\/p>\n<ul>\n<li>Po pewnej wst\u0119pnej przygotowaniu zwi\u0105zanym z wdro\u017ceniem metadanych i pisaniem podstawowych algorytm\u00f3w ETL, <b>szybko dostarczy\u0107 klientowi pierwszy rezultat<\/b> w postaci paru raport\u00f3w, zawieraj\u0105cych dane zaledwie kilku \u017ar\u00f3de\u0142 obiekt\u00f3w. Kompleksowe przemy\u015blenie (nawet na wysokim poziomie) ca\u0142ej modelu obiektowego nie jest w tym przypadku konieczne.<\/li>\n<li>Model danych mo\u017ce zacz\u0105\u0107 dzia\u0142a\u0107 (i przynosi\u0107 korzy\u015bci) zaledwie z 2-3 obiektami, a nast\u0119pnie <b>stopniowo rosn\u0105\u0107<\/b> (w odniesieniu do modelu Wo\u0142k\u00f3w, Nikolaj <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/322510\/\">zastosowa\u0142 <\/a><\/noindex>pi\u0119kne por\u00f3wnanie do grzybni).<\/li>\n<li>Wi\u0119kszo\u015b\u0107 poprawek, w tym rozszerzenie tematyki oraz dodawanie nowych \u017ar\u00f3de\u0142 <b>nie wp\u0142ywa na istniej\u0105c\u0105 funkcjonalno\u015b\u0107 i nie stwarza ryzyka uszkodzenia ju\u017c dzia\u0142aj\u0105cych element\u00f3w.<\/b>.<\/li>\n<li>Dzi\u0119ki dekompozycji na standardowe elementy, procesy ETL w takich systemach wygl\u0105daj\u0105 jednolicie, ich pisanie poddaje si\u0119 algorytmizacji i w ko\u0144cu, <b>automatyzacji<\/b>.<\/li>\n<\/ul>\n<p>\nCen\u0105 tej elastyczno\u015bci jest <b>wydajno\u015b\u0107<\/b>. To nie znaczy, \u017ce osi\u0105gni\u0119cie akceptowalnej wydajno\u015bci w takich modelach jest niemo\u017cliwe. Cz\u0119sto mo\u017ce by\u0107 potrzebne wi\u0119cej wysi\u0142ku i uwagi na szczeg\u00f3\u0142y, aby osi\u0105gn\u0105\u0107 wymagane metryki.<\/p>\n<h2>Aplikacje<\/h2>\n<p><\/p>\n<h4>Typy jednostek <b>Data Vault<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/6bbaee505587152d7e5c11b2889bf25a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWi\u0119cej o Data Vault:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/danlinstedt.com\/\">Strona Dena Listedda<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/www.dwh-club.com\/ru\/dwh-bi-articles\/vse-o-data-vault.html\">Wszystko o Data Vault po rosyjsku<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/348188\/\">O Data Vault na Habrahabr<\/a><\/noindex><\/p>\n<h4>Typy jednostek <b>modelu Anchor<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/d518f01e6a5c241e9e73d1ea0210c557.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWi\u0119cej o Anchor Model:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/\">Strona tw\u00f3rc\u00f3w Anchor Model<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/322510\/\">Artyku\u0142 o do\u015bwiadczeniach w wdra\u017caniu Anchor Model w Avito<\/a><\/noindex><\/p>\n<p>Zestawienie z og\u00f3lnymi cechami i r\u00f3\u017cnicami omawianych podej\u015b\u0107:<\/p>\n<p><img decoding=\"async\" alt=\"Przegl\u0105d elastycznych metodologii projektowania DWH\" src=\"\/wp-content\/uploads\/2020\/08\/807717245fd874ab141031fc64e584fc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/glowbyte\/blog\/515940\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435. \u041c\u043d\u043e\u0433\u043e\u0435 \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u041e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0431\u044b\u043b\u0438 \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u201c\u0437\u0432\u0435\u0437\u0434\u0430\u201d \u0441 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 3NF, \u0432\u0438\u0442\u0440\u0438\u043d\u044b \u2014 \u0437\u0432\u0435\u0437\u0434\u0430. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0438 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92016,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0433\u0438\u0431\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f DWH | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-21T17:42:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-21T17:42:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Przegl\u0105d zwinnych metodologii projektowania DWH | ProHoster","description":"Tworzenie sk\u0142adowiska to d\u0142ugotrwa\u0142y i powa\u017cny proces.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0433\u0438\u0431\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f DWH | ProHoster","og:description":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-21T17:42:13+00:00","article:modified_time":"2020-08-21T17:42:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92015","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:16:44","updated":"2022-09-27 14:57:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=92015"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/92016"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=92015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=92015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=92015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}