{"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\/ro\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bun\u0103 ziua tuturor! Numele meu este Nikolai Golov. Am lucrat anterior la Avito \u0219i timp de \u0219ase ani am condus Data Platform, ocup\u00e2ndu-m\u0103 de toate bazele de date: analitice (Vertica, ClickHouse), de flux \u0219i OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). \u00cen aceast\u0103 perioad\u0103, am \u00eenv\u0103\u021bat despre un num\u0103r mare de baze de date - foarte diverse \u0219i neobi\u0219nuite, precum \u0219i despre cazuri non-standard de utilizare a acestora.<\/p>\n<p>\u00cen prezent, lucrez la ManyChat. Practic, este o start-up - nou, ambi\u021bios \u0219i \u00een continu\u0103 cre\u0219tere. \u0218i c\u00e2nd am \u00eenceput s\u0103 lucrez pentru companie, a ap\u0103rut \u00eentrebarea clasic\u0103: \u201eCe ar trebui s\u0103 aleg\u0103 un start-up t\u00e2n\u0103r de pe pia\u021ba sistemelor de gestionare a bazelor de date?\u201d. <\/p>\n<p>\u00cen acest articol, bazat pe prezentarea mea la <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">festivalul online RIT++2020<\/a><\/noindex>, voi r\u0103spunde la aceast\u0103 \u00eentrebare. Versiunea video a prezent\u0103rii este disponibil\u0103 pe <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" 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>Baze de date cunoscute din 2020<\/h2>\n<p>\nSuntem \u00een anul 2020, m-am uitat \u00een jur \u0219i am observat trei tipuri de baze de date. <\/p>\n<p>Primul tip - <b>baze de date OLTP clasice<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. Acestea au fost scrise cu mult timp \u00een urm\u0103, dar sunt \u00een continuare relevante, deoarece sunt bine cunoscute comunit\u0103\u021bii dezvoltatorilor.<\/p>\n<p>Al doilea tip - <b>baze de date din anii 2000<\/b>. Acestea au \u00eencercat s\u0103 scape de modelele clasice, renun\u021b\u00e2nd la SQL, structurile tradi\u021bionale \u0219i ACID, prin ad\u0103ugarea de sharding integrat \u0219i alte caracteristici atractive. De exemplu, acestea sunt Cassandra, MongoDB, Redis sau Tarantool. Toate aceste solu\u021bii au dorit s\u0103 ofere pia\u021ba ceva cu adev\u0103rat nou \u0219i \u0219i-au g\u0103sit o ni\u0219\u0103, fiind extrem de utile \u00een anumite sarcini. Aceste baze vor fi denumite prin termenul umbrel\u0103 NOSQL.<\/p>\n<p>Anii 2000 s-au \u00eencheiat, bazele NOSQL s-au obi\u0219nuit, iar lumea, din punctul meu de vedere, a f\u0103cut urm\u0103torul pas - c\u0103tre <b>baze de date gestionate<\/b>. Aceste baze au un nucleu similar cu cel al bazelor OLTP clasice sau al noilor NoSQL. Dar ele nu au nevoie de DBA \u0219i DevOps \u0219i func\u021bioneaz\u0103 pe hardware gestionat \u00een cloud. Pentru dezvoltator, este \u201edoar o baz\u0103\u201d, care func\u021bioneaz\u0103 undeva, iar cum este instalat\u0103 pe server, cine a configurat serverul \u0219i cine \u00eel actualizeaz\u0103 nu \u00eei preocup\u0103 pe nimeni.<\/p>\n<p>Exemple de astfel de baze:<\/p>\n<ul>\n<li>AWS RDS - o solu\u021bie gestionat\u0103 pentru PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB - echivalentul AWS al unei baze de date de tip document, asem\u0103n\u0103toare cu Redis \u0219i MongoDB.<\/li>\n<li>Amazon Redshift - o baz\u0103 de date analitic\u0103 gestionat\u0103.<\/li>\n<\/ul>\n<p>\nAcestea se bazeaz\u0103 pe baze mai vechi, dar sunt implementate \u00eentr-un mediu gestionat, f\u0103r\u0103 a fi necesar\u0103 o administrare a hardware-ului. <\/p>\n<p><i>Not\u0103. Exemplele sunt luate pentru mediul AWS, dar existen\u021ba lor este similar\u0103 \u0219i \u00een Microsoft Azure, Google Cloud sau Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCe este nou \u00een acest context? Nimic din toate acestea \u00een 2020.<\/p>\n<h2>Conceptul de Serverless<\/h2>\n<p>\nCu adev\u0103rat nou pe pia\u021b\u0103 \u00een 2020 este serverless sau solu\u021biile f\u0103r\u0103 server.<\/p>\n<p>Voi \u00eencerca s\u0103 explic ce \u00eenseamn\u0103 asta, folosind exemplul unui serviciu obi\u0219nuit sau a unei aplica\u021bii backend.<br \/>\nPentru a desf\u0103\u0219ura o aplica\u021bie backend obi\u0219nuit\u0103, cump\u0103r\u0103m sau \u00eenchiriem un server, copiem codul pe acesta, public\u0103m un endpoint \u00een exterior \u0219i pl\u0103tim regulat pentru \u00eenchiriere, electricitate \u0219i servicii de data center. Aceasta este schema standard.<\/p>\n<p>Se poate face altfel? Cu serviciile serverless, se poate.<\/p>\n<p>Care este foca acestui concept: nu exist\u0103 server, nu exist\u0103 chiar nici o \u00eenchiriere a unui instant virtual \u00een cloud. Pentru a desf\u0103\u0219ura serviciul, copiem codul (func\u021biile) \u00een repository \u0219i public\u0103m un endpoint \u00een exterior. Apoi pl\u0103tim doar pentru fiecare apel al acestei func\u021bii, ignor\u00e2nd complet hardware-ul pe care aceasta ruleaz\u0103.<\/p>\n<p>Voi \u00eencerca s\u0103 ilustrez acest concept cu imagini.<br \/>\n<img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Dezvoltare clasic\u0103<\/b>. Avem un serviciu cu o anumit\u0103 sarcin\u0103. Ridic\u0103m dou\u0103 instan\u021be: servere fizice sau instan\u021be \u00een AWS. Aceste instan\u021be primesc cereri externe, care sunt procesate acolo. <\/p>\n<p>Dup\u0103 cum se vede \u00een imagine, serverele sunt utilizate inegal. Unul este utilizat 100%, cu dou\u0103 cereri, iar unul doar 50% \u2014 este par\u021bial inactiv. Dac\u0103 vin nu trei cereri, ci 30, atunci \u00eentregul sistem nu va putea face fa\u021b\u0103 sarcinii \u0219i va \u00eencepe s\u0103 se blocheze.<\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Dezvoltare f\u0103r\u0103 server<\/b>. \u00centr-un mediu serverless, un asemenea serviciu nu are instan\u021be \u0219i servere. Exist\u0103 un anumit pool de resurse preg\u0103tite \u2014 mici containere Docker echipate cu codul func\u021biei. Sistemul prime\u0219te cereri externe \u0219i, pentru fiecare, framework-ul serverless ridic\u0103 un mic container cu cod: proceseaz\u0103 exact aceast\u0103 cerere \u0219i distruge containerul.<\/p>\n<p>O cerere \u2014 un container ridicat, 1000 de cereri \u2014 1000 de containere. Iar desf\u0103\u0219urarea pe servere fizice este deja treaba furnizorului de cloud. Aceasta este complet ascuns\u0103 de framework-ul serverless. \u00cen acest concept, pl\u0103tim pentru fiecare apel. De exemplu, a venit un apel pe zi \u2014 am pl\u0103tit pentru un apel, a venit un milion pe minut \u2014 am pl\u0103tit pentru un milion. Sau pe secund\u0103, se poate \u00eent\u00e2mpla \u0219i a\u0219a.<\/p>\n<p>Conceptul public\u0103rii unei func\u021bii f\u0103r\u0103 server este potrivit pentru un serviciu stateless. Iar dac\u0103 ave\u021bi nevoie de un serviciu statefull, atunci ad\u0103ug\u0103m o baz\u0103 de date la serviciu. \u00cen acest caz, c\u00e2nd vine vorba de lucrul cu state, fiecare func\u021bie statefull pur \u0219i simplu scrie \u0219i cite\u0219te din baza de date. \u0218i anume dintr-o baz\u0103 de date de oricare dintre cele trei tipuri descrise la \u00eenceputul articolului.<\/p>\n<p>Care este limita comun\u0103 pentru toate aceste baze? Costul serverului cloud sau hardware constant utilizat (sau mai multor servere). Indiferent dac\u0103 folosim o baz\u0103 de date clasic\u0103 sau una gestionat\u0103, indiferent dac\u0103 avem DevOps \u0219i admin sau nu, tot pl\u0103tim constant pentru hardware, electricitate \u0219i chiria data center-ului, 24 din 7. Dac\u0103 avem o baz\u0103 de date clasic\u0103, pl\u0103tim pentru master \u0219i slave. Dac\u0103 este o baz\u0103 sharded cu o \u00eenc\u0103rcare mare \u2014 pl\u0103tim pentru 10, 20 sau 30 de servere \u0219i pl\u0103tim constant.<\/p>\n<p>Prezen\u021ba serverelor rezervate permanent \u00een structura cheltuielilor era perceput\u0103 anterior ca un r\u0103u inevitabil. Baze de date obi\u0219nuite au \u0219i alte complexit\u0103\u021bi, cum ar fi limitele de conexiuni, restric\u021bii de scalabilitate, consens geografic \u2014 acestea pot fi solu\u021bionate \u00een anumite baze de date, dar nu toate deodat\u0103 \u0219i nu perfect.<\/p>\n<h2>Baza de date serverless \u2014 teorie<\/h2>\n<p>\n\u00centrebarea anului 2020: putem s\u0103 facem o baz\u0103 de date s\u0103 fie serverless? Toat\u0103 lumea a auzit despre backend-ul serverless... dar hai s\u0103 \u00eencerc\u0103m s\u0103 facem \u0219i o baz\u0103 de date serverless?<\/p>\n<p>Aceasta sun\u0103 ciudat, deoarece o baz\u0103 de date este un serviciu statefull, nu foarte potrivit pentru infrastructura serverless. \u00cen acela\u0219i timp, state-ul bazei de date este foarte mare: gigabyte, terabyte, iar \u00een bazele analitice chiar petabytes. Nu este at\u00e2t de simplu s\u0103-l ridici \u00een containere Docker u\u0219oare.<\/p>\n<p>Pe de alt\u0103 parte, aproape toate bazele de date moderne con\u021bin o cantitate imens\u0103 de logic\u0103 \u0219i componente: tranzac\u021bii, asigurarea integrit\u0103\u021bii, proceduri, dependen\u021be rela\u021bionale \u0219i multe logici. O parte semnificativ\u0103 a logicii bazei de date necesit\u0103 un state relativ mic. Gigabyte \u0219i terabyte sunt utilizate direct doar de o mic\u0103 parte din logica bazei de date, care este legat\u0103 de executarea imediat\u0103 a interog\u0103rilor.<\/p>\n<p>Prin urmare, ideea este: dac\u0103 o parte a logicii permite executarea stateless, de ce s\u0103 nu \u00eemp\u0103r\u021bim baza pe p\u0103r\u021bi Stateful \u0219i Stateless.<\/p>\n<h2>Serverless pentru solu\u021bii OLAP<\/h2>\n<p>\nS\u0103 vedem cum poate ar\u0103ta \u00eemp\u0103r\u021birea unei baze de date \u00een p\u0103r\u021bi Stateful \u0219i Stateless prin exemple practice.<\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>De exemplu, avem o baz\u0103 de date analitic\u0103<\/b>: date externe (cilindrul ro\u0219u din st\u00e2nga), un proces ETL care \u00eencarc\u0103 datele \u00een baz\u0103, \u0219i un analist care trimite interog\u0103ri SQL c\u0103tre baz\u0103. Aceasta este o schem\u0103 clasic\u0103 de lucru a unui depozit de date. <\/p>\n<p>\u00cen aceast\u0103 schem\u0103, condi\u021bionat, procesul ETL se realizeaz\u0103 o singur\u0103 dat\u0103. Apoi trebuie s\u0103 pl\u0103tim continuu pentru serverele pe care ruleaz\u0103 baza cu datele \u00eenc\u0103rcate prin ETL, pentru a avea un loc unde s\u0103 trimitem interog\u0103ri. <\/p>\n<p>S\u0103 lu\u0103m \u00een considerare o abordare alternativ\u0103, implementat\u0103 \u00een baza AWS Athena Serverless. Aici nu exist\u0103 hardware dedicat constant, pe care s\u0103 fie stocate datele \u00eenc\u0103rcate. \u00cen schimb:<\/p>\n<ul>\n<li>Utilizatorul trimite o interogare SQL c\u0103tre Athena. Optimizerul Athena analizeaz\u0103 interogarea SQL \u0219i caut\u0103 \u00een depozitul de metadate datele specifice necesare pentru a executa interogarea.<\/li>\n<li>Optimizerul, pe baza datelor colectate, descarc\u0103 datele necesare din sursele externe \u00eentr-un depozit temporar (baz\u0103 de date temporar\u0103).<\/li>\n<li>\u00cen depozitul temporar, interogarea SQL de la utilizator este executat\u0103, iar rezultatul este returnat utilizatorului. <\/li>\n<li>Depozitul temporar este cur\u0103\u021bat, resursele sunt eliberate.<\/li>\n<\/ul>\n<p>\u00cen aceast\u0103 arhitectur\u0103, pl\u0103tim doar pentru procesul de execu\u021bie a interog\u0103rii. F\u0103r\u0103 interog\u0103ri \u2014 f\u0103r\u0103 cheltuieli.<\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAceasta este o abordare de lucru \u0219i se implementeaz\u0103 nu doar \u00een Athena Serverless, ci \u0219i \u00een Redshift Spectrum (\u00een AWS).<\/p>\n<p>Din exemplul Athena, se observ\u0103 c\u0103 baza de date Serverless func\u021bioneaz\u0103 cu interog\u0103ri reale av\u00e2nd zeci \u0219i sute de Terabai\u021bi de date. Pentru sute de Terabai\u021bi vor fi necesari sute de servere, dar nu trebuie s\u0103 pl\u0103tim pentru acestea \u2014 pl\u0103tim pentru interog\u0103ri. Viteza fiec\u0103rei interog\u0103ri este (foarte) sc\u0103zut\u0103 \u00een compara\u021bie cu bazele de date analitice specializate precum Vertica, dar \u00een schimb nu pl\u0103tim pentru perioadele de nefunc\u021bionare.<\/p>\n<p>Aceast\u0103 baz\u0103 de date este aplicabil\u0103 pentru interog\u0103ri analitice ad-hoc mai rare. De exemplu, atunci c\u00e2nd decidem spontan s\u0103 verific\u0103m o ipotez\u0103 pe o cantitate uria\u0219\u0103 de date. Pentru aceste cazuri, Athena este perfect\u0103. Pentru interog\u0103rile regulate, un astfel de sistem devine costisitor. \u00cen acest caz, face\u021bi cache pentru date \u00eentr-o solu\u021bie specializat\u0103. <\/p>\n<h2>Serverless pentru solu\u021bii OLTP<\/h2>\n<p>\n\u00cen exemplul anterior, au fost discutate sarcinile OLAP (analitice). Acum s\u0103 analiz\u0103m sarcinile OLTP.<\/p>\n<p>S\u0103 ne imagin\u0103m un PostgreSQL sau MySQL scalabil. S\u0103 ridic\u0103m o instan\u021b\u0103 gestionat\u0103 obi\u0219nuit\u0103 de PostgreSQL sau MySQL pe resurse minime. C\u00e2nd instan\u021ba va primi mai mult\u0103 \u00eenc\u0103rcare, vom conecta replici suplimentare, pe care vom distribui o parte din sarcina de citire. Dac\u0103 nu sunt cereri \u0219i \u00eenc\u0103rcare, dezactiv\u0103m replicile. Prima instan\u021b\u0103 este master, iar celelalte sunt replici.<\/p>\n<p>Aceast\u0103 idee este implementat\u0103 \u00een baza numit\u0103 Aurora Serverless AWS. Principiul este simplu: cererile din aplica\u021bii externe sunt preluate de o flot\u0103 proxy. Observ\u00e2nd cre\u0219terea \u00eenc\u0103rc\u0103rii, acesta aloc\u0103 resurse de calcul din instan\u021bele minime pre\u00eenc\u0103lzite - conectarea se face c\u00e2t mai rapid posibil. Deconectarea instan\u021belor se realizeaz\u0103 la fel.<\/p>\n<p>\u00cen cadrul Aurora exist\u0103 conceptul de Aurora Capacity Unit, ACU. Acesta este (\u00een mod arbitrar) o instan\u021b\u0103 (server). Fiecare ACU specific poate fi master sau slave. Fiecare Capacity Unit dispune de propria memorie RAM, procesor \u0219i disc minim. Astfel, un master \u0219i celelalte replici sunt doar pentru citire.<\/p>\n<p>Num\u0103rul acestor Aurora Capacity Units active este un parametru configurabil. Num\u0103rul minim poate fi unul sau zero (\u00een acest caz baza nu func\u021bioneaz\u0103, dac\u0103 nu exist\u0103 cereri).<\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC\u00e2nd baza prime\u0219te cereri, flota proxy ridic\u0103 Aurora Capacity Units, cresc\u00e2nd resursele sistemului. Capacitatea de a cre\u0219te \u0219i a reduce resursele permite sistemului s\u0103 \u201ejongleze\u201d cu resursele: scoate automat anumite ACU (\u00eenlocuindu-le cu altele) \u0219i aplic\u0103 toate actualiz\u0103rile relevante pe resursele scoase.<\/p>\n<p>Baza Aurora Serverless poate scala sarcina de citire. Dar \u00een documenta\u021bie nu se spune acest lucru \u00een mod direct. Poate ap\u0103rea senza\u021bia c\u0103 ar putea ridica multi-master. Totu\u0219i, nu este vorba de magie. <\/p>\n<p>Aceast\u0103 baz\u0103 este binevenit\u0103 pentru a nu cheltui o sum\u0103 uria\u0219\u0103 pe sisteme cu acces imprevizibil. De exemplu, atunci c\u00e2nd cre\u0103m un MVP sau site-uri de marketing, \u00een general nu ne a\u0219tept\u0103m la o sarcin\u0103 stabil\u0103. Astfel, \u00een cazul \u00een care nu exist\u0103 acces, nu pl\u0103tim pentru instan\u021be. C\u00e2nd apare brusc o \u00eenc\u0103rcare, cum ar fi dup\u0103 o conferin\u021b\u0103 sau o campanie publicitar\u0103, mul\u021bimi de oameni acceseaz\u0103 site-ul \u0219i sarcina cre\u0219te brusc, Aurora Serverless preia automat aceast\u0103 sarcin\u0103 \u0219i conecteaz\u0103 rapid resursele lips\u0103 (ACU). Apoi, dup\u0103 conferin\u021b\u0103, toat\u0103 lumea uit\u0103 de prototip, serverele (ACU) se opresc, iar cheltuielile scad la zero - convenabil.<\/p>\n<p>Aceast\u0103 solu\u021bie nu este potrivit\u0103 pentru un highload stabil, deoarece nu poate scala sarcina de scriere. Toate aceste conexiuni \u0219i deconect\u0103ri de resurse au loc \u00een momentul a\u0219a-numitului \u201escale point\u201d - momentul \u00een care baza nu este \u021binut\u0103 de o tranzac\u021bie, nu sunt tabele temporare. De exemplu, pe parcursul unei s\u0103pt\u0103m\u00e2ni, este posibil s\u0103 nu se produc\u0103 scale point, iar baza func\u021bioneaz\u0103 pe acelea\u0219i resurse \u0219i pur \u0219i simplu nu poate fi extins\u0103 sau restr\u00e2ns\u0103. <\/p>\n<p>Nu exist\u0103 magie - este doar un PostgreSQL obi\u0219nuit. Dar procesul de ad\u0103ugare a ma\u0219inilor \u0219i de deconectare este par\u021bial automatizat.<\/p>\n<h2>Serverless by design<\/h2>\n<p>\nAurora Serverless este o baz\u0103 veche, rescris\u0103 pentru cloud pentru a utiliza avantajele Serverless. Acum v\u0103 voi vorbi despre o baz\u0103 care a fost scris\u0103 din start pentru cloud, sub abordarea serverless - Serverless-by-design. A fost dezvoltat\u0103 f\u0103r\u0103 s\u0103 se presupun\u0103 c\u0103 func\u021bioneaz\u0103 pe servere fizice.<\/p>\n<p>Aceast\u0103 baz\u0103 se nume\u0219te Snowflake. Are trei blocuri cheie.<\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrimul - este blocul de metadate. Este un serviciu rapid \u00een memorie, care rezolv\u0103 problemele legate de securitate, metadate, tranzac\u021bii, optimizarea interog\u0103rilor (\u00een ilustra\u021bia din st\u00e2nga).<\/p>\n<p>Al doilea bloc - este format din numeroase clustere virtuale de calcul pentru calcule (\u00een ilustra\u021bie - un set de cercuri albastre).<\/p>\n<p>Al treilea bloc - este sistemul de stocare a datelor pe baza S3. S3 este un spa\u021biu de stocare de obiecte nelimitat \u00een AWS, ceva asem\u0103n\u0103tor unui Dropbox nelimitat pentru afaceri.<\/p>\n<p>S\u0103 vedem cum func\u021bioneaz\u0103 Snowflake, presupun\u00e2nd c\u0103 avem un start rece. Cu alte cuvinte, baza de date este prezent\u0103, datele sunt \u00eenc\u0103rcate \u00een aceasta, dar nu exist\u0103 interog\u0103ri active. Prin urmare, dac\u0103 nu sunt interog\u0103ri c\u0103tre baza de date, avem un serviciu rapid de Metadata \u00een memorie (primul bloc). \u0218i avem un stocare S3, unde sunt p\u0103strate datele din tabele, \u00eemp\u0103r\u021bite \u00een a\u0219a-numitele micro-parti\u021bii. Pentru simplificare: dac\u0103 \u00een tabel sunt tranzac\u021bii, micro-parti\u021biile sunt zilele tranzac\u021biilor. Fiecare zi este o micro-parti\u021bie separat\u0103, un fi\u0219ier separat. \u0218i atunci c\u00e2nd baza de date func\u021bioneaz\u0103 \u00een acest mod, pl\u0103ti\u021bi doar pentru spa\u021biul ocupat de date. De asemenea, tariful pentru spa\u021biu este foarte mic (mai ales av\u00e2nd \u00een vedere compresia semnificativ\u0103). Serviciul de metadata func\u021bioneaz\u0103 constant, dar pentru optimizarea interog\u0103rilor nu sunt necesare multe resurse, iar serviciul poate fi considerat condi\u021bionat gratuit. <\/p>\n<p>Acum s\u0103 ne imagin\u0103m c\u0103 un utilizator a venit la baza noastr\u0103 de date \u0219i a trimis o interogare SQL. Interogarea SQL este trimis\u0103 imediat c\u0103tre serviciul Metadata pentru procesare. A\u0219adar, primind interogarea, acest serviciu analizeaz\u0103 interogarea, datele disponibile, drepturile utilizatorului \u0219i, dac\u0103 totul este \u00een regul\u0103, elaboreaz\u0103 un plan pentru procesarea interog\u0103rii.<\/p>\n<p>Apoi, serviciul ini\u021biaz\u0103 lansarea unui cluster de calcul. Un cluster de calcul este un grup de servere care efectueaz\u0103 calcule. Cu alte cuvinte, este un cluster care poate con\u021bine 1 server, 2 servere, 4, 8, 16, 32 \u2014 c\u00e2te dori\u021bi. Trimite\u021bi interogarea \u0219i clusterul \u00eencepe s\u0103 se lanseze instantaneu pentru aceasta. Acest proces dureaz\u0103, de fapt, c\u00e2teva secunde.<\/p>\n<p><img decoding=\"async\" alt=\"Pe drumul c\u0103tre baze de date serverless \u2014 cum \u0219i de ce\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApoi, dup\u0103 ce clusterul a fost pornit, microparti\u021biile necesare pentru procesarea solicit\u0103rii tale sunt copiate din S3 \u00een cluster. Cu alte cuvinte, s\u0103 presupunem c\u0103 pentru a executa o interogare SQL sunt necesare dou\u0103 parti\u021bii dintr-un tabel \u0219i una din altul. \u00cen acest caz, \u00een cluster vor fi copiate doar cele trei parti\u021bii necesare, nu toate tabelele \u00een \u00eentregime. Acesta este motivul pentru care, \u0219i datorit\u0103 faptului c\u0103 totul se afl\u0103 \u00een cadrul aceluia\u0219i centru de date \u0219i este conectat prin canale foarte rapide, \u00eentregul proces de transfer se desf\u0103\u0219oar\u0103 foarte rapid: \u00een c\u00e2teva secunde, foarte rar \u00een c\u00e2teva minute, dac\u0103 nu este vorba despre interog\u0103ri extrem de complexe. Prin urmare, microparti\u021biile sunt copiate \u00een clusterul de calcul, iar, la final, pe acest cluster de calcul este executat\u0103 interogarea SQL. Rezultatul acestei interog\u0103ri poate fi o linie, mai multe linii sau un tabel \u2014 acestea sunt trimise utilizatorului pentru a fi desc\u0103rcate, afi\u0219ate \u00een instrumentul BI, sau utilizate \u00een alt mod.<\/p>\n<p>Fiecare interogare SQL poate nu doar s\u0103 calculeze agregate din datele deja \u00eenc\u0103rcate, ci \u0219i s\u0103 \u00eencarce\/formateze date noi \u00een baza de date. Asta \u00eenseamn\u0103 c\u0103 poate fi o interogare care, de exemplu, realizeaz\u0103 inser\u021bii de noi \u00eenregistr\u0103ri \u00eentr-un alt tabel, ceea ce duce la crearea unei noi parti\u021bii \u00een clusterul de calcul, care, la r\u00e2ndul s\u0103u, este salvat\u0103 automat \u00een depozitul S3 unic.<\/p>\n<p>Scenariul descris mai sus, de la sosirea utilizatorului p\u00e2n\u0103 la pornirea clusterului, \u00eenc\u0103rcarea datelor, executarea interog\u0103rilor, primirea rezultatelor, este tarifat pe baza minutei de utilizare a clusterului virtual de calcul ridicat, warehouse-ului virtual. Tariful variaz\u0103 \u00een func\u021bie de zona AWS \u0219i dimensiunea clusterului, dar, \u00een medie, cost\u0103 c\u00e2\u021biva dolari pe or\u0103. Un cluster format din patru ma\u0219ini cost\u0103 de dou\u0103 ori mai mult dec\u00e2t unul format din dou\u0103 ma\u0219ini, iar unul din opt ma\u0219ini cost\u0103 de \u00eenc\u0103 dou\u0103 ori mai mult. Sunt disponibile op\u021biuni de 16, 32 ma\u0219ini, \u00een func\u021bie de complexitatea interog\u0103rilor. Dar pl\u0103te\u0219ti doar pentru minutele \u00een care clusterul este cu adev\u0103rat activ, deoarece, atunci c\u00e2nd nu sunt interog\u0103ri, practic \u00eei dai drumul, iar dup\u0103 5-10 minute de a\u0219teptare (parametru configurabil) se va opri singur, eliber\u00e2nd resursele \u0219i devenind gratuit.<\/p>\n<p>Exist\u0103 un scenariu complet real \u00een care trimite\u021bi o solicitare, clusterul apare, s\u0103 zicem, \u00eentr-un minut, se g\u00e2nde\u0219te timp de \u00eenc\u0103 un minut, apoi cinci minute pentru a se opri, \u0219i \u00een final pl\u0103ti\u021bi pentru \u0219apte minute de func\u021bionare a acestui cluster, nu pentru luni \u0219i ani.<\/p>\n<p>Primul scenariu descria utilizarea Snowflake \u00eentr-o variant\u0103 pentru un singur utilizator. Acum s\u0103 ne imagin\u0103m c\u0103 sunt mul\u021bi utilizatori, ceea ce se apropie mai mult de un scenariu real.<\/p>\n<p>S\u0103 presupunem c\u0103 avem mul\u021bi anali\u0219ti \u0219i rapoarte Tableau care bombardeaz\u0103 constant baza noastr\u0103 cu un num\u0103r mare de interog\u0103ri SQL de analiz\u0103 simple.<\/p>\n<p>\u00cen plus, s\u0103 presupunem c\u0103 avem Data Scientists inventivi care \u00eencearc\u0103 s\u0103 fac\u0103 lucruri monstruoase cu datele, oper\u00e2nd cu zeci de terabytes, analiz\u00e2nd miliarde \u0219i trilioane de r\u00e2nduri de date. <\/p>\n<p>Pentru cele dou\u0103 tipuri de sarcini descrise mai sus, Snowflake permite ridicarea mai multor clustere de calcul independente de putere diferit\u0103. Aceste clustere de calcul func\u021bioneaz\u0103 independent, dar cu date comune consistente.<\/p>\n<p>Pentru un num\u0103r mare de interog\u0103ri u\u0219oare, se pot ridica 2-3 clustere mici, fiecare av\u00e2nd, s\u0103 zicem, 2 ma\u0219ini. Acest comportament poate fi realizat, de asemenea, prin set\u0103ri automate. Asta \u00eenseamn\u0103 c\u0103 spune\u021bi: \u201eSnowflake, ridic\u0103 un cluster mic. Dac\u0103 \u00eenc\u0103rcarea pe acesta dep\u0103\u0219e\u0219te un anumit parametru, ridic\u0103 un al doilea, al treilea similar. C\u00e2nd \u00eenc\u0103rcarea \u00eencepe s\u0103 scad\u0103, opre\u0219te cele \u00een plus.\u201d Astfel, indiferent de c\u00e2\u021bi anali\u0219ti vin \u0219i \u00eencep s\u0103 vizioneze rapoartele, toat\u0103 lumea are suficiente resurse.<\/p>\n<p>\u00cen acest context, dac\u0103 anali\u0219tii dorm \u0219i nimeni nu vizioneaz\u0103 rapoartele, clusterele se pot opri complet, iar dumneavoastr\u0103 nu mai pl\u0103ti\u021bi pentru ele.<\/p>\n<p>\u00cen plus, pentru interog\u0103rile complexe (de la Data Scientists), pute\u021bi ridica un singur cluster foarte mare cu 32 de ma\u0219ini, de exemplu. Acest cluster va fi de asemenea pl\u0103tit doar pentru minutele \u0219i orele \u00een care func\u021bioneaz\u0103 uria\u0219a dumneavoastr\u0103 interogare.<\/p>\n<p>Posibilitatea descris\u0103 mai sus permite separarea nu doar a dou\u0103, ci \u0219i a mai multor tipuri de sarcini prin clustere (ETL, monitorizare, materializare a rapoartelor,\u2026).<\/p>\n<p>S\u0103 rezum\u0103m Snowflake. Baza combin\u0103 o idee frumoas\u0103 cu o implementare func\u021bional\u0103. \u00cen ManyChat, folosim Snowflake pentru analiza tuturor datelor disponibile. Noi avem nu doar trei clustere, ca \u00een exemplu, ci \u00eentre 5 \u0219i 9, de dimensiuni diferite. Avem clustere de 16 ma\u0219ini, de 2 ma\u0219ini, dar \u0219i super-mici de 1 ma\u0219in\u0103 pentru anumite sarcini. Ele distribuie eficient sarcina \u0219i ne permit s\u0103 economisim considerabil.<\/p>\n<p>Baza scaleaz\u0103 cu succes sarcina de citire \u0219i scriere. Aceasta este o diferen\u021b\u0103 uria\u0219\u0103 \u0219i o mare progrese fa\u021b\u0103 de \u201eAurora\u201d, care gestiona doar sarcina de citire. Snowflake permite scalarea sarcinii de scriere prin aceste clustere de calcul. A\u0219a cum am men\u021bionat, \u00een ManyChat folosim mai multe clustere, iar clusterele mici \u0219i super-mici sunt folosite \u00een principal pentru ETL, pentru \u00eenc\u0103rcarea datelor. Iar anali\u0219tii lucreaz\u0103 pe clusterele medii, care nu sunt afectate de sarcina ETL, a\u0219a c\u0103 func\u021bioneaz\u0103 foarte rapid. <\/p>\n<p>Prin urmare, baza se preteaz\u0103 bine pentru sarcini OLAP. Din p\u0103cate, pentru sarcinile OLTP, aceasta nu este \u00eenc\u0103 aplicabil\u0103. \u00cen primul r\u00e2nd, aceasta este o baz\u0103 de date pe coloane, cu toate consecin\u021bele decurg\u0103toare. \u00cen al doilea r\u00e2nd, abordarea de a ridica un cluster de calcul pentru fiecare cerere \u0219i de a-l alimenta cu date, din p\u0103cate, nu este rapid\u0103 suficient pentru sarcinile OLTP. Secunde de a\u0219teptare pentru sarcinile OLAP sunt acceptabile, dar pentru OLTP sunt inacceptabile; ar trebui s\u0103 fie 100 ms, iar ideal 10 ms.<\/p>\n<h2>Rezultatul<\/h2>\n<p>\nO baz\u0103 de date f\u0103r\u0103 server este posibil\u0103 prin separarea acesteia \u00een p\u0103r\u021bi Stateless \u0219i Stateful. Probabil a\u021bi observat c\u0103 \u00een toate exemplele date, partea Stateful este, s\u0103 zicem, stocarea micro-parti\u021biilor \u00een S3, iar Stateless este optimizatorul, gestionarea metadatelor, tratarea problemelor de securitate, care pot fi ridicate ca servicii independente, u\u0219oare, Stateless.<\/p>\n<p>Executarea interog\u0103rilor SQL poate fi v\u0103zut\u0103 \u0219i ca servicii cu un stat u\u0219or, care pot ap\u0103rea \u00een modul f\u0103r\u0103 server, asemenea clustrelor de calcul Snowflake, desc\u0103rc\u00e2nd doar datele necesare, execut\u00e2nd interogarea \u0219i \u201esting\u00e2ndu-se\u201d.<\/p>\n<p>Bazele de date serverless de nivel de produc\u021bie sunt deja disponibile pentru utilizare, func\u021bioneaz\u0103. Aceste baze de date serverless sunt deja preg\u0103tite s\u0103 fac\u0103 fa\u021b\u0103 sarcinilor OLAP. Din p\u0103cate, pentru sarcinile OLTP sunt aplicate... cu nuan\u021be, deoarece exist\u0103 limit\u0103ri. Pe de o parte, acesta este un dezavantaj. Dar, pe de alt\u0103 parte, este o oportunitate. Poate c\u0103 cineva dintre cititori va g\u0103si o modalitate de a transforma o baz\u0103 de date OLTP \u00een una complet serverless, f\u0103r\u0103 limit\u0103ri Aurora.<\/p>\n<p>Sper c\u0103 v-a fost interesant. Spre viitorul Serverless \ud83d\ude42<br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Pe calea spre baze de date serverless \u2014 cum \u0219i de ce | ProHoster","description":"Salutare tuturor! M\u0103 numesc Golov Nikolai.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}