{"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\/et\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","title":{"rendered":"Paindlike DWH disainimeetodite \u00fclevaade","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Andmetehoidla arendamine on pikk ja t\u00f5sine protsess. <\/p>\n<p>Paljuski s\u00f5ltub projekti edust sellest, kui h\u00e4sti on alguses l\u00e4bi m\u00f5eldud objekti mudel ja andmebaasi struktuur.<\/p>\n<p>Tavap\u00e4rane l\u00e4henemine on erinevad variatsioonid \u201ct\u00e4rni\u201d skeemi ja kolmanda normaali vormi (3NF) kombinatsioonist. \u00dcldiselt kehtib p\u00f5him\u00f5te: algandmed \u2014 3NF, vitriinid \u2014 t\u00e4rn. See l\u00e4henemine, mis on aja jooksul t\u00f5estatud ja suure hulga uuringutega toetatud, on esimene (ja m\u00f5nikord isegi ainus) m\u00f5te, mis tuleb kogenud DWH spetsialisti p\u00e4he, kui m\u00f5elda, kuidas anal\u00fc\u00fctiline andmehoidla peaks v\u00e4lja n\u00e4gema.<\/p>\n<p>Teisest k\u00fcljest on \u00e4ri ja kliendi n\u00f5udmised tuntud kiire muutuja, samas kui andmed kasvavad nii \u201cs\u00fcgavale\u201d kui ka \u201claiusele\u201d. Ja siin ilmneb t\u00e4rni peamine puudus \u2014 piiratud <b>paindlikkus<\/b>.<\/p>\n<p>Ja kui teie vaikuses ja mugavuses elus DWH arendajana \u00e4kki:<\/p>\n<ul>\n<li>tekib \u00fclesanne \u201cteha kiiresti midagi, ja siis vaatame\u201d;<\/li>\n<li>ilmub kiiresti arenev projekt, kus uute allikate lisamine ja \u00e4rimudeli \u00fcmberkujundamine toimub v\u00e4hemalt kord n\u00e4dalas;<\/li>\n<li>on tellija, kes ei sea selgelt, kuidas s\u00fcsteem peaks v\u00e4lja n\u00e4gema ja milliseid funktsioone t\u00e4itma, kuid on eksperimenteerimise ja j\u00e4rkj\u00e4rgulise tulemuse t\u00e4psustamisega n\u00f5us, samas kui l\u00e4henemine on samuti j\u00e4rkj\u00e4rguline;<\/li>\n<li>tutvustas projektijuht r\u00f5\u00f5msa uudisega: \u201cN\u00fc\u00fcd on meil agiilne mudel!\u201d.<\/li>\n<\/ul>\n<p>\nV\u00f5i kui teil on lihtsalt huvi, kuidas veel andmehoidlaid \u00fcles ehitada \u2014 olete teretulnud lugema edasi!<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" 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>Mis t\u00e4hendab \u201epaindlikkus\u201c<\/h3>\n<p>\nKuna me alustasime, siis m\u00e4\u00e4ratleme, milliseid omadusi peaks s\u00fcsteem omama, et seda saaks nimetada \u201epaindlikuks\u201c. <\/p>\n<p>Tasub mainida, et kirjeldatud omadused peaksid puudutama just <b>s\u00fcsteemi<\/b>, mitte <b>protsessi <\/b>selle arendamisel. Seega, kui soovisite lugeda Agile metodoloogiast, on parem tutvuda teiste artiklitega. N\u00e4iteks on Hubris palju huvitavaid materjale (nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/436178\/\">\u00fclevaated<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/284012\/\">praktilised<\/a><\/noindex>, kui ka <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dataart\/blog\/245605\/\">probleemid<\/a><\/noindex>).<\/p>\n<p>See ei t\u00e4henda, et arendusprotsess ja DWH struktuur ei oleks omavahel seotud. \u00dcldiselt peaks Agile'i j\u00e4rgi arendamine paindliku arhitektuuri hoidlast olema oluliselt lihtsam. Praktikas esinevad aga sagedamini juhul, kui arendatakse traditsioonilist DWH-d Kimballi v\u00f5i DataVaulti j\u00e4rgi \u2014 vedajatena, pigem kui ilmsed juhuslikud kokkulangevused paindlikkuse kahe ilmingu vahel \u00fchel projektis.<\/p>\n<p>Nii, millised v\u00f5imalused peaks paindlik hoidla omama? Siin v\u00f5ib v\u00e4lja tuua kolm punkti:<\/p>\n<ol>\n<li><b>Varajane tarnimine ja kiire t\u00e4iendamine<\/b> \u2014 see t\u00e4hendab, et ideaaljuhul peaks esimene \u00e4riline tulemus (n\u00e4iteks esimesed t\u00f6\u00f6tavad aruanded) olema saadud v\u00f5imalikult varakult, st juba enne, kui s\u00fcsteemi tervikprojekti on t\u00e4ielikult kavandatud ja rakendatud. Samuti peaks iga j\u00e4rgmine t\u00e4iendamine n\u00f5udma v\u00f5imalikult v\u00e4he aega.<\/li>\n<li><b>Iteratiivne t\u00e4iendamine<\/b> \u2014 see t\u00e4hendab, et iga j\u00e4rgmine t\u00e4iendus ei tohiks ideaalis puudutada juba t\u00f6\u00f6tavat funktsionaalsust. Just see aspekt on sageli suurim \u00f5udusunen\u00e4gu suurtes projektides \u2014 varem v\u00f5i hiljem hakkavad eraldi objektid olema nii paljude suhetega seotud, et on lihtsam kogu loogika kopeerida k\u00f5rvalt, kui lisada v\u00e4li olemasolevasse tabelisse. Ja kui teid \u00fcllatab, et muudatuste m\u00f5ju olemasolevatele objektidele anal\u00fc\u00fcsimine v\u00f5ib v\u00f5tta rohkem aega kui t\u00e4iendamine ise \u2014 siis olete t\u00f5en\u00e4oliselt veel suurte DWH-idega panganduses v\u00f5i telekommunikatsioonis t\u00f6\u00f6tanud.<\/li>\n<li><b>Pidev kohandumine muutuvaid \u00e4rin\u00f5udeid<\/b> \u2014 \u00fcldine objekti struktuur peaks olema kavandatud mitte lihtsalt v\u00f5imaliku laiendamise arvesse v\u00f5tmisega, vaid nii, et selle laiendamise suunda ei oleks isegi unistades kujuteldav projekti kavandamise etapil.<\/li>\n<\/ol>\n<p>\nJa jah, nendele k\u00f5igile n\u00f5uetele vastamine \u00fches\u00fcsteemis on v\u00f5imalik (muidugi teatud juhtudel ja teatud tingimustega).<\/p>\n<p>Allpool k\u00e4sitlen kahte populaarseimat paindliku projekteerimise metoodikat DWH-de jaoks \u2014 <b>Anchor model<\/b> ja <b>Data Vault<\/b>. Kaaludelt j\u00e4\u00e4vad v\u00e4lja sellised suurep\u00e4rased tehnikad nagu n\u00e4iteks EAV, 6NF (puhtal kujul) ja k\u00f5ik, mis on seotud NoSQL lahendustega \u2014 mitte sellep\u00e4rast, et need oleksid millegagi halvemad, ja isegi mitte sellep\u00e4rast, et sel juhul \u00e4hvardaks artikkel omada keskmise teadusliku t\u00f6\u00f6 mahtu. Lihtsalt k\u00f5ik see kuulub veidi teistsuguste klasside lahendustele \u2014 kas tehnikatele, mida saate rakendada konkreetsetes olukordades, s\u00f5ltumata teie projekti \u00fcldisest arhitektuurist (nagu EAV), v\u00f5i hoopis globaalsetele informatsiooni salvestamise paradigmadele (nagu n\u00e4iteks graafandmebaasid ja teised NoSQL valikud).<\/p>\n<h3>Klassikalise l\u00e4henemise probleemid ja nende lahendused paindlikes metodoloogiates<\/h3>\n<p>\n<i>Klassikalise l\u00e4henemise all m\u00f5istan vana head t\u00e4htrauda (ilma et arvesse v\u00f5tta aluseks olevate kihtide konkreetseid teostusi, palun andestage mulle Kimballi, Inmoni ja CDM apostlid).<br \/>\n<\/i><\/p>\n<h4>1. Tugev karistuse m\u00e4\u00e4ratlus seoste vahel<\/h4>\n<p>\nSelle mudeli aluseks on andmete selge jaotus <b>m\u00f5\u00f5tmed (Dimension)<\/b> ja <b>faktid (Fact)<\/b>. Ja see, kurat v\u00f5taks, on loogiline \u2014 anal\u00fc\u00fcs andmetesse enamikus juhtudel v\u00e4hendab end konkreetsete arvuliste n\u00e4itajate (faktide) anal\u00fc\u00fcsiks teatud l\u00f5igetes (m\u00f5\u00f5tmetes).<\/p>\n<p>Samas m\u00e4\u00e4ratakse objektide vahelised seosed tabelite vaheliste v\u00e4lisv\u00f5tmete kaudu. See tundub t\u00e4iesti loomulik, kuid toob koheselt kaasa esimese paindlikkuse piirm\u00e4\u00e4ra \u2014 <b>tugeva seoste karistuse m\u00e4\u00e4ratlemise<\/b>.<\/p>\n<p>See t\u00e4hendab, et tabelite projekteerimise etapis peate t\u00e4pselt m\u00e4\u00e4ratlema, kas iga seotud objektide paarid saavad olema mitmed-\u00fchele, v\u00f5i ainult 1-\u00fchele, ja \u201ekuhu suunas\u201d. Sellest s\u00f5ltub otse, millises tabelis on peamine v\u00f5ti ja millises \u2014 v\u00e4line. Nende suhete muutmine uute n\u00f5udmiste korral toob t\u00f5en\u00e4oliselt kaasa andmebaasi \u00fcmbertegemise.<\/p>\n<p>N\u00e4iteks, projekteerides objekti \u201ekassakviitung\u201d tuginedes m\u00fc\u00fcgiosakonna t\u00f5otustele, olite s\u00e4testanud \u00fche kampaania m\u00f5ju mitmele kviitungipositsioonile <b>(aga mitte vastupidi):<\/b> Ja m\u00f5ne aja p\u00e4rast tutvustasid kolleegid uut turundusstrateegiat, kus \u00fchele ja samale positsioonile v\u00f5ivad kehtida<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/15226cb79c30364d94147383ba36a8fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nmitmed kampaaniad samal ajal. <b>N\u00fc\u00fcd peate tabelid kohandama, tuues seose eraldi objekti.<\/b>. Ja n\u00fc\u00fcd peate te t\u00f6\u00f6tlema tabeleid, tuues seose eraldi objektina esile. <\/p>\n<p>(K\u00f5ik tuletatud objektid, milles toimub promo kontroll, vajavad n\u00fc\u00fcd samuti t\u00e4iustamist).<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/3c4d84a31088660257d74c4c703071e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Seosed Data Vaultis ja Anchor Mudelis<\/b><\/p>\n<p>Sarnase olukorra v\u00e4ltimine osutus \u00fcsna lihtsaks: ei tasu m\u00fc\u00fcgiosakonna usaldada, selleks piisab <b>k\u00f5iki seoseid algselt eraldi tabelites hoidma<\/b> ja t\u00f6\u00f6delda neid kui paljusid-kui-paljusid. <\/p>\n<p>Selline l\u00e4henemine pakuti v\u00e4lja <b>Dan Linstedti poolt<\/b> osana paradigmist <b>Data Vault<\/b> ja seda toetas t\u00e4ielikult <b>Lars R\u00f6nnb\u00e4ck<\/b> ja <b>Anchor Mudel<\/b>.<\/p>\n<p>Kokkuv\u00f5ttes saame esimest silmapaistvat tunnust paindlikest metoodikatest:<\/p>\n<blockquote><p>Seosed objektide vahel ei ole salvestatud vanemate entiteetide atribuutesse, vaid kujutavad endast eraldi t\u00fc\u00fcpi objekte.<\/p><\/blockquote>\n<p>Uues <b>Data Vault<\/b> Selliseid seostetabeleid nimetatakse <b>Link<\/b>toob kaasa selle, et \"saadetamise\" hetkel server ei ole veel k\u00e4ivitatud ja k\u00f5ik l\u00e4heb katki. <b>Anchor Mudel<\/b> \u2014 <b>Tie<\/b>. Esmapilgul sarnanevad nad v\u00e4ga, kuigi nende erinevusi ei piirdu ainult nimetusega (millest r\u00e4\u00e4gitakse allpool). M\u00f5lemas arhitektuuris saavad seostetabelid siduda <b>mille igasuguseid entiteete<\/b> (mitte tingimata 2).<\/p>\n<p>See esmapilgul liialdatud l\u00e4henemine pakub olulist paindlikkust t\u00e4iustuste tegemisel. Selline struktuur muutub toleranteerivaks mitte ainult olemasolevate seoste kardinaalsuse muutumise suhtes, vaid ka uute lisamise suhtes \u2014 kui n\u00fc\u00fcd kassapunkti k\u00fclge tuleb lisaviidatud kassapidajale, siis sellise sideme loomine on lihtsalt lisand, mis ei m\u00f5juta mingeid olemasolevaid objekte ja protsesse.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/6a3b942a6e5d04dcbe2ff0881ebdf1bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>2. Andmete dubleerimine<\/h4>\n<p>\nTeine probleem, mida paindlikud arhitektuurid lahendavad, on v\u00e4hem ilmne ja iseloomulik enamasti <b>SCD2 t\u00fc\u00fcpi m\u00f5\u00f5tmistele<\/b> (aeglaselt muutuvale m\u00f5\u00f5tmisele teist t\u00fc\u00fcpi), kuigi mitte ainult neile.<\/p>\n<p>Klassikalisel andmehoidlas m\u00f5\u00f5tmine esindab tavaliselt tabelit, mis sisaldab asenduskoodi (PK-na) ning komplekti \u00e4rikoodidest ja atribuute eraldi veergudel. <\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/059dd47b2302b58c19a0144061b78cb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui m\u00f5\u00f5tmine toetab versioonitust, siis lisatakse standardsetele valdkondadele versioonide kehtivuse ajapiirid, ja \u00fche rea kohta allikas on andmehoidlas mitu versiooni (iga\u00fche versiooniredaktide nihutamise jaoks).<\/p>\n<p>Kui m\u00f5\u00f5tmetel on v\u00e4hemalt \u00fcks sagedasti muutuva versiooniga atribuut, siis selliste m\u00f5\u00f5tmete versioonide arv on muljetavaldav (isegi kui \u00fclej\u00e4\u00e4nud atribuudid ei ole versioonilised v\u00f5i ei muutu kunagi), ja kui neid atribuute on mitu, v\u00f5ib versioonide arv geomeetriliselt kasvada. Selline m\u00f5\u00f5de v\u00f5ib h\u00f5ivata m\u00e4rkimisv\u00e4\u00e4rse osa kettaruumi, kuigi enamik seal hoitavatest andmetest on lihtsalt fikseeritud atribuutide v\u00e4\u00e4rtuste dubleerimine teistest ridadest.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/f3d5a4fd83a5ef36355961302173791d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSagedasti rakendatakse ka <b>denormaliseerimist<\/b> \u2014 osa atribuudidest hoitakse eesm\u00e4rgiga salvestada neid v\u00e4\u00e4rtustena, mitte viidena loendisse v\u00f5i muusse m\u00f5\u00f5tmesse. Selline l\u00e4henemine kiirendab juurdep\u00e4\u00e4su andmetele, v\u00e4hendades \u00fchildamiste arvu, kui p\u00f6\u00f6rduda m\u00f5\u00f5tme poole.<\/p>\n<p>Tavaliselt viib see olukorrani, et <b>samad andmed on samal ajal salvestatud mitmes kohas<\/b>. N\u00e4iteks v\u00f5ib elukoha ja kliendi kategooria kuuluvuse teave korraga eksisteerida m\u00f5\u00f5tmetes \u201cKlient\u201d ja faktides \u201cOst\u201d, \u201cKohaletoimetamine\u201d ja \u201cKlienditeenindusse p\u00f6\u00f6rdumised\u201d, samuti seotud tabelis \u201cKlient \u2014 Kliendihaldur\u201d.<\/p>\n<p>\u00dcldiselt ka kirjeldatud asjaolud kehtivad ka tavap\u00e4raste (mitte versiooniliste) m\u00f5\u00f5tmete kohta, kuid versiooniliste puhul v\u00f5ivad need omada erinevat ulatust: uue objekti versiooni ilmumine (eriti tagantj\u00e4rele) ei t\u00e4henda ainult k\u00f5igi seotud tabelite v\u00e4rskendamist, vaid ka seotud objektide uusversioonide paiskumist \u2014 kui Tabel 1 kasutatakse Tabeli 2 koostamiseks, siis Tabel 2 Tabeli 3 koostamiseks jne. Isegi kui Tabeli 1 ei osale Tabeli 3 koostamises (ja osalevad Tabeli 2 teised atribuudid, mis on saadud muudest allikatest), toob selle struktuuri versiooniv\u00e4rskendus v\u00e4hemalt kaasa t\u00e4iendavad kulud ja maksimaalselt \u2014 liigseid versioone Tabelis 3, mis ei ole siin \u00fcldse \u201casjakohane\u201d ja edasi ahelas.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/2935f93abc46f02bdc528accda2af758.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>3. Mitte-lineaarne keerukus t\u00e4iustamisel<\/h4>\n<p>\nSamaaegselt iga uus vitriin, mis koostatakse teise alusel, suurendab kohtade arvu, kus andmed v\u00f5ivad ETL muudatuste tegemisel \u201clahku minna\u201d. See omakorda toob kaasa igasuguste uute t\u00e4iustuste keerukuse (ja kestuse) kasvu.<\/p>\n<p>Kui eelnevalt kirjeldatu kehtib s\u00fcsteemide kohta, kus ETL-protsessid harva arenevad, saab sellises paradigmas elada \u2014 piisab lihtsalt j\u00e4lgimisest, et uued arendused oleksid \u00f5igesti kantud k\u00f5ikidesse seotud objektidesse. Kui aga arendused toimuvad sageli, suureneb oluliselt t\u00f5en\u00e4osus, et m\u00f5ni seos j\u00e4\u00e4b kogemata kahe silma vahele.<\/p>\n<p>Kui lisaks arvestada, et \u201eversiooniga\u201d ETL on oluliselt keerulisem kui \u201eilma versioonita\u201d, siis muutub selle k\u00f5ikse haldamine piisavalt keeruliseks, et vigu v\u00e4ltida.<\/p>\n<h3>Objektide ja atribuutide salvestamine Data Vaultis ja Anchor mudelis<\/h3>\n<p>\nAutorite pakutud l\u00e4henemist elastsete arhitektuuride valdkonnas saab s\u00f5nastada j\u00e4rgmiselt:<\/p>\n<blockquote><p>On vajalik eraldada see, mis muutub, sellest, mis j\u00e4\u00e4b muutumatuks. Teisis\u00f5nu, salvestada v\u00f5tmed eraldi atribuutidest.<\/p><\/blockquote>\n<p> Sellegipoolest ei tasu segi ajada <b>ilma versioonita<\/b> atribuutit <b>muutumatu<\/b>: esimene ei salvesta oma muutumise ajalugu, kuid v\u00f5ib muutuda (n\u00e4iteks andmete sisestamise vea parandamisel v\u00f5i uute andmete saamisel) teine \u2014 ei muutu kunagi.<\/p>\n<p>Arvamused selle kohta, mida t\u00e4pselt saab Data Vaultis ja Anchor mudelis pidada muutumatuks, erinevad.<\/p>\n<p>Arhitektuuri vaatepunktist <b>Data Vault<\/b>, v\u00f5ib muutumatuks pidada <b>kogu v\u00f5tmete kogumit<\/b> \u2014 naturaalsed (organisatsiooni registrikood, toote kood allik s\u00fcsteemis jne) ja surrogaadid. Samal ajal saab \u00fclej\u00e4\u00e4nud atribuudid jagada r\u00fchmadeks allika ja \/ v\u00f5i muutuste sageduse j\u00e4rgi ning <b>iga r\u00fchma jaoks peab olema loodud eraldi tabel<\/b> iseseisva versioonide kogumiga.<\/p>\n<p>Kuid Anchor Model paradigmas <b>peetakse muutumatuks<\/b> ainult surrogaadiv\u00f5tmeid <b>olendi. K\u00f5ik muu (sealhulgas naturaalsed v\u00f5tmed) on lihtsalt tema atribuutide erijuhud. Samuti<\/b> k\u00f5ik atribuudid on vaikimisi \u00fcksteisest s\u00f5ltumatud <b>, seega peab iga attribuudi jaoks olema loodud<\/b>eraldi tabel <b>tabelid, mis sisaldavad olendi v\u00f5tmeid, nimetatakse<\/b>.<\/p>\n<p>Uues <b>Data Vault<\/b> Hubideks (Hub) <b>. Hubid sisaldavad alati fikseeritud kogust v\u00e4lju:<\/b>Olendi naturaalsed v\u00f5tmed<\/p>\n<ul>\n<li>Surrogaadiv\u00f5ti<\/li>\n<li>Viide allikale<\/li>\n<li>Salvestamise aeg<\/li>\n<li>Kirjed Hubides<\/li>\n<\/ul>\n<p>\nkunagi ei muutu ja ei oma versioone. <b>ei muutu kunagi ja neil ei ole versioone<\/b>V\u00e4limik lahendused sarnanevad v\u00e4liselt ID-kaartide tabelitega, mida kasutatakse m\u00f5nedes s\u00fcsteemides surrogaatide genereerimiseks, kuid Data Vault soovitab surrogaatide jaoks kasutada mitte t\u00e4isarvulist j\u00e4rjestust, vaid \u00e4riv\u00f5tmete komplekti r\u00e4si. Selline l\u00e4henemine lihtsustab suhete ja atribuute allikatest laadimist (ei pea liitma hubi, et saada surrogaat, piisab vaid loendamisest, h\u00e4\u0161\u0161ides loodud v\u00f5tme), kuid v\u00f5ib p\u00f5hjustada muid probleeme (n\u00e4iteks kol\u00fc\u00fcside, suurte ja mitte tr\u00fckitavate s\u00fcmbolite t\u00f5ttu stringiv\u00f5tmetes jne), seega ei ole see \u00fcldiselt aktsepteeritud.<\/p>\n<p>K\u00f5ik muud atribuudid salvestatakse erilistes tabelites, mida nimetatakse <b>satelliitideks (Satellit)<\/b>. \u00dchel hubil v\u00f5ib olla mitu satelliiti, mis salvestavad erinevaid atribuutide komplekte.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/e145f211b8cfb51894e6e1789991e1cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAtribuutide jaotamine satelliitide vahel toimub p\u00f5him\u00f5tte j\u00e4rgi <b>koosmuutmine<\/b> \u2014 \u00fches satelliidis v\u00f5ivad olla versioonivabad atribuudid (n\u00e4iteks s\u00fcnnip\u00e4ev ja isikukood f\u00fc\u00fcsilisele isikule), teises \u2014 harva muutuvad versioonilised (n\u00e4iteks perekonnanimi ja passi number), kolmandas \u2014 sageli muutuvad (n\u00e4iteks kohaletoimetamise aadress, kategooria, viimane tellimise kuup\u00e4ev jne). Versioonilisus toimub eraldi satelliitide tasandil, mitte terviku m\u00f5istes, seega on atribuudi jaotamine m\u00f5istlik teha nii, et \u00fche satelliidi sisesed versioonide l\u00f5imingud oleksid minimaalsed (mis v\u00e4hendab kokkuhoitud versioonide arvu). <\/p>\n<p>Samuti, andmete laadimise protsessi optimeerimiseks, kantakse eraldi satelliitidesse sageli atribuudid, mis on saadud erinevatest allikatest.<\/p>\n<p>Satelliidid on seotud Hubiga l\u00e4bi <b>v\u00e4lishiirde<\/b> (mis vastab kardinaalsusele 1-kaduma). See t\u00e4hendab, et atribuutide mitmesugust v\u00e4\u00e4rtust (n\u00e4iteks mitmeid kontakttelefoninumbreid \u00fche kliendi jaoks) toetab selline arhitektuur \u201evaikimisi\u201d.<\/p>\n<p>Uues <b>Ankurmudeli (Anchor Model)<\/b> tabelid, mis salvestavad v\u00f5tmeid, nimetatakse <b>ankurditeks (Anchor)<\/b>. Ja nad salvestavad: <\/p>\n<ul>\n<li><b>Ainult surrogaatv\u00f5tmed<\/b><\/li>\n<li>Salvestamise aeg<\/li>\n<li>Kirjed Hubides<\/li>\n<\/ul>\n<p>\nLooduslikud v\u00f5tmed on Ankurmudeli seisukohalt <b>tavalised atribuudid<\/b>. Selline variant v\u00f5ib tunduda keerulisem m\u00f5ista, kuid see annab palju rohkem ruumi objekti identifitseerimiseks.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/0bf941581fd1177eda228d4429cf69db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4iteks kui sama \u00fcksuse andmed v\u00f5ivad p\u00e4rineda erinevatest s\u00fcsteemidest, milles kasutatakse erinevaid looduslikke v\u00f5tmeid. Data Vaultis v\u00f5ib see viia \u00fcsna mahukate konstruktsioonideni, kus on mitu hubi (iga allika jaoks \u00fcks + \u00fchendav peamist versioon), samas kui Ankurmudelis satub iga allika looduslik v\u00f5ti oma attribuuti ja seda saab laadimise ajal kasutada s\u00f5ltumatult teistest. <\/p>\n<p>Kuid siin peitub \u00fcks salakaval moment: kui \u00fches \u00fcksuses koondatakse atribuute erinevatest s\u00fcsteemidest, siis t\u00f5en\u00e4oliselt eksisteerivad m\u00f5ned <b>koondamisreeglid<\/b>, mille j\u00e4rgi s\u00fcsteem peab m\u00f5istma, et erinevatest allikatest saadud rekordid vastavad \u00fchele ja samale \u00fcksuse eksemplarile. <\/p>\n<p>Uues <b>Data Vault<\/b> Need reeglid m\u00e4\u00e4ravad t\u00f5en\u00e4oliselt <b>\u201easendushubi\u201d peamise \u00fcksuse loomise<\/b> ja ei m\u00f5juta hube, mis salvestavad allikate looduslikke v\u00f5tmeid ja nende algseid atribuute. Kui mingil hetkel koondamisreeglid muutuvad (v\u00f5i tuleb uuendus atribuute, mille alusel seda t\u00e4iendatakse), piisab asendushubide \u00fcmberkujundamisest.<\/p>\n<p>Uues <b>Ankurmudel<\/b> selline \u00fcksus t\u00f5en\u00e4oliselt hoitakse <b>\u00fches ainsas ankurduspunktis.<\/b>See t\u00e4hendab, et k\u00f5ik atribuudid, s\u00f5ltumata sellest, millisest allikast need on saadud, seondatakse samale asendajale. Vigu kumulatiivselt eristada ja j\u00e4lgida koondamise t\u00e4psust sellises s\u00fcsteemis v\u00f5ib osutuda oluliselt keerulisemaks, eriti kui reeglid on piisavalt keerulised ja muutuvad tihti, ning sama atribuut v\u00f5ib p\u00e4rineda erinevatest allikatest (kuigi see on t\u00e4pselt v\u00f5imalik, kuna iga atribuutversioon salvestab viite oma allikale).<\/p>\n<p>Igal juhul, kui teie s\u00fcsteemis on kavandatud funktsionaalsete elementide rakendamine <b>duplikaatide eemaldamine, rekordite liitmine ja muud MDM elemendid<\/b>, on eriti oluline tutvuda looduslike v\u00f5tmete ladustamise aspektidega paindlikes meetodites. T\u00f5en\u00e4oliselt osutub Data Vaulti mahukam konstruktsioon j\u00e4rsku turvalisemaks seoses sulandumise vigadega.<\/p>\n<p><b>Ankurmudel<\/b> n\u00e4eb samuti ette t\u00e4iendava objekti t\u00fc\u00fcbi, mida nimetatakse <b>S\u00f5lme (Knot)<\/b> tegelikult on see eriline <b>degenereeritud ankur<\/b>, mis v\u00f5ib sisaldada vaid \u00fchte atribuuti. S\u00fcsteeme on ette n\u00e4htud kasutamiseks lamejuhtide hoidmiseks (nt sugu, perekonnaseis, klienditeeninduse kategooria jne). Erinevalt Ankrust, S\u00fcsteem <b>ei oma seotud atribuutide tabeleid<\/b>, ja selle ainus atribuut (nimi) salvestatakse alati \u00fchte tabelisse koos v\u00f5tmega. S\u00fcsteemid seondub Ankrute tabelitega (Tie) samuti nagu ankrud omavahel.<\/p>\n<p>\u00dcksmeelt S\u00fcsteemide kasutamise osas pole. N\u00e4iteks, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/azathot\/\">Nikolai Golov<\/a><\/noindex>, kes aktiivselt edendab Ankurmudeli rakendamist Venemaal, usub (mitte p\u00f5hjendatult), et \u00fchele juhtimiss\u00fcsteemile ei saa kindlalt \u00f6elda, et see <b>alati<\/b> oleks staatiline ja \u00fchetasandiline, seega on k\u00f5igi objektide jaoks parem kohe kasutada t\u00e4isv\u00e4\u00e4rtuslikku Ankrut.<\/p>\n<p>Veel \u00fcks oluline erinevus Data Vaulti ja Ankurmudeli vahel on seoste <b>atribuutide olemasolu<\/b>:<\/p>\n<p>Uues <b>Data Vault<\/b> Seosed on sama t\u00e4isv\u00e4\u00e4rtuslikud objekid nagu Hublid ja v\u00f5ivad omada <b>oma atribuute<\/b>. Failis <b>Ankurmudel<\/b> Seosed kasutatakse ainult Ankrute \u00fchendamiseks ja <b>oma atribuute omada ei saa<\/b>. See erinevus toob kaasa oluliselt erinevad l\u00e4henemised modelleerimisele <b>faktide<\/b>, millest r\u00e4\u00e4gitakse edasi.<\/p>\n<h3>Faktide salvestamine<\/h3>\n<p>\nEnne seda r\u00e4\u00e4kisime peamiselt m\u00f5\u00f5tmete modelleerimisest. Faktidega on asi veidi v\u00e4hem \u00fcheselt m\u00f5istetav.<\/p>\n<p>Uues <b>Data Vault<\/b> t\u00fc\u00fcpiline faktide hoidmise objekt \u2014<b> Seos (Link)<\/b>, mille Sattelitesse kogunevad materiaalsed n\u00e4itajad.<\/p>\n<p>See l\u00e4henemine tundub intuitiivselt arusaadav. See annab lihtsa ligip\u00e4\u00e4su anal\u00fc\u00fcsitavatele n\u00e4itajatele ja sarnaneb \u00fcldiselt traditsioonilise faktitabeliga (ainult n\u00e4itajad ei ole salvestatud otse tabelisse, vaid \u201enaabertabelisse\u201c). Kuid siin on ka peidetud probleemid: \u00fcks t\u00fc\u00fcpiline modelleerimise t\u00e4iendamine \u2014 faktiv\u00f5tme laiendamine \u2014 tekitab vajaduse <b>uue v\u00e4list v\u00f5tme lisamiseks Linki<\/b>. See rikub omakorda moodulsust ja v\u00f5ib potentsiaalselt p\u00f5hjustada vajaduse teiste objektide t\u00e4ienduste j\u00e4rele.<\/p>\n<p>Uues <b>Ankurmudel<\/b> Seos ei saa omada oma atribuute, seega ei sobi selline l\u00e4henemine \u2014 absoluutselt k\u00f5ik atribuudid ja n\u00e4itajad peavad olema seotud \u00fche konkreetse ankruga. Kokkuv\u00f5te on lihtne \u2014 <b>iga fakti jaoks on samuti vajalik oma ankur<\/b>. Osade, mis me harjutasime pidama faktideks, v\u00f5ib see tunduda loomulik \u2014 n\u00e4iteks ostu fakt koondub objektile \"tellimus\" v\u00f5i \"kviitung\", veebisaidi k\u00fclastus \u2014 sessioonile jne. Kuid on ka fakte, mille jaoks sellise loomuliku \"objekt-kandja\" leidmine ei ole nii lihtne \u2014 n\u00e4iteks p\u00e4evade alguses laos olevate kaupade varude j\u00e4\u00e4gid. <\/p>\n<p>Seega ei teki faktiteema v\u00f5tme laiendamisel j\u00e4reldusmudelis probleeme, kuna piisab lihtsalt uue \u00fchenduse lisamisest vastavale j\u00e4reldusele, kuid mudeli kavandamine faktide kuvamiseks on v\u00e4hem \u00fcheselt m\u00f5istetav, v\u00f5ivad tekkida \"kunstlikud\" j\u00e4reldused, mis ei peegelda \u00e4rimudeli objekti selgelt.<\/p>\n<h3>Kuidas saavutatakse paindlikkus<\/h3>\n<p>\nSaadud konstruktsioon m\u00f5lemas juhul sisaldab <b>oluliselt rohkem tabeleid<\/b>, kui traditsiooniline m\u00f5\u00f5tmine. Aga v\u00f5ib v\u00f5tta <b>oluliselt v\u00e4hem kettaruumi<\/b> sama versiooniate atribuutide kogumiga, mis on traditsiooniline m\u00f5\u00f5tmine. Siin pole mingit maagilist \u2014 k\u00f5ik on normaalsuse k\u00fcsimus. Jagades atribuudid satelliitidesse (Data Vaultis) v\u00f5i eraldi tabelitesse (Anchor Model), v\u00e4hendame (v\u00f5i v\u00e4listame t\u00e4ielikult) <b>\u00fchtede atribuutide v\u00e4\u00e4rtuste dubleerimist teiste muutumisel.<\/b>.<\/p>\n<p>Tooge <b>Data Vault<\/b> Kasum s\u00f5ltub atribuutide jaotamisest satelliitidesse, ja <b>Ankurmudel<\/b> \u2014 on praktiliselt otseselt proportsionaalne m\u00f5\u00f5temudeli objekti keskmise versioonide arvu j\u00e4rgi.<\/p>\n<p>Kuid ruumi kokkuhoid on oluline, kuid mitte peamine eelis atribuutide eraldi hoidmisel. Koos eraldi linkide hoidmisega muudab see ladustamise <b>moodulaarseks konstruktsiooniks<\/b>. See t\u00e4hendab, et nii eraldi atribuutide kui ka tervikute uusate valdkondade lisamine sellesse mudelisse tundub nagu <b>t\u00e4iendamine<\/b> olemasolevatele objektide kogumile ilma nende muutmiseta. Ja just see muudab kirjeldatud meetodid paindlikuks.<\/p>\n<p>See meenutab ka \u00fcleminekut \u00fcksiktootmiselt masstootmisele \u2014 kui traditsioonilises l\u00e4henemises on iga mudelitabel ainulaadne ja vajab eraldi t\u00e4helepanu, siis paindlikes meetodites on see juba standardsete \"detailide\" kogum. \u00dchelt poolt on tabeleid rohkem, andmete laadimise ja valimise protsessid n\u00e4ivad keerulisemad. Teiselt poolt \u2014 need muutuvad <b>standardseteks<\/b>. Seega v\u00f5ivad need olla <b>automaatne ja hallata metaandmeid<\/b>. K\u00fcsimus \u201ekuidas me paigutame?\u201c, millele vastamine v\u00f5iks v\u00f5tta m\u00e4rkimisv\u00e4\u00e4rse osa muudatuste projekteerimise t\u00f6\u00f6st, ei ole enam oluline (nagu ka k\u00fcsimus, kuidas mudeli muutmine m\u00f5jutab k\u00e4imasolevaid protsesse). <\/p>\n<p>See ei t\u00e4henda, et anal\u00fc\u00fctikud sellises s\u00fcsteemis t\u00e4ielikult tarvis ei ole \u2014 keegi peab ikkagi t\u00f6\u00f6tama v\u00e4lja objektide kogumi atribuutidega ja selgitama v\u00e4lja, kust ja kuidas k\u00f5ike seda laadida. Kuid t\u00f6\u00f6 maht, samuti t\u00f5en\u00e4osus ja viga hind on oluliselt v\u00e4henenud. Nii anal\u00fc\u00fcsi etapis kui ka ETLi arendamisel, mis suuresti v\u00f5ib t\u00e4hendada metaandmete redigeerimist. <\/p>\n<h3>Tume pool<\/h3>\n<p>\nK\u00f5ik eeltoodud muudab m\u00f5lemad l\u00e4henemised t\u00f5eliselt paindlikeks, tehnoloogilisteks ja sobivateks iteratiivseks arendamiseks. Loomulikult on olemas ka \u201et\u00f5rvat\u00fckk\u201c, millest arvan, et oled juba teadlik.<\/p>\n<p>Andmete dekompositsioon, mis on paindlike arhitektuuride moodularhitektuuride aluseks, viib tabelite arvu suurenemiseni ja seega <b>mugavuskulud<\/b> JOIN'e puhul p\u00e4ringute tegemisel. Selleks, et lihtsalt saada k\u00f5ik m\u00f5\u00f5tmete atribuudid, piisab klassikalisest andmehoidlast \u00fchest SELECT-ist, aga paindlik arhitektuur n\u00f5uab terve reas JOIN'e. Ja kui k\u00f5iki neid JOIN'e saab aruannete jaoks ette kirjutada, siis anal\u00fc\u00fctikud, kes on harjunud SQL-i k\u00e4sitsi kirjutama, peavad kaks korda rohkem vaeva n\u00e4gema.<\/p>\n<p>On mitmeid fakte, mis seda olukorda lihtsustavad:<\/p>\n<p><b>Kui t\u00f6\u00f6tada suurte m\u00f5\u00f5tmete kallal, ei kasutata peaaegu kunagi korraga k\u00f5iki selle atribuudid.<\/b> See t\u00e4hendab, et JOIN'e v\u00f5ib olla v\u00e4hem, kui esmapilgul mudelit vaadates paistab. Data Vault'is saab samuti arvesse v\u00f5tta eeldatavat koost\u00f6\u00f6sagedust, jaotades atribuudid satelliitide vahel. Kuid ise H\u00fcbriidid v\u00f5i Ankurid on vajalikud peamiselt substraatide genereerimiseks ja kaardistamiseks laadimise etapis ning neid harva kasutatakse p\u00e4ringutes (see puudutab eriti Ankureid).<\/p>\n<p><b>K\u00f5ik JOIN'id \u2014 v\u00f5tme j\u00e4rgi.<\/b> Lisaks, andmete 'kompaktselt' salvestamise viis v\u00e4hendab tabelite skanneerimise kulusid seal, kus see on vajalik (n\u00e4iteks atribuutide j\u00e4rgi filtreerimisel). See v\u00f5ib viia selleni, et normaaliseeritud andmebaasi alusel, millel on hulgi liiteid, on andmete hankimine isegi kiirem kui \u00fche raskete m\u00f5\u00f5tmega, millel on palju versioone iga rea kohta.<\/p>\n<p>N\u00e4iteks, siin <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Anchor-Modeling.pdf\">selle <\/a><\/noindex> artikkel sisaldab \u00fcksikasjalikku v\u00f5rdlevat testimist Ankurmudeli j\u00f5udluse kohta, mis on seotud \u00fche tabeliga.<\/p>\n<p><b>Palju s\u00f5ltub mootorist.<\/b> Paljudel kaasaegsetel platvormidel on sisemised mehanismid liidete optimeerimiseks. N\u00e4iteks oskab MS SQL ja Oracle 'j\u00e4ta vahele' liiteid tabelitesse, kui nende andmeid ei kasutata kuskil mujal, v\u00e4lja arvatud teised liidendid, ja need ei m\u00f5juta viimast valikut (tabeli\/liidete eliminatsioon), samas kui MPP Vertica on <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Big_Data_Normalization.pdf\">kolleegide kogemuse p\u00f5hjal Avitost<\/a><\/noindex>, n\u00e4idanud end suurep\u00e4rasena Ankurmudeli jaoks, arvestades teatavat k\u00e4sitsi optimeerimist p\u00e4ringu plaanis. Teisest k\u00fcljest, Ankurmudeli hoidmine n\u00e4iteks Click House'is, millel on piiratud liidete tugi, tundub praegu mitte v\u00e4ga hea idee.<\/p>\n<p>Lisaks sellele on m\u00f5lema arhitektuuri jaoks olemas <b>erilised tehnikad<\/b>, mis h\u00f5lbustavad andmete juurde p\u00e4\u00e4semist (nii p\u00e4ringute tulemuslikkuse kui ka l\u00f5ppkasutajate jaoks). N\u00e4iteks, <b>Point-In-Time tabelid<\/b> Data Vaultis v\u00f5i <b>erilised tabelifunktsioonid<\/b> Ankurmudelis.<\/p>\n<h2>Kokkuv\u00f5ttes<\/h2>\n<p>\nK\u00e4sitletud paindlike arhitektuuride peamine olemus seisneb nende 'konstruktsiooni' moodulsuses. <\/p>\n<p>Just see omadus v\u00f5imaldab:<\/p>\n<ul>\n<li>P\u00e4rast teatavat esialgset ettevalmistust, mis on seotud metaandmete rakendamise ja p\u00f5hiehkne ETL algoritmide kirjutamisega, <b>anda kiiresti kliendile esialgne tulemus<\/b> paarist aruandest, mis sisaldavad andmeid vaid m\u00f5ne l\u00e4hteobjekti kohta. Selleks ei ole vajalik t\u00e4ielikult kavandada (isegi k\u00f5rgemal tasemel) kogu objekti mudelit.<\/li>\n<li>Andmemudel v\u00f5ib alustada t\u00f6\u00f6d (ja tuua kasu) vaid kahe-kolme objektiga, seej\u00e4rel <b>kasvama j\u00e4rk-j\u00e4rgult<\/b> (seoses Ankurmudeliga, Nikolai <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/322510\/\">kasutas <\/a><\/noindex>ilusat v\u00f5rdlust seeneteedega).<\/li>\n<li>Enamik t\u00e4iendusi, sealhulgas teemaala laienemine ja uute allikate lisamine <b>ei m\u00f5juta olemasolevat funktsionaalsust ja ei tekita ohtu midagi, mis juba t\u00f6\u00f6tab, katkestada.<\/b>.<\/li>\n<li>T\u00e4nu standardelementide dekompositsioonile n\u00e4evad ETL-protsessid sellistes s\u00fcsteemides v\u00e4lja \u00fchtsed, nende kirjutamine on algoritmitav ja l\u00f5puks <b>automaatika<\/b>.<\/li>\n<\/ul>\n<p>\nSelle paindlikkuse hind on <b>t\u00f5husus<\/b>. See ei t\u00e4henda, et sellistes mudelites vastuv\u00f5etava efektiivsuse saavutamine oleks v\u00f5imatu. Enamasti v\u00f5ib teil lihtsalt olla vaja rohkem pingutust ja t\u00e4helepanu detailidele, et saavutada soovitud m\u00f5\u00f5dikud.<\/p>\n<h2>Rakendused<\/h2>\n<p><\/p>\n<h4>Entiteetide t\u00fc\u00fcbid <b>Data Vault<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/6bbaee505587152d7e5c11b2889bf25a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLoe l\u00e4hemalt Data Vaulti kohta:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/danlinstedt.com\/\">Dan Listeri sait<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/www.dwh-club.com\/ru\/dwh-bi-articles\/vse-o-data-vault.html\">K\u00f5ik Data Vaultist eesti keeles<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/348188\/\">Data Vaultist Habras<\/a><\/noindex><\/p>\n<h4>Entiteetide t\u00fc\u00fcbid <b>peetakse muutumatuks<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/d518f01e6a5c241e9e73d1ea0210c557.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLoe l\u00e4hemalt Anchor Modeli kohta:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/\">Anchor Modeli looja sait<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/322510\/\">Artikkel Anchor Modeli rakendamise kogemusest Avitos<\/a><\/noindex><\/p>\n<p>Kokkuv\u00f5tete tabel arutatavate l\u00e4henemisviiside \u00fchiste omaduste ja erinevuste kohta:<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH disainimeetodite \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/807717245fd874ab141031fc64e584fc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47 Paindlike DWH projekteerimise metodoloogiate \u00fclevaade | ProHoster","description":"Andmetehoidla arendamine on pikk ja t\u00f5sine protsess.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/92015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=92015"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/92015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/92016"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=92015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=92015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=92015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}