{"id":91635,"date":"2020-08-15T19:42:23","date_gmt":"2020-08-15T17:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem"},"modified":"2020-08-15T19:42:23","modified_gmt":"2020-08-15T17:42:23","slug":"na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pozdravljen! Moje ime je Nikolaj Golov. Pred tem sem delal pri Avitu in \u0161est let vodil Data Platform, kar pomeni, da sem se ukvarjal z vsemi bazami: analiti\u010dnimi (Vertica, ClickHouse), tokovnimi in OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). V tem \u010dasu sem spoznal veliko \u0161tevilo baz podatkov - najrazli\u010dnej\u0161ih in nenavadnih, s posebnimi primeri njihove uporabe.<\/p>\n<p>Zdaj delam v ManyChat. V bistvu je to za\u010detek podjetja - nov, ambiciozen in hitro rasto\u010d. In ko sem prvi\u010d vstopil v podjetje, se je pojavil klasi\u010den vpra\u0161aj: \"Kaj naj zdaj vzame mlado startup podjetje iz trga DBMS in baz podatkov?\". <\/p>\n<p>V tem \u010dlanku, temelje\u010dem na mojem predavanju na <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">spletni festival RIT++2020<\/a><\/noindex>, bom odgovoril na to vpra\u0161anje. Video razli\u010dica predavanja je na voljo na <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/6a5df9b75ad435ebe88adf920ab9ea8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Dobro znane baze podatkov leta 2020<\/h2>\n<p>\nLeto je 2020, pogledal sem okoli in opazil tri tipe baz podatkov. <\/p>\n<p>Prvi tip - <b>klasi\u010dne OLTP baze<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. Napisane so \u017ee davno, a so \u0161e vedno aktualne, ker so dobro znane skupnosti razvijalcev.<\/p>\n<p>Drugi tip - <b>baze iz \"ni\u010delnih\"<\/b>. Posku\u0161ali so pobegniti od klasi\u010dnih predlog skozi opustitev SQL, tradicionalnih struktur in ACID, s pomo\u010djo dodanega vgrajenega \u0161ardiranja in drugih privla\u010dnih funkcij. Na primer, to so Cassandra, MongoDB, Redis ali Tarantool. Vse te re\u0161itve so \u017eelele ponuditi trgu nekaj povsem novega in so na\u0161le svojo ni\u0161o, ker so se v dolo\u010denih nalogah izkazale za zelo prakti\u010dne. Te baze bom ozna\u010dil z obse\u017enim izrazom NOSQL.<\/p>\n<p>\"Ni\u010delna\" doba se je kon\u010dala, na NOSQL baze smo se navadili in svet, po mojem mnenju, je naredil naslednji korak - k <b>upravljanim bazam<\/b>. Te baze imajo jedro, kot klasi\u010dne OLTP baze ali nove NoSQL. A nimajo potrebe po DBA in DevOps ter delujejo na upravljani opremi v oblakih. Za razvijalca je to \"preprosta baza\", ki nekje deluje, kako je name\u0161\u010dena na stre\u017eniku, kdo je nastavil stre\u017enik in kdo ga posodablja, nikogar ne zanima.<\/p>\n<p>Primeri takih baz:<\/p>\n<ul>\n<li>AWS RDS - upravljana plast nad PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB - AWS-ov analog dokumentne baze, podoben Redis in MongoDB.<\/li>\n<li>Amazon Redshift - upravljana analiti\u010dna baza.<\/li>\n<\/ul>\n<p>\nOsnova so stare baze, a so postavljene v upravljano okolje, brez potrebe po delu z opremo. <\/p>\n<p><i>Opomba. Primeri so vzeti za okolje AWS, vendar obstajajo tudi njihovi analogi v Microsoft Azure, Google Cloud ali Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKaj pa je novega? Leta 2020 ni ni\u010d novega.<\/p>\n<h2>Koncept Serverless<\/h2>\n<p>\nResni\u010dno novost na trgu v letu 2020 so re\u0161itve brez stre\u017enika.<\/p>\n<p>Poskusil bom razlo\u017eiti, kaj to pomeni, na primeru obi\u010dajne storitve ali back-end aplikacije.<br \/>\nZa postavitev obi\u010dajne back-end aplikacije kupimo ali najamemo stre\u017enik, prenesemo kodo nanj, objavimo javno endpoints in redno pla\u010dujemo za najem, elektriko in storitve podatkovnega centra. To je standardni postopek.<\/p>\n<p>Ali to lahko storimo druga\u010de? Z re\u0161itvami brez stre\u017enika lahko.<\/p>\n<p>Kje je trick te metode: ni stre\u017enika, niti najema virtualnega instance v oblaku. Za postavitev storitve prenesemo kodo (funkcije) v repozitorij in objavimo javno endpoint. Nato preprosto pla\u010damo za vsak klic te funkcije, popolnoma ignoriramo strojno opremo, kjer se izvaja.<\/p>\n<p>Poskusil bom ilustrirati ta pristop s slikami.<br \/>\n<img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Klasi\u010dno name\u0161\u010danje<\/b>. Imamo storitev z dolo\u010deno obremenitvijo. Postavimo dva instance: fizi\u010dne stre\u017enike ali instance v AWS. Na te instance se usmerjajo zunanje zahteve, ki jih tam obdelajo. <\/p>\n<p>Kot je razvidno na sliki, so stre\u017eniki izkori\u0161\u010deni neenakomerno. Eden je izkori\u0161\u010den 100%, tam sta dva zahtevka, drugi pa le 50% \u2014 delno miruje. \u010ce pride ne tri zahteve, ampak 30, celoten sistem ne bo zdr\u017eal obremenitve in se bo za\u010del upo\u010dasnjevati.<\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Brezstre\u017eni deploy<\/b>. V brezstre\u017enem okolju tak\u0161na storitev nima instance in stre\u017enikov. Obstaja dolo\u010den bazen ogretih virov - majhnih pripravljenih Docker kontejnerjev z razporejeno funkcijsko kodo. Sistem prejemanja zunanjih zahtev in za vsak od njih brezstre\u017eni okvir postavi majhen kontejner s kodo: obdeluje to\u010dno to zahtevo in ubije kontejner.<\/p>\n<p>En klic \u2014 en postavljen kontejner, 1000 klicev \u2014 1000 kontejnerjev. In postavitev na fizi\u010dnih stre\u017enikih je \u017ee delo obla\u010dnega ponudnika. To je popolnoma skrito z brezstre\u017enim okvirom. V tej konceptu pla\u010damo za vsak klic. Na primer, \u010de pride en klic na dan \u2014 pla\u010damo za en klic, \u010de prihajajo milijon klicev na minuto \u2014 pla\u010damo za milijon. Ali na sekundo, to se tudi zgodi.<\/p>\n<p>Koncept objave serverless funkcije je primeren za stateless storitev. \u010ce pa potrebujete statefull storitev, potem k storitvi dodamo bazo podatkov. V tem primeru, ko gre za delo s stanjem, vsaka statefull funkcija preprosto pi\u0161e in bere iz baze podatkov. In to iz baze podatkov katerega koli od treh tipov, opisanih na za\u010detku \u010dlanka.<\/p>\n<p>Kak\u0161no splo\u0161no omejitev imajo vse te baze? To so stro\u0161ki za stalno uporabljeni obla\u010dni ali fizi\u010dni stre\u017enik (ali ve\u010d stre\u017enikov). Ni pomembno, ali uporabljamo klasi\u010dno bazo ali upravljano, ali imamo devops in skrbnika ali ne, kljub temu 24 na 7 pla\u010dujemo za strojno opremo, elektriko in najem podatkovnega centra. \u010ce imamo klasi\u010dno bazo, pla\u010dujemo za master in slave. \u010ce imamo visoko obremenjeno \u0161ardirano bazo \u2014 pla\u010dujemo za 10, 20 ali 30 stre\u017enikov, in pla\u010dujemo nenehno.<\/p>\n<p>Prisotnost stalno rezerviranih stre\u017enikov v strukturi stro\u0161kov je bila prej dojemana kot neizbe\u017eno zlo. Klasi\u010dne baze imajo tudi druge zaplete, kot so omejitve na \u0161tevilo povezav, omejitve skaliranja, geo-porazdeljeni konsenz \u2014 te te\u017eave je mogo\u010de nekako re\u0161iti v nekaterih bazah, vendar ne vse hkrati in ne popolnoma.<\/p>\n<h2>Serverless baza podatkov \u2014 teorija<\/h2>\n<p>\nVpra\u0161anje leta 2020: ali lahko tudi bazo podatkov naredimo serverless? Vsi smo sli\u0161ali za serverless backend\u2026 zakaj ne bi poskusili narediti bazo podatkov serverless?<\/p>\n<p>Zveni nenavadno, ker je baza podatkov statefull storitev, ki ni najbolj primerna za serverless infrastrukturo. Hkrati pa je stanje baze podatkov zelo veliko: gigabajti, terabajti, pri analiti\u010dnih bazah celo petabajti. Tako ne moremo kar enostavno upravljati v lahkih Docker kontejnerjih.<\/p>\n<p>Po drugi strani pa skoraj vse sodobne baze vsebujejo ogromno logike in komponent: transakcije, usklajevanje celovitosti, postopki, relacijske odvisnosti in veliko logike. Dokaj velik del logike baze podatkov zahteva dokaj majhno stanje. Gigabajti in terabajti se neposredno uporabljajo le v majhnem delu logike baze podatkov, povezane z neposredno izvajanjem poizvedb.<\/p>\n<p>Tako je ideja: \u010de del logike dopu\u0161\u010da stateless izvajanje, zakaj ne bi razdelili baze na Stateful in Stateless dele.<\/p>\n<h2>Serverless za OLAP re\u0161itve<\/h2>\n<p>\nPoglejmo, kako bi lahko izgledala razdelitev baze podatkov na Stateful in Stateless dele na prakti\u010dnih primerih.<\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Na primer, imamo analiti\u010dno bazo podatkov.<\/b>: zunanje podatke (rde\u010d valj na levi), ETL postopek, ki nalaga podatke v bazo, ter analitik, ki po\u0161ilja SQL poizvedbe bazi. To je klasi\u010dna shema delovanja skladi\u0161\u010da podatkov. <\/p>\n<p>V tej shemi se ETL izvaja pogojno enkrat. Naprej je treba stalno pla\u010devati za stre\u017enike, na katerih deluje baza s podatki, nalo\u017eenimi z ETL, da imamo kam po\u0161iljati poizvedbe. <\/p>\n<p>Oglejmo si alternativen pristop, ki je realiziran v AWS Athena Serverless. Tukaj ni stalno dodeljene strojne opreme, na kateri so shranjeni nalo\u017eeni podatki. Namesto tega:<\/p>\n<ul>\n<li>Uporabnik po\u0161lje SQL poizvedbo Atheni. Optimizator Atheni analizira SQL poizvedbo in i\u0161\u010de v shrambi metapodatkov (Metadata) konkretne podatke, potrebne za izvedbo poizvedbe.<\/li>\n<li>Optimizator na podlagi zbranih podatkov prenese potrebne podatke iz zunanjih virov v za\u010dasno shramba (za\u010dasno bazo podatkov).<\/li>\n<li>V za\u010dasni shrambi se izvr\u0161i SQL poizvedba uporabnika, rezultat pa se vrne uporabniku. <\/li>\n<li>Za\u010dasna shramba se o\u010disti, viri se sprostijo.<\/li>\n<\/ul>\n<p>V tej arhitekturi pla\u010damo le za postopek izvr\u0161itve poizvedbe. Ni poizvedb \u2013 ni stro\u0161kov.<\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo je delujo\u010d pristop in se realizira ne le v Athena Serverless, temve\u010d tudi v Redshift Spectrum (v AWS).<\/p>\n<p>Na primeru Athene je razvidno, da Serverless baza podatkov deluje na realnih poizvedbah z desetinami in stotinami terabajtov podatkov. Za stotine terabajtov potrebujemo stotine stre\u017enikov, vendar za njih ne pla\u010damo \u2013 pla\u010damo za poizvedbe. Hitrost vsake poizvedbe je (zelo) nizka v primerjavi s specializiranimi analiti\u010dnimi bazami, kot je Vertica, vendar ne pla\u010dujemo obdobij zastoja.<\/p>\n<p>Tak\u0161na baza podatkov je primerna za redke analiti\u010dne ad-hoc poizvedbe. Na primer, ko se spontano odlo\u010dimo preveriti hipotezo na nekem ogromnem volumnu podatkov. Za te primere je Athena popolna. Za redne poizvedbe je ta sistem drag. V tem primeru bazo podatkov shranite v nekem specializiranem re\u0161enju. <\/p>\n<h2>Serverless za OLTP re\u0161itve<\/h2>\n<p>\nV prej\u0161njem primeru smo obravnavali OLAP naloge (analiti\u010dne). Zdaj bomo obravnavali OLTP naloge.<\/p>\n<p>Predstavimo skalirni PostgreSQL ali MySQL. Dvignimo obi\u010dajno upravljano instanco PostgreSQL ali MySQL z minimalnimi viri. Ko bo na instanco pri\u0161la ve\u010dja obremenitev, bomo povezali dodatne replikate, na katere bomo razporedili del berljive obremenitve. \u010ce ni poizvedb in obremenitve \u2014 izklju\u010dimo replike. Prva instanca je master, ostale so replike.<\/p>\n<p>Ta ideja je uresni\u010dena v bazi imenovani Aurora Serverless AWS. Na\u010delo je preprosto: poizvedbe iz zunanjih aplikacij sprejema proxy flota. Ko zazna rast obremenitve, dodeli ra\u010dunalni\u0161ke vire iz vnaprej segretih minimalnih instanc \u2014 povezava se izvede \u010dim hitreje. Izklapljanje instanc poteka prav tako.<\/p>\n<p>V okviru Aurora obstaja pojem Aurora Capacity Unit, ACU. To je (odvzetno) \u2014 instanca (stre\u017enik). Vsak dolo\u010den ACU je lahko master ali slave. Vsaka enota kapacitete ima svojo operativno pomnilnik, procesor in minimalno diskovno kapaciteto. Tako imamo enega master, ostale pa so le berljive replike.<\/p>\n<p>\u0160tevilo teh delujo\u010dih Aurora Capacity Units je nastavljiv parameter. Minimalno \u0161tevilo je lahko ena ali ni\u010d (v tem primeru baza ne deluje, \u010de ni poizvedb).<\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKo baza prejme poizvedbe, proxy flota dvigne Aurora CapacityUnits in pove\u010da proizvodne vire sistema. Mo\u017enost pove\u010devanja in zmanj\u0161evanja virov omogo\u010da sistemu, da '\u017eonglira' z viri: samodejno izklopi posamezne ACU (jih zamenja z novimi) in na izklopljene vire nalo\u017ei vse aktualne posodobitve.<\/p>\n<p>Baza Aurora Serverless lahko skalira berljivo obremenitev. Vendar pa v dokumentaciji o tem ni povedano neposredno. Lahko se pojavi ob\u010dutek, da lahko dvignejo multi-master. Kakor koli, tu ni nobene \u010darovnije. <\/p>\n<p>Ta baza je odli\u010dna za izbegavanje velikih tro\u0161kova na sistemima sa nepredvidivim pristupom. Na primer, kada kreiramo MVP ili marketin\u0161ke sajtove, obi\u010dno ne o\u010dekujemo stabilno optere\u0107enje. U skladu s tim, kada nema pristupa, ne pla\u0107amo instance. Kada iznenada do\u0111e do optere\u0107enja, poput onog posle konferencije ili marketin\u0161ke kampanje, mase ljudi posete sajt i optere\u0107enje naglo raste, Aurora Serverless automatski prihvata to optere\u0107enje i brzo dodaje potrebne resurse (ACU). Nakon konferencije, svi zaborave na prototip, serveri (ACU) se gase i tro\u0161kovi opadaju na nulu \u2014 prakti\u010dno.<\/p>\n<p>Ovo re\u0161enje nije pogodno za stabilno visoko optere\u0107enje, jer ne mo\u017ee da skalira upisno optere\u0107enje. Sva ta povezivanja i odspajanja resursa de\u0161avaju se u trenutku poznatom kao \u201escale point\u201c \u2014 trenutku kada baza nije pod transakcijom, niti su zauzete privremene tabele. Na primer, tokom nedelje scale point mo\u017eda ne\u0107e nastati, a baza funkcioni\u0161e na istim resursima i jednostavno ne mo\u017ee ni da se pove\u0107a, ni da se smanji. <\/p>\n<p>Nema magije \u2014 to je obi\u010dan PostgreSQL. Ali proces dodavanja i isklju\u010divanja ma\u0161ina je delimi\u010dno automatizovan.<\/p>\n<h2>Serverless po dizajnu<\/h2>\n<p>\nAurora Serverless je stara baza koja je prilago\u0111ena oblaku tako da koristi odvojene prednosti Serverless. A sada \u0107u govoriti o bazi koja je prvobitno napisana za oblak, pod serverless pristupom \u2014 Serverless-by-design. Razvijana je bez pretpostavke da radi na fizi\u010dkim serverima.<\/p>\n<p>Ova baza se zove Snowflake. Ima tri klju\u010dna bloka.<\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrvi \u2014 blok metapodataka. To je brza in-memory usluga koja se bavi pitanjima bezbednosti, metapodataka, transakcija, optimizacije upita (na ilustraciji levo).<\/p>\n<p>Drugi blok \u2014 to su brojni virtuelni ra\u010dunski klasteri za izra\u010dunavanja (na ilustraciji \u2014 set plavih krugova).<\/p>\n<p>Tre\u0107i blok \u2014 sistem skladi\u0161tenja podataka zasnovan na S3. S3 je neograni\u010deno objektno skladi\u0161te u AWS-u, ne\u0161to kao neograni\u010deni Dropbox za biznis.<\/p>\n<p>Poglejmo, kako Snowflake deluje v scenariju hladnega zagona. To pomeni, da baza obstaja, podatki so nalo\u017eeni v njo, vendar ni aktivnih poizvedb. Zato, \u010de ni poizvedb, imamo zagnan hiter in-memory Metadata servis (prvi sklop). Imamo tudi S3 shrambo, kjer so podatki tabel razdeljeni na t.i. mikroparticije. Poenostavljeno: \u010de tabela vsebuje posle, so mikroparticije dnevi poslov. Vsak dan je lo\u010dena mikroparticija, lo\u010dena datoteka. Ko baza deluje v tem na\u010dinu, pla\u010dujete samo za prostor, ki ga zasedajo podatki. Tarifa za prostor je zelo nizka (\u0161e posebej ob upo\u0161tevanju pomembne stiskanja). Metadata servis prav tako deluje neprekinjeno, vendar za optimizacijo poizvedb ne potrebuje veliko virov, zato ga lahko \u0161tejemo kot pogojno brezpla\u010dnega. <\/p>\n<p>Zdaj si predstavljajte, da je uporabnik poslal SQL poizvedbo na\u0161i bazi. SQL poizvedba takoj pride v obdelavo v Metadata servis. Takoj ko prejme poizvedbo, ta servis analizira poizvedbo, dostopne podatke, pooblastila uporabnika in, \u010de je vse v redu, pripravi na\u010drt obdelave poizvedbe.<\/p>\n<p>Nato servis spro\u017ei zagon izra\u010dunskega klastra. Izra\u010dunski klaster je skupina stre\u017enikov, ki izvajajo izra\u010dune. To pomeni, da klaster lahko vsebuje 1, 2, 4, 8, 16, 32 stre\u017enikov \u2014 kolikor \u017eelite. Po\u0161ljete poizvedbo in za njo se takoj za\u010dne zagon tega klasterja. To resni\u010dno traja sekunde.<\/p>\n<p><img decoding=\"async\" alt=\"Na poti do brezstre\u017enih podatkovnih baz \u2014 kako in zakaj\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNato, potem ko se je kluster zagnal, se v kluster iz S3 za\u010dnejo kopirati mikroparticije, potrebne za obdelavo va\u0161ega poizvedovanja. To pomeni, da si predstavljamo, da za izvajanje SQL poizvedbe potrebujemo dve particiji iz ene tabele in eno iz druge. V tem primeru se v kluster kopirajo samo tri potrebne particije, ne pa vse tabele v celoti. Prav zaradi tega, ker je vse v okviru enega podatkovnega centra in povezano z zelo hitrimi povezavami, poteka proces prenosa zelo hitro: v sekunh, redko \u2014 v minutah, \u010de ne gre za kak\u0161ne monstruozne poizvedbe. Tako se mikroparticije kopirajo na ra\u010dunalni\u0161ki kluster in po zaklju\u010dku se na tem ra\u010dunalni\u0161kem klastru izvaja SQL poizvedba. Rezultat te poizvedbe je lahko ena vrstica, ve\u010d vrstic ali tabela \u2014 te se po\u0161ljejo uporabniku, da jih prenese, prika\u017ee v svojem BI orodju ali na kak na\u010din uporabi.<\/p>\n<p>Vsaka SQL poizvedba lahko ne le pre\u0161teje agregate iz prej nalo\u017eenih podatkov, temve\u010d tudi nalo\u017ei\/formira nove podatke v bazi. To pomeni, da je to lahko poizvedba, ki, na primer, izvr\u0161i vstavljanje novih zapisov v drugo tabelo, kar vodi do pojavitve nove particije na ra\u010dunalni\u0161kem klastru, ki se nato samodejno shrani v enotno S3 shrambo.<\/p>\n<p>Opisani scenarij, od prihoda uporabnika do zagon klasterja, nalaganje podatkov, izvajanje poizvedb, pridobivanje rezultatov, se obra\u010dunava po tarifi za minute uporabe zagnanega virtualnega ra\u010dunalni\u0161kega klasterja, virtualnega skladi\u0161\u010da. Tarifa se razlikuje glede na obmo\u010dje AWS in velikost klasterja, a povpre\u010dno zna\u0161a nekaj dolarjev na uro. Klaster s \u0161tirimi stroji je dvakrat dra\u017eji od klasterja z dvema strojima, klaster z osmimi stroji pa je \u0161e dvakrat dra\u017eji. Na voljo so mo\u017enosti z 16, 32 stroji, odvisno od kompleksnosti poizvedb. Pla\u010date pa le za tiste minute, ko klaster dejansko deluje, ker, ko ni poizvedb, vi prakti\u010dno umaknete roke, in po 5-10 minutah \u010dakanja (nastavljiv parameter) se sam ugasne, sprosti vire in postane brezpla\u010den.<\/p>\n<p>Skenarij je potpuno realan kada po\u0161aljete zahtev, klaster se pojavljuje, da ka\u017eemo, za minut, jo\u0161 minut traje prora\u010dun, zatim pet minuta na ga\u0161enje, i na kraju pla\u0107ate za sedam minuta rada tog klastera, a ne za mesece i godine.<\/p>\n<p>Prvi scenario opisuje kori\u0161\u0107enje Snowflake u jednopostavlja\u010dkom re\u017eimu. Sada zamislite da ima mnogo korisnika, \u0161to ve\u0107 bli\u017ee stvarnom scenariju.<\/p>\n<p>Pretpostavimo da imamo mnogo analiti\u010dara i Tableau izve\u0161taja koji neprekidno bombarduju na\u0161u bazu velikim brojem jednostavnih analiti\u010dkih SQL zahteva.<\/p>\n<p>Osim toga, pretpostavimo da imamo inventivne Data Scientists koji poku\u0161avaju da rade u\u017easne stvari sa podacima, upravljaju\u0107i desetinama terabajta, analiziraju\u0107i milijarde i trilione redova podataka. <\/p>\n<p>Za navedena dva tipa optere\u0107enja, Snowflake omogu\u0107ava pokretanje vi\u0161e nezavisnih ra\u010dunarskih klastera razli\u010ditih kapaciteta. Ovi ra\u010dunarski klasteri rade nezavisno, ali sa zajedni\u010dkim doslednim podacima.<\/p>\n<p>Za veliki broj lakih zahteva, mo\u017eete pokrenuti 2-3 mala klastera, veli\u010dine, recimo, po 2 ma\u0161ine svaki. Ovo pona\u0161anje je ostvarivo, izme\u0111u ostalog, putem automatskih pode\u0161avanja. Dakle, ka\u017eete: 'Snowflake, pokreni mali klaster. Ako optere\u0107enje poraste iznad odre\u0111enog parametra, pokreni sli\u010dan drugi, tre\u0107i. Kada optere\u0107enje po\u010dne da opada \u2013 ugasi suvi\u0161ne.' Tako da, bez obzira na to koliko analiti\u010dara do\u0111e i po\u010dne da pregleda izve\u0161taje, svima \u0107e biti dovoljno resursa.<\/p>\n<p>Pri tome, ako analiti\u010dari spavaju, i izve\u0161taje niko ne gleda \u2013 klasteri se mogu potpuno ugasiti, i prestajete da pla\u0107ate za njih.<\/p>\n<p>U me\u0111uvremenu, za te\u0161ke zahteve (od Data Scientists), mo\u017eete pokrenuti jedan veoma veliki klaster na, recimo, 32 ma\u0161ine. Ovaj klaster \u0107e tako\u0111e biti napla\u0107en samo za one minute i sate kada va\u0161 ogroman zahtev radi.<\/p>\n<p>Ova opisano mogu\u0107nost omogu\u0107ava deljenje klastera ne samo po 2, ve\u0107 po vi\u0161e vrsta optere\u0107enja (ETL, monitoring, materijalizacija izve\u0161taja,\u2026).<\/p>\n<p>Povzemimo Snowflake. Osnova zdru\u017euje lepo idejo in delujo\u010do implementacijo. V ManyChat uporabljamo Snowflake za analitiko vseh razpolo\u017eljivih podatkov. Klasterjev imamo ne tri, kot v primeru, ampak od 5 do 9, razli\u010dnih velikosti. Imamo nekak\u0161ne 16-strojne, 2-strojne, pa tudi super-mahne 1-strojne naprave za nekatere naloge. Uspe\u0161no porazdelijo obremenitev in nam omogo\u010dajo veliko var\u010devanje.<\/p>\n<p>Osnova uspe\u0161no skalira bralno in pisno obremenitev. To je ogromna razlika in velik preboj v primerjavi z 'Avro', ki je obvladovala le bralno obremenitev. Snowflake omogo\u010da skaliranje s temi izra\u010dunskimi klasterji in pisno obremenitev. Tako kot sem omenil, imamo v ManyChatu ve\u010d klasterjev, majhni in super-mahni klasterji se ve\u010dinoma uporabljajo za ETL, za nalaganje podatkov. Analitiki pa delujejo na srednjih klasterjih, ki niso obremenjeni z ETL nalogami, zato delujejo zelo hitro. <\/p>\n<p>Zato je osnova dobro primerna za OLAP naloge. Na \u017ealost pa za OLTP obremenitve \u0161e ni primerna. Prvi\u010d, ta baza je kolona\u010dna, s vsemi iz tega izhajajo\u010dimi posledicami. Drugi\u010d, sam pristop, ko ob vsakem povpra\u0161evanju po potrebi dvignete izra\u010dunski klaster in ga napolnite s podatki, je na \u017ealost za OLTP obremenitve \u0161e vedno prepo\u010dasen. Sekunde \u010dakanja za OLAP naloge so sprejemljive, za OLTP naloge pa nesprejemljive; raje bi imeli 100 ms, \u0161e bolje pa 10 ms.<\/p>\n<h2>Zaklju\u010dek<\/h2>\n<p>\nServerless podatkovna baza je mogo\u010da zaradi razdelitve baze podatkov na Stateless in Stateful dele. Verjetno ste opazili, da v vseh navedenih primerih Stateful del \u2014 to je, recimo, shranjevanje mikroparticij v S3, medtem ko je Stateless \u2014 optimizator, delo z meta-podatki, obdelava vpra\u0161anj varnosti, ki jih je mogo\u010de obravnavati kot neodvisne lahke Stateless storitve.<\/p>\n<p>Izvajanje SQL poizvedb se lahko prav tako dojame kot storitve z lahkim stanjem, ki se lahko pojavijo v brezstre\u017enem na\u010dinu, kot so izra\u010dunski klasterji Snowflake, prenesejo samo potrebne podatke, izvedejo poizvedbo in 'ugodijo'.<\/p>\n<p>Serverless baze produkcijske ravni so \u017ee na voljo za uporabo, delujejo. Te serverless baze so \u017ee pripravljene za obvladovanje OLAP nalog. Na \u017ealost pa pri OLTP nalogah obstajajo\u2026 nekatere omejitve, zato se uporabljajo z dodatnimi previdnostmi. Po eni strani je to slabost. Po drugi strani pa je to prilo\u017enost. Morda bo kdo med bralci na\u0161el na\u010din, kako narediti OLTP bazo povsem serverless, brez omejitev Aurora.<\/p>\n<p>Upam, da vam je bilo zanimivo. Serverless prihodnost \ud83d\ude42<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/514298\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432 \u0410\u0432\u0438\u0442\u043e \u0438 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u043b Data Platform, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438: \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 (Vertica, ClickHouse), \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0438 OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0438 \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043a\u0435\u0439\u0441\u0430\u043c\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91636,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91635","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\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\/sl\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\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-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-15T17:42:23+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\udd47Na poti k brezstre\u017enim podatkovnim bazam \u2014 kako in zakaj | ProHoster","description":"\u017divjo! Moje ime je Nikolaj Golov.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","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-15T17:42:23+00:00","article:modified_time":"2020-08-15T17:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91635","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:23:25","updated":"2022-09-27 17:18:10","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}