{"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 projekteerimise metodoloogiate \u00fclevaade","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Andmesalvesti arendamine on aegan\u00f5udev ja t\u00f5sine \u00fclesanne. <\/p>\n<p>Palju s\u00f5ltub projekti elus sellest, kui h\u00e4sti on alguses v\u00e4lja m\u00f5eldud objekti mudel ja andmebaasi struktuur.<\/p>\n<p>\u00dcldiselt on aktsepteeritud l\u00e4henemine erinevad kombinatsioonid t\u00e4he-skeemidest ja kolmanda normaali vormist. \u00dcldiselt kehtib p\u00f5him\u00f5te: algandmed \u2014 3NF, vitriinid \u2014 t\u00e4ht. See l\u00e4henemine, mis on ajaga t\u00f5estatud ja toetatud paljude uuringutega, on esimene (m\u00f5nikord ka ainus), mis tuleb kogenud DWH spetsialisti m\u00f5tteisse, kui arutada, milline v\u00f5iks v\u00e4lja n\u00e4ha anal\u00fc\u00fcsih\u00e4\u00e4lestus.<\/p>\n<p>Teisest k\u00fcljest, \u00e4ri tervikuna ja kliendi n\u00f5udmised muutuvad kiiresti, samal ajal kui andmed kasvavad nii \"s\u00fcgavale\" kui ka \"laiusele\". Siin tuleb esile t\u00e4he p\u00f5hiline puudus \u2014 piiratud <b>paindlikkus<\/b>.<\/p>\n<p>Ja kui teie rahulikus ja hubases DWH arendaja elus \u00e4kki:<\/p>\n<ul>\n<li>ilmnes vajalik \"teha kiiresti midagi, seej\u00e4rel vaatame\";<\/li>\n<li>ilmnes kiiresti arenev projekt, kus uute allikate \u00fchendamine ja \u00e4ri mudeli \u00fcmberkujundamine toimub v\u00e4hemalt kord n\u00e4dalas;<\/li>\n<li>ilmnes klient, kes ei oska ette kujutada, milline peaks s\u00fcsteem v\u00e4lja n\u00e4gema ja milliseid funktsioone l\u00f5puks t\u00e4itma, aga on eksperimentideks valmis ja soovib j\u00e4rk-j\u00e4rgult t\u00e4psustada soovitud tulemust, liikudes j\u00e4rk-j\u00e4rgult selle suunas;<\/li>\n<li>projektijuhi r\u00f5\u00f5msate uudistega: \u201cN\u00fc\u00fcd on meil agiilne l\u00e4henemine!\u201d<\/li>\n<\/ul>\n<p>\nV\u00f5i kui teid lihtsalt huvitab, kuidas veel andmehoidlaid \u00fcles ehitada \u2014 tulge edasi!<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \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>Mida t\u00e4hendab \u00abpaindlikkus\u00bb<\/h3>\n<p>\nEsiteks lepime kokku, milliseid omadusi peab s\u00fcsteem omama, et seda saaks nimetada \u201cpaindlikuks\u201d. <\/p>\n<p>Tasub m\u00e4rkida, et kirjeldatud omadused peavad kuuluma just <b>s\u00fcsteemile<\/b>, mitte <b>arendamise protsessile. <\/b>Seega, kui soovisite lugeda Agile'ist kui arendusteemast, on parem tutvuda teiste artiklitega. N\u00e4iteks, siin samas, Habras, on palju huvitavaid materjale (nii <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/436178\/\">\u00fclevaatuslikke<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/284012\/\">praktilisi<\/a><\/noindex>, kui ka <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dataart\/blog\/245605\/\">problemaatilisi<\/a><\/noindex>).<\/p>\n<p>See ei t\u00e4henda, et arendusprotsess ja andmehoidla struktuur ei oleks omavahel seotud. \u00dcldiselt peaks Agile p\u00f5him\u00f5tete kohaselt paindliku arhitektuuriga andmehoidla loomine olema m\u00e4rgatavalt lihtsam. Siiski on praktikas sagedasemad variandid, kus Agile'i klassikalise DWH-i arendusega Kimballi v\u00f5i DataVaulti meetodites koostatakse pigem veesoola kui \u00f5nnelikke kokkusattumusi selle kahe variandi seas \u00fchisel projektil.<\/p>\n<p>Nii et millised on paindliku andmehoidla omadused? Siin saab v\u00e4lja tuua kolm punkti:<\/p>\n<ol>\n<li><b>Varajane tarnimine ja kiire t\u00e4iendamine<\/b> \u2014 see t\u00e4hendab, et ideaalis peaks esimene \u00e4rikastus (n\u00e4iteks esimesed toimivad aruanded) olema saadud nii kiiresti kui v\u00f5imalik, st veel enne, kui kogu s\u00fcsteem on t\u00e4ielikult projekteeritud ja ellu viidud. Samuti peaks iga j\u00e4rgmine t\u00e4iendamine v\u00f5tma 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 ideaaljuhul m\u00f5jutada juba t\u00f6\u00f6tavat funktsionaalsust. Just see punkt saab sageli olema suurim \u00f5udusunen\u00e4gu suurtes projektides \u2014 tarde v\u00f5i hiljem hakkavad eraldi objektid omandama nii palju seoseid, et on lihtsam t\u00e4ielikult kopeerida loogikat k\u00f5rvale, kui lisada v\u00e4li olemasolevasse tabelisse. Ja kui teid \u00fcllatab, et t\u00e4iendusanal\u00fc\u00fcsi aeg, mis on olemasolevatele objektidele m\u00f5jude m\u00e4\u00e4ramisel, v\u00f5ib v\u00f5tta rohkem aega kui teie ise t\u00e4iendus \u2014 siis te t\u00f5en\u00e4oliselt ei ole veel t\u00f6\u00f6tanud suurtes andmehaiglas pankade v\u00f5i telekommunikatsiooni sektoris.<\/li>\n<li><b>Pidev kohandumine muutuva \u00e4ri vajadustega<\/b> \u2014 \u00fcldine objekti struktuur peaks olema projekteeritud mitte lihtsalt v\u00f5imaliku laiendamise arvestamiseks, vaid arvestama, et selle j\u00e4rgmise laiendamise suund ei oleks teile isegi kujuteldav projekteerimise etapis.<\/li>\n<\/ol>\n<p>\nJa jah, nendele k\u00f5igile n\u00f5uetele vastamine \u00fches s\u00fcsteemis on v\u00f5imalik (loomulikult teatavate juhtumite ja m\u00f5ningate ettevaatlike m\u00e4rkustega).<\/p>\n<p>Allpool k\u00e4sitlen kahte populaarseimat tellimisprotsessi metoodikat \u2014 <b>Anchor model<\/b> ja <b>Data Vault<\/b>. Kaalust j\u00e4\u00e4vad sellised kaunid l\u00e4henemised nagu n\u00e4iteks EAV, 6NF (puhtal kujul) ja k\u00f5ik, mis on seotud NoSQL lahendustega \u2014 mitte sellep\u00e4rast, et need oleks halvemad, ega ka seet\u00f5ttu, et see artikkel oleks siis \u00e4hvardanud omada keskmise v\u00e4itekirja mahtu. Lihtsalt k\u00f5ik see kuulub veidi teistsuguste lahenduste klassi \u2014 kas l\u00e4henemistele, mida v\u00f5ite rakendada spetsiifilistes olukordades, s\u00f5ltumata teie projekti \u00fcldisest arhitektuurist (nagu EAV), v\u00f5i globaalselt erinevatele teabele salvestamise paradigmadele (nagu n\u00e4iteks graafandmebaasid ja muud NoSQL variandid).<\/p>\n<h3>Klassikalise l\u00e4henemise probleemid ja nende lahendused paindlikes metodologia<\/h3>\n<p>\n<i>Klassikalise l\u00e4henemise all m\u00f5istan vana head t\u00e4hte (s\u00f5ltumata spetsiifilisest rakendamisest aluseks olevates kihtides, andku Kimballi, Inmanni ja CDM austajad mulle andeks).<br \/>\n<\/i><\/p>\n<h4>1. Rangelt suhted kardinaalsus<\/h4>\n<p>\nSelle mudeli peamiseks aluseks on andmete selge jaotus <b>m\u00f5\u00f5tmed (Dimension)<\/b> ja <b>faktid (Fact)<\/b>. Ja see on, kurat v\u00f5taks, loogiline \u2014 kuna andmeanal\u00fc\u00fcs enamikul juhtudel keskendub just teatud numbriliste n\u00e4itajate (faktide) anal\u00fc\u00fcsile teatud l\u00f5ikes (m\u00f5\u00f5tmetes).<\/p>\n<p>Samas seosed objektide vahel luuakse seostena tabelite vahel v\u00e4lisv\u00f5tme kaudu. See n\u00e4eb v\u00e4lja t\u00e4iesti loogiline, kuid viib kohe esimese paindlikkuse piiranguni \u2014 <b>rangelt m\u00e4\u00e4ratletud seoste kardinaalsus.<\/b>.<\/p>\n<p>See t\u00e4hendab, et tabelite projekteerimise etapis peate t\u00e4pselt m\u00e4\u00e4ratlema, kas iga kahe omavahel seotud objekti vahel v\u00f5ivad nad olla paljude-kaupa paljude v\u00f5i ainult 1-kaupa paljude, ja \"millises suunas\". Sellest s\u00f5ltub otseselt, millises tabelis on peamine v\u00f5ti ja millises \u2014 v\u00e4lisv\u00f5ti. Selle suhte muutmine uute n\u00f5udmiste saamisel toob t\u00f5en\u00e4oliselt kaasa andmebaasi \u00fcmbert\u00f6\u00f6tluse.<\/p>\n<p>N\u00e4iteks projekteerides objekti \"kassaarve\", tuginedes m\u00fc\u00fcgiosakonna vandet\u00f5otustele, olete loonud v\u00f5imaluse <b>\u00fche soodustuse kehtimist mitme arve positsiooni suhtes<\/b> (kuid mitte vastupidi):<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/15226cb79c30364d94147383ba36a8fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJa m\u00f5ne aja p\u00e4rast tutvustasid kolleegid uut turundusstrateegiat, kus sama positsiooni jaoks v\u00f5ivad kehtida <b>mitmed kampaaniad samal ajal<\/b>. Ja n\u00fc\u00fcd peate t\u00e4iendama tabeleid, tuues seose v\u00e4lja eraldi objekti. <\/p>\n<p>(K\u00f5ik tuletatud objektid, kus toimub kampaaniate \u00fchendumine, vajavad n\u00fc\u00fcd samuti t\u00e4iendamist).<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/3c4d84a31088660257d74c4c703071e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Seosed Data Vault'is ja Anchor Model'is<\/b><\/p>\n<p>Sellise olukorra v\u00e4ltimine osutus \u00fcsna lihtsaks: ei tohi m\u00fc\u00fcgiosakonnale uskuda, selleks piisab, et <b>k\u00f5ik seosed hoiustatakse alguses eraldi tabelites<\/b> ja t\u00f6\u00f6deldakse nagu paljusid-mitmeid. <\/p>\n<p>Selline l\u00e4henemine pakuti v\u00e4lja <b>Dan Linstedt'i poolt<\/b> osana paradigmast <b>Data Vault<\/b> ja t\u00e4ielikult toetatud <b>Lars R\u00f6nnb\u00e4ck'i poolt<\/b> \u00fches <b>Ankurmudel (Anchor Model)<\/b>.<\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes saame esimese eristava tunnuse paindlikest metoodikatest:<\/p>\n<blockquote><p>Objektide vahelisi seoseid ei hoita vanemate entiteetide atribuutides, vaid need kujutavad endast eraldi objektit\u00fc\u00fcpi.<\/p><\/blockquote>\n<p>V <b>Data Vault<\/b> selliseid seostetabeleid nimetatakse <b>Link<\/b>, ja seej\u00e4rel m\u00e4\u00e4ratleme selle, takistades seel\u00e4bi kasutajal selgelt selle v\u00e4ljaid muuta. See on \u00fcks andmete peitmise mustritest <b>Ankurmudelis<\/b> \u2014 <b>Tie<\/b>. Esmap\u00e4rane, kuigi nende nimed ei ole ainus erinevus (mille \u00fcle arutame allpool). M\u00f5lemas arhitektuuris v\u00f5ivad sidetabelid siduda <b>igal ajal hulga entiteete<\/b> (mitte tingimata 2).<\/p>\n<p>See esmapilgul n\u00e4iv \u00fclem\u00e4\u00e4rasus pakub olulist paindlikkust edasiste kohanduste tegemisel. Selline struktuur muutub tolerantseks mitte ainult olemasolevate seoste kardinaalsuse muutustele, vaid ka uute lisamisele \u2014 kui t\u0161ekipositsioonile lisandub viide selle registrile, siis sellise sideme loomine on lihtsalt olemasolevate tabelite pealsetuseks ilma, et see m\u00f5jutaks olemuslikult olemasolevaid objekte ja protsesse.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \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 ilmselge ja omane eelk\u00f5ige <b>SCD2 t\u00fc\u00fcpi m\u00f5\u00f5tmistele<\/b> (aeglased muutuvad m\u00f5\u00f5tmised teise t\u00fc\u00fcbi), kuigi mitte ainult neile.<\/p>\n<p>Klassikalises andmehoidlas on m\u00f5\u00f5de tavaliselt tabel, mis sisaldab asendusv\u00f5tit (PK-na) ning ka \u00e4riv\u00f5tmeid ja atribuute eraldi veergudes. <\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/059dd47b2302b58c19a0144061b78cb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui m\u00f5\u00f5t v\u00f5imaldab versioonimist, lisatakse standardse v\u00e4ljade kogumisse versiooni kehtivuse ajapiirangud, ja \u00fches allikas ilmub mitu versiooni salvestusse (iga versiooni atribuutide muudatuse kohta \u00fcks).<\/p>\n<p>Kui m\u00f5\u00f5dul on v\u00e4hemalt \u00fcks tihti muudetav versiooni atribuut, on selle m\u00f5\u00f5du versioonide arv m\u00e4rkimisv\u00e4\u00e4rne (isegi kui \u00fclej\u00e4\u00e4nud atribuudid ei ole versioonilised v\u00f5i ei muutu kunagi), ja kui neid atribuute on mitu, v\u00f5ib versioonide arv kasvada geomeetrilises progressioonis nende arvu j\u00e4rgi. Selline m\u00f5\u00f5t v\u00f5ib v\u00f5tta m\u00e4rkimisv\u00e4\u00e4rse ketta ruumi, kuigi suur osa selles salvestatud andmetest on lihtsalt teiste ridade muutumatute atribuutide v\u00e4\u00e4rtuste dubleerimised.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/f3d5a4fd83a5ef36355961302173791d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelle puhul kasutatakse v\u00e4ga tihti ka <b>denormaliseerimist<\/b> \u2014 osa atribuute hoitakse teadlikult v\u00e4\u00e4rtusena, mitte viitena registrile v\u00f5i muule m\u00f5\u00f5dule. See l\u00e4henemine kiirendab andmetele juurdep\u00e4\u00e4su, v\u00e4hendades m\u00f5\u00f5du juurde juurdep\u00e4\u00e4sul j\u00f5udes tehtavate join'ide arvu.<\/p>\n<p>\u00dcldiselt viib see selleni, et <b>Sama teave salvestatakse korraga mitmes kohas.<\/b>N\u00e4iteks v\u00f5ib elukoha ja kliendikategooria kuuluvuse kohta k\u00e4iv teave korraga olla salvestatud m\u00f5\u00f5tmistes 'Klient' ning faktides 'Ost', 'Kohaletoimetamine' ja 'Klienditeenindusega kontakt', samuti tabelis 'Klient \u2014 Kliendihaldur'.<\/p>\n<p>\u00dcldiselt kehtib eespool toodud ka tavaliste (mitte-versiooniliste) m\u00f5\u00f5tmiste kohta, kuid versioonilistel v\u00f5ib olla teine mastaap: uue objekti versiooni ilmumine (eriti tagantj\u00e4rele) ei too kaasa lihtsalt k\u00f5igi seotud tabelite v\u00e4rskendamist, vaid uute versioonide kaskaadi v\u00e4ljan\u00e4gemise seotud objektide puhul \u2014 kui Tabel 1 kasutatakse Tabel 2 koostamisel ja Tabel 2 Tabel 3 koostamisel jne. Isegi kui \u00fchtegi Tabeli 1 atribuuti ei osaldu Tabeli 3 koostamisel (ja osalduvad teised Tabeli 2 atribuute, mis on saadud muudest allikatest), toob selle konstruktsiooni versiooniv\u00e4rskendus v\u00e4hemalt kaasa lisakulud ja maksimaalselt \u2014 t\u00e4iendavad versioonid Tabelis 3, mis siin 'ei puutu asjasse', ning sealt edasi ahelas.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \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>\nIga uus vitriin, mis luuakse teise p\u00f5hjal, suurendab kohti, kus andmed v\u00f5ivad ETL-i muudatuste tegemisel \"lahkuda\". See toob endaga kaasa iga j\u00e4rgmise t\u00e4iustuse keerukuse (ja kestuse) suurenemise.<\/p>\n<p>Kui eeltoodud kehtib s\u00fcsteemide kohta, mille ETL-protsessid harva muutuvad, siis sellises paradigma elamine on v\u00f5imalik \u2014 piisab, kui j\u00e4lgida, et uued t\u00e4iustused kantaks korrektselt k\u00f5ikidesse seotud objektidesse. Kui aga t\u00e4iustused toimuvad tihti, t\u00f5useb t\u00f5en\u00e4osus, et m\u00f5ned seosed j\u00e4etakse kogemata vahele.<\/p>\n<p>Kuna \"versiooniline\" ETL on oluliselt keerukam kui \"mitteversiooniline\", siis on keeruline v\u00e4ltida vigu, kui kogu seda s\u00fcsteemi sageli t\u00e4iustatakse.<\/p>\n<h3>Objektide ja atribuutide hoidmine Data Vaultis ja Anchor mudelis<\/h3>\n<p>\nPaigutus, mida paindlike arhitektuuride autorid pakuvad, v\u00f5iks formuleerida j\u00e4rgmiselt:<\/p>\n<blockquote><p>On vajalik eristada, mis muutub ja mis j\u00e4\u00e4b muutumatuks. Seega, hoida v\u00f5tmed eraldi atribuutidest.<\/p><\/blockquote>\n<p> Siiski ei tohiks segi ajada <b>mitteversiooniline<\/b> atribuut koos <b>muutumatuga<\/b>: esimene ei hoia oma muudatusi ajalugu, kuid v\u00f5ib muutuda (n\u00e4iteks sisestamisvea parandamise v\u00f5i uute andmete saamise korral) teine \u2014 ei muutu kunagi.<\/p>\n<p>Arvamused selle kohta, mida t\u00e4pselt v\u00f5ib Data Vaultis ja Anchor mudelis pidada muutumatuks, erinevad.<\/p>\n<p>Arhitektuuri vaatenurgast <b>Data Vault<\/b>, muutumatuks v\u00f5ib pidada <b>k\u00f5iki v\u00f5tmekomplekte<\/b> \u2014 looduslikud (organisatsiooni KMKR, toote kood allikas\u00fcsteemis jne) ja asendavad. Samal ajal saab \u00fclej\u00e4\u00e4nud atribuute jagada r\u00fchmade kaupa allika ja \/ v\u00f5i muudatuste sageduse p\u00f5hjal ja <b>iga r\u00fchma jaoks tuleb pidada eraldi tabelit<\/b> iseseisva versioonide komplekti jaoks.<\/p>\n<p>K\u00fcll aga <b>Anchor Model<\/b> peetakse muutumatuks <b>ainult asendusv\u00f5tme<\/b> \u00fcksuse. K\u00f5ik muu (sealhulgas looduslikud v\u00f5tmed) \u2014 on lihtsalt tema atribuutide erijuht. Samuti <b>k\u00f5ik atribuudid on vaikimisi \u00fcksteisest s\u00f5ltumatud<\/b>, seega peab iga atribuut olema <b>eraldi tabelid<\/b>.<\/p>\n<p>V <b>Data Vault<\/b> tabelid, mis sisaldavad \u00fcksuste v\u00f5ti, nimetatakse <b>Hubideks (Hub)<\/b>. Hubid sisaldavad alati fikseeritud v\u00e4ljade komplekti:<\/p>\n<ul>\n<li>Looduslikud v\u00f5tmed \u00fcksuse<\/li>\n<li>Asendav v\u00f5ti<\/li>\n<li>Viide allikale<\/li>\n<li>Salvestamise aeg<\/li>\n<\/ul>\n<p>\nSalvestused Hubides <b>ei muutu kunagi ja ei oma versioone<\/b>. V\u00e4limuselt sarnanevad hubid v\u00e4ga ID-kaardiga tabelitele, mida kasutatakse m\u00f5nedes s\u00fcsteemides asendustena, kuid Data Vaultis soovitatakse asendustena kasutada mitte t\u00e4isarvulist j\u00e4rjestust, vaid h\u00e4\u00e4lt ettev\u00f5tte v\u00f5tmete kogumist. See l\u00e4henemine lihtsustab suhete ja atribuutide laadimist allikatest (ei ole vaja hubiga liituda asenduse saamiseks, piisab lihtsalt ettev\u00f5tte v\u00f5tme h\u00e4\u00e4le arvutamisest), kuid v\u00f5ib p\u00f5hjustada muid probleeme (seotud n\u00e4iteks kollisioonide, suurustundlikkuse ja tr\u00fckkimata s\u00fcmbolitega stringiv\u00f5tmetes jne), mist\u00f5ttu see ei ole \u00fcldiselt aktsepteeritud.<\/p>\n<p>K\u00f5ik muud atribuudid salvestatakse spetsiaalsetes tabelites, mida nimetatakse <b>satelliitideks (Satellite)<\/b>. \u00dchel hubil v\u00f5ib olla mitu satelliiti, mis salvestavad erinevaid atribuutide kogumeid.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/e145f211b8cfb51894e6e1789991e1cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAtribuutide jaotamine satelliitide vahel toimub <b>koosmuutmise printsiibi j\u00e4rgi<\/b> \u2014 \u00fches satelliidis v\u00f5ivad olla salvestamata atribuudid (n\u00e4iteks s\u00fcnnikuup\u00e4ev ja isikukood f\u00fc\u00fcsilise isiku jaoks), teises \u2014 harva muudetavad versioonilised atribuudid (n\u00e4iteks perekonnanimi ja passi number), kolmandas \u2014 sageli muudetavad (n\u00e4iteks kohaletoimetamise aadress, kategooria, viimane tellimise kuup\u00e4ev jne). Versioonide haldamine toimub \u00fcksikute satelliitide tasandil, mitte tervikobjekti ulatuses, seet\u00f5ttu on otstarbekas jaotada atribuudid nii, et \u00fche satelliidi siseversioonide \u00fchisosa oleks minimaalne (mida v\u00e4hem muudab salvestatavate versioonide kogus). <\/p>\n<p>Samuti, andmete laadimisprotsessi optimeerimiseks, viidatakse sageli eraldi satelliitidesse atribuudid, mis saadakse erinevatest allikatest.<\/p>\n<p>Satelliidid on \u00fchendatud Hubiga <b>v\u00e4lise v\u00f5tme kaudu<\/b> (mis vastab 1-\u00fchele mitmele koodile). See t\u00e4hendab, et atribuutide mitmed v\u00e4\u00e4rtused (n\u00e4iteks mitu telefoninumbrit \u00fche kliendi kohta) toetab selline arhitektuur \u201evaikimisi\u201c.<\/p>\n<p>V <b>Ankurmudel (Anchor Model)<\/b> tabelid, mis salvestavad v\u00f5tmeid, nimetatakse <b>Ankuriteks (Anchor)<\/b>. Nad salvestavad: <\/p>\n<ul>\n<li><b>Ainult surrogaatv\u00f5tmed<\/b><\/li>\n<li>Viide allikale<\/li>\n<li>Salvestamise aeg<\/li>\n<\/ul>\n<p>\nLooduslikke v\u00f5tmeid Ankur Mudeli kontekstis peetakse <b>tavap\u00e4rasteks atribuutideks<\/b>. See variant v\u00f5ib tunduda keerulisem m\u00f5ista, kuid see annab palju rohkem ruumi objekti tuvastamiseks.<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/0bf941581fd1177eda228d4429cf69db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4iteks kui sama entiteedi kohta andmed p\u00e4rinevad erinevatest s\u00fcsteemidest, kus igas kasutatakse oma loodusteaduslikku v\u00f5tit. Data Vaultis v\u00f5ib see viia v\u00e4ga kohmakate struktuurideni, kus on mitu s\u00f5lme (iga\u00fchele \u00fcks allikas + \u00fchendav meistriversioon), Ankur mudelis aga iga allika loodusteaduslik v\u00f5ti l\u00e4heb oma atribuudisse ja seda saab laadimisel kasutada s\u00f5ltumatult teistest. <\/p>\n<p>Aga siin peitub \u00fcks salakaval asi: kui \u00fcks entiteet \u00fchendab atribuute erinevatest s\u00fcsteemidest, siis t\u00f5en\u00e4oliselt eksisteerivad m\u00f5ned <b>\u201cliimimise\u201d<\/b>reeglid, <\/p>\n<p>V <b>Data Vault<\/b> mille j\u00e4rgi peab s\u00fcsteem m\u00f5istma, et eri allikatest p\u00e4rinevad kirjed vastavad \u00fchele entiteedi eksemplarile. <b>need reeglid t\u00f5en\u00e4oliselt m\u00e4\u00e4ravad \u201casendusn\u00f5lva\u201d meistert\u00fc\u00fcbi loomise<\/b> ja ei m\u00f5juta Hube, mis salvestavad allika algsed v\u00f5tmed ja omadused. Kui mingil hetkel andmepaigutuse reeglid muutuvad (v\u00f5i saabub atribuutt\u00e4iendamine, mille alusel see toimub), piisab, kui sissejuhatused \u00fcmber vormistada.<\/p>\n<p>V <b>Ankurmudel<\/b> selline entiteet t\u00f5en\u00e4oliselt salvestatakse <b>ainult \u00fchte ankurdamisse<\/b>. See t\u00e4hendab, et k\u00f5ik omadused, s\u00f5ltumata sellest, kust nad on saadud, seotakse sama sissejuhatusega. Vale\u00fchendatud kirjeid eristada ja j\u00e4lgida andmeluuna ajakohasust sellises s\u00fcsteemis v\u00f5ib olla oluliselt keerulisem, eriti kui reeglid on piisavalt keerulised ja sageli muutuvad, ja sama omadus v\u00f5ib olla saadud erinevatest allikatest (kuigi see on t\u00e4ielikult v\u00f5imalik, kuna iga versiooni omadus s\u00e4ilitab oma allika lingi).<\/p>\n<p>Igal juhul, kui teie s\u00fcsteemis on planeeritud funktsionaalsus <b>kaksikv\u00e4ljade de-dupliceerimine, kirje \u00fchinemine ja MDM-i teiste elementide funktsioonid<\/b>, on oluline tutvuda looduslike v\u00f5tmete salvestamise aspektidega paindlikes meetodites. T\u00f5en\u00e4oliselt osutub mahukam Data Vault konstruktsioon ootamatult t\u00f5husamaks, et v\u00e4ltida liitumisvigu.<\/p>\n<p><b>Kinnitusmudel<\/b> n\u00e4eb ette ka t\u00e4iendava objekti t\u00fc\u00fcbi, mida nimetatakse <b>S\u00f5lmeks (Knot)<\/b> mille olemuselt on see eriline <b>degeneratsioonivorm ankru<\/b>, mis v\u00f5ib sisaldada vaid \u00fchte atribuuti. S\u00f5lmi on ette n\u00e4htud kasutamiseks tasapinnaliste kataloogide salvestamiseks (nt sugu, peresuhe, klienditeeninduse kategooria jne). Erinevalt ankrist, S\u00f5lm <b>ei oma seotud atribuutide tabeleid<\/b>, ja selle ainus atribuut (nimi) on alati salvestatud \u00fchte tabelisse koos v\u00f5tmega. S\u00f5lmed seotakse ankrute vahelise seose tabelite kaudu (Tie) samamoodi nagu ankruid omavahel.<\/p>\n<p>S\u00f5lmede kasutamise osas puudub \u00fchem\u00f5tteline arvamus. N\u00e4iteks, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/azathot\/\">Nikolai Golov<\/a><\/noindex>, kes edendab aktiivselt Kinnitusmudeli kasutamist Venemaal, usub (ilma alusetult), et mitte \u00fchegi katalooge ei saa t\u00e4pselt kinnitada, et see <b>alati<\/b> on staat staatiline ja \u00fche taseme, seega on k\u00f5igi objektide jaoks parem kohe kasutada t\u00e4is funktsionaalset Ankur.<\/p>\n<p>Veel \u00fcks oluline erinevus Data Vaulti ja Ankurmudeli vahel on olemasolu <b>atribuutide seostes.<\/b>:<\/p>\n<p>V <b>Data Vault<\/b> Seosed on sama t\u00e4isv\u00e4\u00e4rtuslikud objektid nagu Hublid ja v\u00f5ivad omada <b>oma atribuute.<\/b>. Dokumendihalduses <b>Ankurmudel<\/b> Seoseid kasutatakse ainult Ankurite \u00fchendamiseks ja <b>oma atribuute omada ei saa.<\/b>. See erinevus toob oluliselt erinevad l\u00e4henemisviisid mudeldamiseks <b>faktide kohta<\/b>, millest r\u00e4\u00e4gitakse hiljem.<\/p>\n<h3>Faktide s\u00e4ilitamine<\/h3>\n<p>\nVarem r\u00e4\u00e4kisime peamiselt m\u00f5\u00f5tmete modelleerimisest. Faktide suhtes on olukord natuke v\u00e4hem \u00fchem\u00f5tteline.<\/p>\n<p>V <b>Data Vault<\/b> t\u00fc\u00fcpiline faktide s\u00e4ilitamise objekt \u2014<b> Seos (Link)<\/b>, mille Satellitides kogutakse materiaalsed n\u00e4itajad.<\/p>\n<p>Selline l\u00e4henemine tundub intuitiivselt m\u00f5istetav. See pakub lihtsat juurdep\u00e4\u00e4su anal\u00fc\u00fcsitavatele n\u00e4itajatele ja sarnaneb \u00fcldiselt traditsioonilise faktide tabeliga (ainult n\u00e4itajad ei asu tabelis endas, vaid \"naaber\" tabelis). Kuid on ka varjatud ohte: \u00fcks t\u00fc\u00fcpiline mudeli t\u00e4iendus \u2014 fakti v\u00f5tme laiendamine \u2014 toob kaasa vajaduse <b>uue v\u00e4list v\u00f5tme lisamiseks Linkile.<\/b>. Ja see omakorda \u201emurendab\u201c moodulsust ja v\u00f5ib potentsiaalselt tekitada vajaduse teiste objektide kohandamiseks.<\/p>\n<p>V <b>Ankurmudel<\/b> Seos ei saa omada oma atribuute, seega selline l\u00e4henemine ei toimi \u2014 k\u00f5ik atribuudid ja n\u00e4itajad peavad olema seotud \u00fche konkreetse ankruga. J\u00e4reldus on lihtne \u2014 <b>iga fakti jaoks on samuti vajalik oma ankru<\/b>. Osa sellest, mida me oleme harjunud faktideks pidama, v\u00f5ib tunduda loomulik \u2014 n\u00e4iteks ostufakt seondub objekti \u201etellimus\u201c v\u00f5i \u201ekviitungiga\u201c, veebisaidi k\u00fclastamine \u2014 sessiooniga jne. Kuid on ka fakte, mille jaoks sellise loodusliku \u201ekandjate objektiga\u201c seondumine ei ole nii lihtne \u2014 n\u00e4iteks kaupade j\u00e4\u00e4kide arv laos p\u00e4eva alguses. <\/p>\n<p>Seega ei esine ankrumudelis faktiv\u00f5ti laiendades moodulsuse probleeme (piisab lihtsalt uue seose lisamisest vastava ankruga), kuid mudeli projekteerimine faktide esitamiseks on v\u00e4hem \u00fcheselt m\u00f5istetav, v\u00f5ivad tekkida \u201ekunstlikud\u201c ankrud, mis ei peegelda \u00e4rimudelit selgelt.<\/p>\n<h3>Kuidas saavutatakse paindlikkus<\/h3>\n<p>\nSaadud struktuur sisaldab m\u00f5lemal juhul <b>oluliselt rohkem tabeleid<\/b>, kui traditsiooniline m\u00f5\u00f5tmine. Kuid see v\u00f5ib v\u00f5tta <b>oluliselt v\u00e4hem kettaruumi<\/b> sama versioonide atribuutide kogumi juures nagu traditsiooniline m\u00f5\u00f5tmine. Loomulikult ei ole siin mingit maagilist \u2014 k\u00f5ik on normaliseerimises. Jaotades atribuute Satellitides (Data Vaultis) v\u00f5i eraldi tabelites (Anchor Model), v\u00e4hendame (v\u00f5i v\u00e4listame t\u00e4ielikult) <b>\u00fchtede ja sama atribuutide v\u00e4\u00e4rtuste dubleerimist teiste muutumisel<\/b>.<\/p>\n<p>Kuna <b>Data Vault<\/b> kasu s\u00f5ltub atribuutide jaotumisest Satellitides, ja <b>Ankurmudel<\/b> \u2014 praktiliselt otseproportsionaalne keskmise versioonide arvu osakaalu m\u00f5\u00f5tmisel.<\/p>\n<p>Siiski on ruumikasutuse kasu oluline, kuid mitte peamine eelis atribuutide eraldi salvestamisel. Koos suhete eraldi salvestamisega muudab see hoidla <b>modulaarseks struktuuriks<\/b>. See t\u00e4hendab, et eraldi atribuutide ja tervete uute valdkondade lisamine sellesse mudelisse n\u00e4eb v\u00e4lja nagu <b>lisakiht<\/b> olemasoleva objektide kogumi \u00fcle ilma neid muutmata. Ja see ongi see, mis muudab kirjeldatud metoodikad paindlikeks.<\/p>\n<p>See on samuti nagu \u00fcleminek \u00fcksikutelt toodetelt masstootmisele \u2014 kui traditsioonilises l\u00e4henemises on iga mudeli tabel ainulaadne ja vajab eraldi t\u00e4helepanu, siis agiilses metoodikas on see juba komplekt t\u00fc\u00fcpilisi \"detailide\". \u00dchest k\u00fcljest, tabelite arv suureneb, andmete laadimise ja valimise protsessid peavad n\u00e4gema keerukamad v\u00e4lja. Teisest k\u00fcljest \u2014 need muutuvad <b>t\u00fc\u00fcpiliseks<\/b>. Seega, need saavad olla <b>automaatsetes ja hallatavad metaandmete kaudu<\/b>. K\u00fcsimus \u201ckuidas me paneme?\u201d \u2014 millele vastamine v\u00f5is v\u00f5tta olulise osa projekteerimist\u00f6\u00f6st, ei ole n\u00fc\u00fcd lihtsalt aktuaalne (nagu ka k\u00fcsimus mudeli muutmise m\u00f5ju kohta toimivatele protsessidele). <\/p>\n<p>See ei t\u00e4henda, et anal\u00fc\u00fctikud sellises s\u00fcsteemis \u00fcldse ei ole vajalikud \u2014 keegi peab siiski t\u00f6\u00f6tama v\u00e4lja objektide kogumi koos atribuutidega ja aru saama, kust ja kuidas k\u00f5ike seda laadida. Kuid t\u00f6\u00f6maht ning ka vigade t\u00f5en\u00e4osus ja hind v\u00e4henevad oluliselt. Nii anal\u00fc\u00fcsietapis kui ka ETL-i arendamisel, mis suures osas v\u00f5ib olla suunatud metaandmete redigeerimisele. <\/p>\n<h3>Tumeda k\u00fclg<\/h3>\n<p>\nK\u00f5ik eespool kirjeldatud teeb m\u00f5lemad l\u00e4henemisviisid t\u00f5eliselt paindlikeks, tehnoloogilisteks ja sobivateks iteratiivseks arendamiseks. Loomulikult on olemas ka \"t\u00f5rva\u00e4mber\", millest te juba ilmselt aimate.<\/p>\n<p>Andmete dekompositsioon, mis on paindlike arhitektuuride moodulsuse alus, toob kaasa tabelite arvu suurenemise ja vastavalt sellele, <b>\u00fclekande kulud<\/b> \u00fchenduste tegemisel otsingutes. K\u00f5ik m\u00f5\u00f5tme atribuudid hankimiseks piisab klassikalises andmehoidlas \u00fchest valikust, kuid paindlik arhitektuur n\u00f5uab mitmeid \u00fchendusi. Samas, kui raportite jaoks saab k\u00f5ik need \u00fchendused ette kirjutada, siis SQL-i k\u00e4sitsi kirjutamisega harjunud anal\u00fc\u00fctikud kannatavad kahekordselt.<\/p>\n<p>On mitmeid fakte, mis h\u00f5lbustavad sellist olukorda:<\/p>\n<p><b>Suurte m\u00f5\u00f5tmete korral ei kasutata harva k\u00f5iki selle atribuute samaaegselt.<\/b> See t\u00e4hendab, et \u00fchendusi v\u00f5ib olla v\u00e4hem, kui esmapilgul mudelit vaadates n\u00e4ib. Data Vaultis saab arvesse v\u00f5tta ka eeldatavat jagamise sagedust, kui atribuudid jaotatakse satelliitide vahel. Samuti on H\u00fcbriidid v\u00f5i Ankrud vajalikud peamiselt surrogaatide genereerimiseks ja kaardistamiseks laadimisfaasis ning neid kasutatakse harva p\u00e4ringutes (eriti see kehtib Ankrute kohta).<\/p>\n<p><b>K\u00f5ik \u00fchendused \u2014 v\u00f5tme kaudu.<\/b> Lisaks v\u00e4hendab andmete \u201ckokkusurutud\u201d viis salvestamise kulusid tabelite skaneerimise puhul seal, kus see on vajalik (n\u00e4iteks atribuudiv\u00e4\u00e4rtuse j\u00e4rgi filtreerimise ajal). See v\u00f5ib viia selleni, et normaliseeritud andmebaas, kus on palju \u00fchendusi, v\u00f5ib olla isegi kiirem kui \u00fche suure m\u00f5\u00f5tme skaneerimine, millel on palju versioone reas.<\/p>\n<p>N\u00e4iteks, siin <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Anchor-Modeling.pdf\">sellest <\/a><\/noindex> artiklis on \u00fcksikasjalik v\u00f5rdlev test Ankrumudeli j\u00f5udlusest, kasutades \u00fchte tabelit.<\/p>\n<p><b>Palju s\u00f5ltub mootorist.<\/b> Paljudel kaasaegsetel platvormidel on sisemised mehhanismid join'ide optimeerimiseks. N\u00e4iteks oskavad MS SQL ja Oracle \"vahel\" v\u00e4lja j\u00e4tta join'id tabelitele, kui nende andmeid ei kasutata kusagil mujal, v\u00e4lja arvatud teistes join'ides, ja need ei m\u00f5juta l\u00f5ppvalikut (table\/join elimination), samas kui MPP Vertica on <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Big_Data_Normalization.pdf\">kolleegide kogemuste p\u00f5hjal Avitos<\/a><\/noindex>, t\u00f5estanud end suurep\u00e4rase mootorina Ankur mudeli jaoks, arvestades teatavat k\u00e4sitsi optimeerimist p\u00e4ringu plaanis. Teiselt poolt tundub Ankur mudeli hoidmine n\u00e4iteks Click House'is, mis on joinide osas piiratud toetusega, hetkel mitte k\u00f5ige parem idee.<\/p>\n<p>Lisaks on m\u00f5lema arhitektuuri jaoks olemas <b>spetsiaalsed tehnikad<\/b>, mis lihtsustavad andmete juurde p\u00e4\u00e4semist (nii p\u00e4ringute sooritusv\u00f5ime kui ka l\u00f5ppkasutajate jaoks). N\u00e4iteks <b>Point-In-Time tabelid<\/b> Data Vault'is v\u00f5i <b>spetsiaalsed tabelifunktsioonid<\/b> Ankur mudelis.<\/p>\n<h2>Kokku<\/h2>\n<p>\nK\u00e4sitletud paindlike arhitektuuride peamine olemus seisneb nende \u201ekonstruktsiooni\u201d moodulsuses. <\/p>\n<p>Just see omadus v\u00f5imaldab:<\/p>\n<ul>\n<li>P\u00e4rast teatud esialgset ettevalmistust, mis on seotud metaandmete juurutamise ja p\u00f5hisiseste ETL algoritmide kirjutamisega, <b>kiiresti esitada kliendile esimene tulemus.<\/b> paaride raportite kujul, mis sisaldavad andmeid vaid m\u00f5ne objekti allika kohta. \u00dcksikasjaliku (isegi k\u00f5rgtaseme) objekti mudeli t\u00e4ielik l\u00e4bim\u00f5tlemine pole sel eesm\u00e4rgil vajalik.<\/li>\n<li>Andmemudel v\u00f5ib alustada t\u00f6\u00f6tamist (ja tooma kasu) vaid 2-3 objektiga ning seej\u00e4rel <b>aeglaselt laieneda<\/b> (seoses humoristliku mudeliga, mida Nikolai <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/322510\/\">rakendas <\/a><\/noindex>kaunis v\u00f5rdlus seenet\u00fcvesega).<\/li>\n<li>Enamik t\u00e4iendusi, sealhulgas temaatika laiendamine ja uute allikate lisamine <b>ei m\u00f5juta olemasolevat funktsionaalsust ega t\u00e4henda ohtu olemasoleva t\u00f6\u00f6 katkestamiseks.<\/b>.<\/li>\n<li>Standardsed elemendid dekomponeerimise t\u00f5ttu muudavad ETL-protsessid sellistes s\u00fcsteemides \u00fchtseks, nende kirjutamine on algoritmisele alluv ja l\u00f5puks <b>automaatimisele<\/b>.<\/li>\n<\/ul>\n<p>\nSellise paindlikkuse hind on <b>toime<\/b>. See ei t\u00e4henda, et selliste mudelite puhul ei saa saavutada vastuv\u00f5etavat tulemuslikkust. Enamasti v\u00f5ib teil lihtsalt olla vaja rohkem pingutusi ja t\u00e4helepanu detailidele, et saavutada vajalikke m\u00f5\u00f5dikuid.<\/p>\n<h2>Rakendused<\/h2>\n<p><\/p>\n<h4>Entiteedi t\u00fc\u00fcbid <b>Data Vault<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/6bbaee505587152d7e5c11b2889bf25a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRohkem teavet Data Vaulti kohta:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/danlinstedt.com\/\">Dan Litsedti sait<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/www.dwh-club.com\/ru\/dwh-bi-articles\/vse-o-data-vault.html\">Kogu info Data Vaultist vene keeles<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/348188\/\">Data Vaultist Habr's<\/a><\/noindex><\/p>\n<h4>Entiteedi t\u00fc\u00fcbid <b>Anchor Model<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \u00fclevaade\" src=\"\/wp-content\/uploads\/2020\/08\/d518f01e6a5c241e9e73d1ea0210c557.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLisainfo Anchor Modelist:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/\">Anchor Modeli arendajate 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\u00f5tte tabel uuritud l\u00e4henemisviiside sarnasuste ja erinevuste kohta:<\/p>\n<p><img decoding=\"async\" alt=\"Paindlike DWH projekteerimise metodoloogiate \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 4.9.10 - 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. \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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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\udd47Paindlike DWH projekteerimise metoodikate \u00fclevaade | ProHoster","description":"Andmehoidla arendamine on pikk ja t\u00f5sine protsess. Projekteerimise objekti mudeli ja andmebaasi struktuuri h\u00e4sti l\u00e4bi m\u00f5eldud planeerimine m\u00f5jutab projekti eluiga oluliselt. Tuntud l\u00e4henemine on erinevad skeemide kombinatsioonid \u201et\u00e4ht\u201d ja kolmas normaalvorm. \u00dcldiselt l\u00e4htutakse p\u00f5him\u00f5ttest: algandmed \u2014 3NF, vitriinid \u2014 t\u00e4ht. See l\u00e4henemine on aja jooksul t\u00f5estatud ja toetatud","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. \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","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"},"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}]}}