{"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\/sv\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej alla! Jag heter Nikolai Golov. Tidigare arbetade jag p\u00e5 Avito och ledde Data Platform i sex \u00e5r, vilket innebar att jag hanterade alla databaser: analytiska (Vertica, ClickHouse), str\u00f6mmande och OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). Under denna tid har jag kommit i kontakt med en stor m\u00e4ngd databaser \u2014 av olika och ovanliga slag, och med icke-standardiserade anv\u00e4ndningsfall.<\/p>\n<p>Just nu arbetar jag p\u00e5 ManyChat. Det \u00e4r i grunden en startup \u2014 ny, ambiti\u00f6s och snabbt v\u00e4xande. Och n\u00e4r jag precis b\u00f6rjade p\u00e5 f\u00f6retaget, uppstod den klassiska fr\u00e5gan: \"Vad b\u00f6r en ung startup v\u00e4lja fr\u00e5n marknaden f\u00f6r DBMS och databaser just nu?\". <\/p>\n<p>I den h\u00e4r artikeln, baserad p\u00e5 mitt f\u00f6redrag p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">onlinefestivalen RIT++2020<\/a><\/noindex>, svarar jag p\u00e5 den fr\u00e5gan. Videoversionen av f\u00f6redraget finns tillg\u00e4nglig p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" 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>V\u00e4lk\u00e4nda databaser 2020<\/h2>\n<p>\nDet \u00e4r \u00e5r 2020, jag s\u00e5g mig omkring och s\u00e5g tre typer av databaser. <\/p>\n<p>Den f\u00f6rsta typen \u2014 <b>klassiska OLTP-databaser<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. De skapades f\u00f6r l\u00e4nge sedan, men \u00e4r fortfarande aktuella eftersom de \u00e4r v\u00e4lk\u00e4nda f\u00f6r utvecklarsamh\u00e4llet.<\/p>\n<p>Den andra typen \u2014 <b>databaser fr\u00e5n \"nollorna\".<\/b>De f\u00f6rs\u00f6kte avvika fr\u00e5n klassiska m\u00f6nster genom att avst\u00e5 fr\u00e5n SQL, traditionella strukturer och ACID, genom att l\u00e4gga till inbyggd sharding och andra attraktiva funktioner. Exempel p\u00e5 detta \u00e4r Cassandra, MongoDB, Redis eller Tarantool. Alla dessa l\u00f6sningar ville erbjuda marknaden n\u00e5got helt nytt och fann sin nisch, eftersom de visade sig vara extremt bekv\u00e4ma f\u00f6r vissa uppgifter. Jag kommer att beteckna dessa databaser med den \u00f6vergripande termen NOSQL.<\/p>\n<p>\"Nollorna\" \u00e4r \u00f6ver, m\u00e4nniskor har vant sig vid NOSQL-databaser, och v\u00e4rlden, enligt min uppfattning, har gjort ett n\u00e4sta steg \u2014 mot <b>managed databaser.<\/b>Dessa databaser har samma k\u00e4rna som klassiska OLTP-databaser eller nya NoSQL. Men de har inget behov av DBA och DevOps och de k\u00f6rs p\u00e5 hanterad h\u00e5rdvara i molnet. F\u00f6r utvecklaren \u00e4r det \"bara en databas\" som fungerar n\u00e5gonstans, och hur den \u00e4r installerad p\u00e5 servern, vem som har konfigurerat servern och vem som uppdaterar den, ber\u00f6r ingen.<\/p>\n<p>Exempel p\u00e5 s\u00e5dana databaser:<\/p>\n<ul>\n<li>AWS RDS \u2014 en hanterad wrapper \u00f6ver PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB \u2014 AWS:s dokumentbaserade databas, liknande Redis och MongoDB.<\/li>\n<li>Amazon Redshift \u2014 en hanterad analytisk databas.<\/li>\n<\/ul>\n<p>\nI grunden handlar det om gamla databaser, men i en hanterad milj\u00f6, utan behov av att arbeta med h\u00e5rdvara. <\/p>\n<p><i>Obs. Exemplen \u00e4r tagna f\u00f6r AWS-milj\u00f6n, men deras motsvarigheter finns ocks\u00e5 i Microsoft Azure, Google Cloud, eller Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVad \u00e4r nytt med detta? \u00c5r 2020 \u00e4r inget av detta nytt.<\/p>\n<h2>Serverless-konceptet<\/h2>\n<p>\nN\u00e5got helt nytt p\u00e5 marknaden 2020 var serverless eller serverfria l\u00f6sningar.<\/p>\n<p>L\u00e5t mig f\u00f6rklara vad det inneb\u00e4r med ett exempel p\u00e5 en vanlig tj\u00e4nst eller backend-applikation.<br \/>\nF\u00f6r att lansera en vanlig backend-applikation k\u00f6per eller hyr vi en server, kopierar koden dit, publicerar en extern endpoint och betalar regelbundet f\u00f6r hyra, elektricitet och datacenter-tj\u00e4nster. Det h\u00e4r \u00e4r standardproceduren.<\/p>\n<p>Finns det n\u00e5got annat s\u00e4tt? Med serverfria tj\u00e4nster finns det.<\/p>\n<p>Vad \u00e4r kn\u00e4ckfr\u00e5gan med detta tillv\u00e4gag\u00e5ngss\u00e4tt: det finns ingen server, inte ens en hyra av en virtuell instans i molnet. F\u00f6r att lansera tj\u00e4nsten kopierar vi koden (funktionerna) till ett repository och publicerar en extern endpoint. Sedan betalar vi bara f\u00f6r varje anrop av denna funktion, helt ovetande om den h\u00e5rdvara d\u00e4r den k\u00f6rs.<\/p>\n<p>Jag ska f\u00f6rs\u00f6ka illustrera detta tillv\u00e4gag\u00e5ngss\u00e4tt med bilder.<br \/>\n<img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Klassisk deploy<\/b>. Vi har en tj\u00e4nst med viss belastning. Vi startar tv\u00e5 instanser: fysiska servrar eller instanser i AWS. Externa f\u00f6rfr\u00e5gningar riktas till dessa instanser, som hanterar dem. <\/p>\n<p>Som man kan se p\u00e5 bilden \u00e4r servrarna utnyttjade p\u00e5 olika s\u00e4tt. En \u00e4r utnyttjad till 100%, d\u00e4r finns tv\u00e5 f\u00f6rfr\u00e5gningar, medan en annan bara \u00e4r utnyttjad till 50% \u2014 den st\u00e5r delvis stilla. Om tre f\u00f6rfr\u00e5gningar kommer in ist\u00e4llet f\u00f6r trettio, s\u00e5 klarar inte systemet av belastningen och b\u00f6rjar sega.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Serverl\u00f6s deploy<\/b>. I en serverl\u00f6s milj\u00f6 finns det inga instanser och servrar f\u00f6r en s\u00e5dan tj\u00e4nst. Det finns en viss pool av uppv\u00e4rmda resurser \u2014 sm\u00e5 f\u00f6rberedda Docker-containrar med den distribuerade funktionskoden. Systemet tar emot externa f\u00f6rfr\u00e5gningar och f\u00f6r varje av dem startar det serverl\u00f6sa ramverket en liten container med koden: hanterar just den f\u00f6rfr\u00e5gan och d\u00f6dar containern.<\/p>\n<p>En f\u00f6rfr\u00e5gan \u2014 en startad container, 1000 f\u00f6rfr\u00e5gningar \u2014 1000 containrar. Och utplaceringen av h\u00e5rdvaruservrar \u00e4r redan cloud-providerns jobb. Det d\u00f6ljs helt av det serverl\u00f6sa ramverket. I detta koncept betalar vi f\u00f6r varje anrop. Till exempel, om en f\u00f6rfr\u00e5gan kommer in per dag \u2014 vi betalar f\u00f6r ett anrop, kommer en miljon per minut \u2014 vi betalar f\u00f6r en miljon. Eller per sekund, det h\u00e4nder ocks\u00e5.<\/p>\n<p>Konceptet av publicering av serverl\u00f6s funktion passar f\u00f6r en stateless tj\u00e4nst. Men om du beh\u00f6ver en stateful tj\u00e4nst, l\u00e4gger vi till en databas till tj\u00e4nsten. I detta fall, n\u00e4r det kommer till att arbeta med state, skriver och l\u00e4ser varje stateful funktion bara fr\u00e5n databasen. Dessutom fr\u00e5n en databas av vilket som helst av de tre typerna som beskrivits i b\u00f6rjan av artikeln.<\/p>\n<p>Vad \u00e4r den gemensamma begr\u00e4nsningen f\u00f6r alla dessa databaser? Det handlar om kostnader f\u00f6r den st\u00e4ndigt anv\u00e4nda moln- eller h\u00e5rdvaruservern (eller flera servrar). Oavsett om vi anv\u00e4nder en klassisk databas eller en managed, med DevOps och admin eller inte, betalar vi fortfarande 24\/7 f\u00f6r h\u00e5rdvara, el och datacenterhyra. Om vi har en klassisk databas, betalar vi f\u00f6r master och slave. Om det \u00e4r en h\u00f6gbelastad, sharded databas \u2014 betalar vi f\u00f6r 10, 20 eller 30 servrar, och vi betalar st\u00e4ndigt.<\/p>\n<p>N\u00e4rvaron av st\u00e4ndigt reserverade servrar i kostnadsstrukturen ans\u00e5gs tidigare som en oundviklig ondska. Vanliga databaser har ocks\u00e5 andra sv\u00e5righeter, s\u00e5som begr\u00e4nsningar p\u00e5 antal anslutningar, skalningsbegr\u00e4nsningar och geografisk konsensus \u2014 dessa kan l\u00f6sas i vissa databaser, men inte alla p\u00e5 en g\u00e5ng och inte perfekt.<\/p>\n<h2>Serverless databas \u2014 teori<\/h2>\n<p>\nFr\u00e5gan f\u00f6r 2020: kan en databas ocks\u00e5 g\u00f6ras serverless? Alla har h\u00f6rt talas om serverless backend... men l\u00e5t oss f\u00f6rs\u00f6ka g\u00f6ra databasen serverless ocks\u00e5!<\/p>\n<p>Det l\u00e5ter konstigt, eftersom en databas \u00e4r en stateful tj\u00e4nst, vilket inte riktigt passar in i en serverless infrastruktur. Samtidigt har databasen en mycket stor state: gigabyte, terabyte och i analytiska databaser till och med petabyte. Det \u00e4r inte s\u00e5 l\u00e4tt att hantera i l\u00e4tta Docker-containrar.<\/p>\n<p>\u00c5 andra sidan handlar praktiskt taget alla moderna databaser om en stor m\u00e4ngd logik och komponenter: transaktioner, integritets\u00f6verensst\u00e4mmelse, procedurer, relationella beroenden och mycket logik. En ganska stor del av databasens logik kr\u00e4ver en relativt liten state. Gigabyte och terabyte anv\u00e4nds endast av en liten del av databasens logik som \u00e4r kopplad till den direkta utf\u00f6ringen av f\u00f6rfr\u00e5gningar.<\/p>\n<p>D\u00e4rf\u00f6r \u00e4r id\u00e9n: om en del av logiken till\u00e5ter stateless exekvering, varf\u00f6r inte dela upp databasen i stateful och stateless delar?<\/p>\n<h2>Serverless f\u00f6r OLAP-l\u00f6sningar<\/h2>\n<p>\nL\u00e5t oss se hur uppdelningen av databasen i stateful och stateless delar kan se ut i praktiska exempel.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Till exempel har vi en analytisk databas<\/b>: externa data (r\u00f6d cylinder till v\u00e4nster), ETL-processen som laddar data till databasen, och en analytiker som skickar SQL-fr\u00e5gor till databasen. Detta \u00e4r ett klassiskt m\u00f6nster f\u00f6r hur ett datalager fungerar. <\/p>\n<p>I detta m\u00f6nster utf\u00f6rs ETL-funktionen en g\u00e5ng. D\u00e4refter m\u00e5ste vi betala f\u00f6r servrarna d\u00e4r databasen med de inl\u00e4sta data k\u00f6rs, s\u00e5 att vi har n\u00e5got att skicka fr\u00e5gor till. <\/p>\n<p>L\u00e5t oss titta p\u00e5 ett alternativt angreppss\u00e4tt som implementeras i AWS Athena Serverless. H\u00e4r finns ingen konstant h\u00e5rdvara som lagrar de inl\u00e4sta data. Ist\u00e4llet:<\/p>\n<ul>\n<li>Anv\u00e4ndaren skickar en SQL-fr\u00e5ga till Athena. Athena-optimeraren analyserar SQL-fr\u00e5gan och s\u00f6ker i metadata-lagret specifika data som beh\u00f6vs f\u00f6r att utf\u00f6ra fr\u00e5gan.<\/li>\n<li>Optimeraren, baserat p\u00e5 insamlade data, h\u00e4mtar n\u00f6dv\u00e4ndiga data fr\u00e5n externa k\u00e4llor till ett tempor\u00e4rt lagringsutrymme (tillf\u00e4llig databas).<\/li>\n<li>I det tempor\u00e4ra lagringsutrymmet k\u00f6rs SQL-fr\u00e5gan fr\u00e5n anv\u00e4ndaren, resultaten returneras till anv\u00e4ndaren. <\/li>\n<li>Det tempor\u00e4ra lagret rensas, resurser frig\u00f6rs.<\/li>\n<\/ul>\n<p>I denna arkitektur betalar vi endast f\u00f6r processen att utf\u00f6ra fr\u00e5gan. Inga fr\u00e5gor - inga kostnader.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDetta \u00e4r en fungerande metod och den implementeras inte bara i Athena Serverless, utan ocks\u00e5 i Redshift Spectrum (i AWS).<\/p>\n<p>Exemplet med Athena visar att Serverless-databaser fungerar med verkliga fr\u00e5gor med tiotals och hundratals terabyte data. F\u00f6r hundratals terabyte beh\u00f6vs hundratals servrar, men vi beh\u00f6ver inte betala f\u00f6r dem - vi betalar f\u00f6r fr\u00e5gorna. Hastigheten f\u00f6r varje fr\u00e5ga \u00e4r (mycket) l\u00e5g j\u00e4mf\u00f6rt med specialiserade analytiska databaser som Vertica, men vi betalar inte f\u00f6r stillast\u00e5ende tid.<\/p>\n<p>En s\u00e5dan databas \u00e4r till\u00e4mpbar f\u00f6r s\u00e4llsynta analytiska ad-hoc fr\u00e5gor. Till exempel, n\u00e4r vi spontant beslutar att testa en hypotes p\u00e5 ett enormt datam\u00e4ngd. F\u00f6r dessa fall \u00e4r Athena perfekt. F\u00f6r regelbundna fr\u00e5gor blir ett s\u00e5dant system dyrt. I detta fall, cache data i en specialiserad l\u00f6sning. <\/p>\n<h2>Serverless f\u00f6r OLTP-l\u00f6sningar<\/h2>\n<p>\nI det f\u00f6reg\u00e5ende exemplet diskuterades OLAP-uppgifter (analytiska). Nu ser vi p\u00e5 OLTP-uppgifter.<\/p>\n<p>L\u00e5t oss t\u00e4nka oss en skalbar PostgreSQL eller MySQL. Vi ska starta en vanlig managed instans av PostgreSQL eller MySQL med minimala resurser. N\u00e4r instansen f\u00e5r mer belastning kommer vi att ansluta ytterligare repliker, som vi f\u00f6rdelar en del av l\u00e4sbelastningen p\u00e5. Om det inte finns n\u00e5gra f\u00f6rfr\u00e5gningar eller belastning st\u00e4nger vi av replikerna. Den f\u00f6rsta instansen \u00e4r master, medan de \u00f6vriga \u00e4r repliker.<\/p>\n<p>Denna id\u00e9 realiseras i en databas som kallas Aurora Serverless AWS. Principen \u00e4r enkel: f\u00f6rfr\u00e5gningar fr\u00e5n externa applikationer tas emot av en proxyflotta. N\u00e4r den ser en \u00f6kning av belastningen tilldelar den ber\u00e4kningsresurser fr\u00e5n f\u00f6rv\u00e4g uppv\u00e4rmda minimala instanser \u2014 anslutningen sker s\u00e5 snabbt som m\u00f6jligt. Avst\u00e4ngning av instanser sker p\u00e5 samma s\u00e4tt.<\/p>\n<p>Inom Aurora finns begreppet Aurora Capacity Unit, ACU. Detta \u00e4r (villkorligt) en instans (server). Varje specifik ACU kan vara master eller slave. Varje Capacity Unit har sin egen RAM, processor och minimal disk. F\u00f6ljaktligen \u00e4r en master och de \u00f6vriga skrivskyddade repliker.<\/p>\n<p>Antalet aktiva Aurora Capacity Units \u00e4r en konfigurerbar parameter. Det minimiantal som kan s\u00e4ttas \u00e4r ett eller noll (i s\u00e5 fall fungerar inte databasen om det inte finns n\u00e5gra f\u00f6rfr\u00e5gningar).<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4r databasen f\u00e5r f\u00f6rfr\u00e5gningar startar proxyflottan Aurora Capacity Units och \u00f6kar systemets prestandaresurser. M\u00f6jligheten att \u00f6ka och minska resurser g\u00f6r att systemet kan \"jonglera\" med resurser: automatiskt ta ut vissa ACU (ers\u00e4tta dem med nya) och till\u00e4mpa alla aktuella uppdateringar p\u00e5 de uttagna resurserna.<\/p>\n<p>Aurora Serverless-databasen kan skala l\u00e4sbelastningen. Men detta n\u00e4mns inte uttryckligen i dokumentationen. Det kan bli en k\u00e4nsla av att de kan skapa en multi-master. Det finns dock inget magiskt med det. <\/p>\n<p>Denna databas \u00e4r v\u00e4l l\u00e4mpad f\u00f6r att undvika att spendera stora pengar p\u00e5 system med of\u00f6ruts\u00e4gbart tillg\u00e5ng. Till exempel, n\u00e4r vi skapar MVP eller marknadsf\u00f6ringssajter, f\u00f6rv\u00e4ntar vi oss vanligtvis inte en stabil belastning. D\u00e4rf\u00f6r, vid brist p\u00e5 tillg\u00e5ng, betalar vi inget f\u00f6r instanser. N\u00e4r belastningen pl\u00f6tsligt \u00f6kar, till exempel efter en konferens eller marknadsf\u00f6ringskampanj, kommer m\u00e5nga m\u00e4nniskor att bes\u00f6ka sajten och belastningen \u00f6kar snabbt; Aurora Serverless anpassar sig automatiskt till denna belastning och kopplar snabbt p\u00e5 de saknade resurserna (ACU). Efter konferensen gl\u00f6mmer alla prototypen, servrarna (ACU) st\u00e4ngs av, och kostnaderna faller till noll - mycket praktiskt.<\/p>\n<p>Denna l\u00f6sning \u00e4r inte l\u00e4mplig f\u00f6r stabil h\u00f6g belastning, eftersom den inte kan skala den skrivande belastningen. Alla dessa anslutningar och kopplingar av resurser sker vid den s\u00e5 kallade \u201eskala-punkten\u201d \u2014 tidpunkten n\u00e4r databasen inte h\u00e5lls av en transaktion, och inga tempor\u00e4ra tabeller h\u00e5lls. Till exempel, under en vecka kan det h\u00e4nda att ingen skala-punkt intr\u00e4ffar, och databasen arbetar med samma resurser och helt enkelt inte kan varken expandera eller minska. <\/p>\n<p>Det finns inget magiskt \u2014 detta \u00e4r vanlig PostgreSQL. Men processen f\u00f6r att l\u00e4gga till maskiner och st\u00e4nga av dem \u00e4r delvis automatiserad.<\/p>\n<h2>Serverless by design<\/h2>\n<p>\nAurora Serverless \u00e4r en gammal databas som skrivits om f\u00f6r molnet f\u00f6r att utnyttja de specifika f\u00f6rdelarna med Serverless. Nu kommer jag att prata om en databas som fr\u00e5n b\u00f6rjan \u00e4r skriven f\u00f6r molnet, under serverless-ansatsen \u2014 Serverless-by-design. Den designades utan f\u00f6ruts\u00e4ttningar om att den skulle fungera p\u00e5 fysiska servrar.<\/p>\n<p>Denna databas kallas Snowflake. Den har tre centrala block.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet f\u00f6rsta \u00e4r metadata-blocket. Detta \u00e4r en snabb in-memory-tj\u00e4nst som hanterar fr\u00e5gor kring s\u00e4kerhet, metadata, transaktioner, och query-optimering (i illustrationen till v\u00e4nster).<\/p>\n<p>Det andra blocket \u2014 en m\u00e4ngd virtuella ber\u00e4kningskluster f\u00f6r ber\u00e4kningar (i illustrationen \u2014 ett set av bl\u00e5 cirklar).<\/p>\n<p>Det tredje blocket \u2014 datalagringssystemet baserat p\u00e5 S3. S3 \u00e4r en dimensionl\u00f6s objektlagring i AWS, ett slags dimensionl\u00f6s Dropbox f\u00f6r f\u00f6retag.<\/p>\n<p>L\u00e5t oss titta p\u00e5 hur Snowflake fungerar under f\u00f6ruts\u00e4ttning av en kall start. Det vill s\u00e4ga att databasen finns, data \u00e4r laddad, men inga aktiva f\u00f6rfr\u00e5gningar g\u00f6rs. Om inga f\u00f6rfr\u00e5gningar g\u00f6rs mot databasen har vi en snabb in-memory Metadata-tj\u00e4nst uppe (den f\u00f6rsta blocket). Vi har ocks\u00e5 en S3-lagring d\u00e4r tabellernas data ligger uppdelad i s\u00e5 kallade mikropartitioner. F\u00f6renklat: om tabellen inneh\u00e5ller aff\u00e4rer, s\u00e5 \u00e4r mikropartitionerna dagar av aff\u00e4rer. Varje dag \u00e4r en separat mikropartition, en egen fil. N\u00e4r databasen fungerar i detta l\u00e4ge betalar du endast f\u00f6r det utrymme som data tar. Dessutom \u00e4r kostnaden f\u00f6r utrymme mycket l\u00e5g (s\u00e4rskilt med tanke p\u00e5 betydande kompression). Metadata-tj\u00e4nsten \u00e4r ocks\u00e5 st\u00e4ndigt verksam, men f\u00f6r att optimera f\u00f6rfr\u00e5gningarna kr\u00e4vs inte mycket resurser, och tj\u00e4nsten kan anses vara i praktiken kostnadsfri. <\/p>\n<p>Nu f\u00f6rest\u00e4ller vi oss att en anv\u00e4ndare har skickat en SQL-f\u00f6rfr\u00e5gan till v\u00e5r databas. SQL-f\u00f6rfr\u00e5gan skickas omedelbart f\u00f6r behandling till Metadata-tj\u00e4nsten. Tj\u00e4nsten analyserar f\u00f6rfr\u00e5gan, tillg\u00e4ngliga data, anv\u00e4ndarens beh\u00f6righeter, och om allt ser bra ut skapar den en plan f\u00f6r hur f\u00f6rfr\u00e5gan ska bearbetas.<\/p>\n<p>D\u00e4refter initierar tj\u00e4nsten starten av ett ber\u00e4kningskluster. Ber\u00e4kningsklustret \u00e4r ett kluster av servrar som utf\u00f6r ber\u00e4kningar. Det vill s\u00e4ga, det kan inneh\u00e5lla 1 server, 2 servrar, 4, 8, 16, 32 \u2013 s\u00e5 m\u00e5nga ni vill. Du skickar din f\u00f6rfr\u00e5gan och klustret startas omedelbart f\u00f6r den. Det tar verkligen sekunder.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 v\u00e4g mot serverl\u00f6sa databaser \u2014 hur och varf\u00f6r\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSedan, efter att klustret har startat, b\u00f6rjar mikropartiklar kopieras fr\u00e5n S3 till klustret, vilket \u00e4r n\u00f6dv\u00e4ndigt f\u00f6r att bearbeta just din f\u00f6rfr\u00e5gan. Det vill s\u00e4ga, l\u00e5t oss f\u00f6rest\u00e4lla oss att f\u00f6r att utf\u00f6ra en SQL-f\u00f6rfr\u00e5gan beh\u00f6vs tv\u00e5 partitioner fr\u00e5n en tabell och en fr\u00e5n den andra. I s\u00e5 fall kommer endast de tre n\u00f6dv\u00e4ndiga partitionerna att kopieras till klustret, och inte hela tabeller. Just d\u00e4rf\u00f6r och p\u00e5 grund av att allt ligger inom ett datacenter och \u00e4r anslutet med mycket snabba kanaler, sker hela \u00f6verf\u00f6ringsprocessen mycket snabbt: p\u00e5 sekunder, mycket s\u00e4llan \u2014 p\u00e5 minuter, om det r\u00f6r sig om n\u00e5gra enorma f\u00f6rfr\u00e5gningar. F\u00f6ljaktligen kopieras mikropartiklarna till det ber\u00e4kningsklustret, och n\u00e4r det \u00e4r klart utf\u00f6rs SQL-f\u00f6rfr\u00e5gan p\u00e5 detta ber\u00e4kningskluster. Resultatet av denna f\u00f6rfr\u00e5gan kan vara en rad, flera rader eller en tabell \u2014 de skickas ut till anv\u00e4ndaren s\u00e5 att denne kan h\u00e4mta dem, visa dem i sitt BI-verktyg, eller anv\u00e4nda dem p\u00e5 n\u00e5got annat s\u00e4tt.<\/p>\n<p>Varje SQL-f\u00f6rfr\u00e5gan kan inte bara r\u00e4kna aggregat fr\u00e5n tidigare inladdade data, utan ocks\u00e5 ladda\/formera nya data i databasen. Det vill s\u00e4ga, det kan vara en f\u00f6rfr\u00e5gan som till exempel utf\u00f6r en ins\u00e4ttning av nya poster i en annan tabell, vilket resulterar i att en ny partition skapas p\u00e5 det ber\u00e4kningsklustret, som i sin tur automatiskt sparas i det gemensamma S3-lagringsutrymmet.<\/p>\n<p>Det beskrivna scenariot, fr\u00e5n det att anv\u00e4ndaren kommer in tills klustret startas, dataladdning, utf\u00f6rande av f\u00f6rfr\u00e5gningar, och mottagande av resultat, faktureras per minut f\u00f6r anv\u00e4ndningen av det uppstartade virtuella ber\u00e4kningsklustret, det virtuella lagret. Avgiften varierar beroende p\u00e5 AWS-zon och storlek p\u00e5 klustret, men i genomsnitt handlar det om n\u00e5gra dollar i timmen. Klustret med fyra maskiner \u00e4r dubbelt s\u00e5 dyrt som klustret med tv\u00e5 maskiner, och klustret med \u00e5tta maskiner \u00e4r dubbelt s\u00e5 dyrt som det med fyra. Alternativ med 16, 32 maskiner finns tillg\u00e4ngliga beroende p\u00e5 komplexiteten hos f\u00f6rfr\u00e5gningarna. Men du betalar endast f\u00f6r de minuter som klustret verkligen arbetar, eftersom, n\u00e4r det inte finns n\u00e5gra f\u00f6rfr\u00e5gningar, kan du som det vore l\u00e4gga ner h\u00e4nderna, och efter 5-10 minuters v\u00e4ntan (anpassningsbar parameter) kommer det automatiskt att st\u00e4ngas av, frig\u00f6ra resurser och bli gratis.<\/p>\n<p>Det \u00e4r helt realistiskt att ett scenario d\u00e4r du skickar en beg\u00e4ran, klustret dyker upp, f\u00f6r att s\u00e4ga, p\u00e5 en minut, ytterligare en minut f\u00f6r att r\u00e4kna, fem minuter f\u00f6r st\u00e4ngning, och du betalar till slut f\u00f6r sju minuters arbete av det klustret, ist\u00e4llet f\u00f6r m\u00e5nader och \u00e5r.<\/p>\n<p>Det f\u00f6rsta scenariot beskrev anv\u00e4ndningen av Snowflake i en enskild anv\u00e4ndare-version. Nu l\u00e5t oss f\u00f6rest\u00e4lla oss att det finns m\u00e5nga anv\u00e4ndare, vilket \u00e4r n\u00e4rmare ett verkligt scenario.<\/p>\n<p>Anta att vi har m\u00e5nga analytiker och Tableau-rapporter som st\u00e4ndigt bombarderar v\u00e5r databas med en stor m\u00e4ngd enkla analytiska SQL-fr\u00e5gor.<\/p>\n<p>Dessutom, l\u00e5t oss anta att vi har p\u00e5hittiga Data Scientists som f\u00f6rs\u00f6ker g\u00f6ra monsterartade saker med data, hantera tiotals terabyte, analysera miljarder och triljoner rader data. <\/p>\n<p>F\u00f6r de tv\u00e5 typerna av belastning som beskrivits ovan till\u00e5ter Snowflake att flera oberoende ber\u00e4kningskluster av olika kapaciteter uppr\u00e4ttas. Dessa ber\u00e4kningskluster arbetar oberoende men med gemensamma koordinerade data.<\/p>\n<p>F\u00f6r ett stort antal l\u00e4tta fr\u00e5gor kan man uppr\u00e4tta 2-3 sm\u00e5 kluster, som var och en best\u00e5r av, s\u00e4g, 2 maskiner. Detta beteende kan implementeras, bland annat, med hj\u00e4lp av automatiska inst\u00e4llningar. Det vill s\u00e4ga, du s\u00e4ger: \u201eSnowflake, uppr\u00e4tta ett litet kluster. Om belastningen p\u00e5 det \u00f6kar \u00f6ver en viss parameter, uppr\u00e4tta en liknande andra, tredje. N\u00e4r belastningen b\u00f6rjar avta - st\u00e4ng av \u00f6verskottet\u201d. S\u00e5 att oavsett hur m\u00e5nga analytiker som kommer och b\u00f6rjar titta p\u00e5 rapporterna, har alla tillr\u00e4ckligt med resurser.<\/p>\n<p>Om analytikerna sover, och rapporterna inte tittas p\u00e5 - kan klustren helt st\u00e4ngas av, och du slutar betala f\u00f6r dem.<\/p>\n<p>F\u00f6r tunga fr\u00e5gor (fr\u00e5n Data Scientists) kan du uppr\u00e4tta ett mycket stort kluster best\u00e5ende av hypotetiska 32 maskiner. Detta kluster kommer ocks\u00e5 att debiteras endast f\u00f6r de minuter och timmar n\u00e4r din gigantiska fr\u00e5ga k\u00f6rs d\u00e4r.<\/p>\n<p>Den beskrivna m\u00f6jligheten ovan g\u00f6r det m\u00f6jligt att dela upp kluster inte bara i 2, utan \u00e4ven i fler typer av belastningar (ETL, \u00f6vervakning, materialisering av rapporter,\u2026 ).<\/p>\n<p>Sammanfattningsvis om Snowflake. Databasen kombinerar en vacker id\u00e9 med en fungerande implementation. P\u00e5 ManyChat anv\u00e4nder vi Snowflake f\u00f6r att analysera all tillg\u00e4nglig data. Vi har inte tre kluster som i exemplet, utan mellan 5 och 9, i olika storlekar. Vi har s\u00e5 kallade 16-maskins och 2-maskins-kluster, samt supersm\u00e5 1-maskins-kluster f\u00f6r vissa uppgifter. De f\u00f6rdelar lasten effektivt och hj\u00e4lper oss att spara pengar.<\/p>\n<p>Databasen skalar framg\u00e5ngsrikt b\u00e5de l\u00e4s- och skrivbelastning. Detta \u00e4r en stor skillnad och ett stort genombrott j\u00e4mf\u00f6rt med \"Aurora\", som endast hanterade l\u00e4sbelastning. Snowflake m\u00f6jligg\u00f6r att skala skrivbelastningen med dessa ber\u00e4kningskluster. S\u00e5, som jag n\u00e4mnde, anv\u00e4nder vi flera kluster p\u00e5 ManyChat, sm\u00e5 och super-sm\u00e5 kluster anv\u00e4nds fr\u00e4mst f\u00f6r ETL, f\u00f6r att ladda data. Och analytiker anv\u00e4nder de medelstora kluster som absolut inte p\u00e5verkas av ETL-belastningen, vilket g\u00f6r att de arbetar mycket snabbt. <\/p>\n<p>D\u00e4rmed passar databasen bra f\u00f6r OLAP-uppgifter. Tyv\u00e4rr \u00e4r den dock \u00e4nnu inte till\u00e4mplig f\u00f6r OLTP-belastningar. F\u00f6r det f\u00f6rsta \u00e4r denna databas kolumnbaserad, med alla d\u00e4rav f\u00f6ljande konsekvenser. F\u00f6r det andra \u00e4r tillv\u00e4gag\u00e5ngss\u00e4ttet att du vid varje beg\u00e4ran vid behov aktiverar ett ber\u00e4kningskluster och matar in data i det, tyv\u00e4rr fortfarande inte tillr\u00e4ckligt snabbt f\u00f6r OLTP-belastningar. Sekund\u00e4ra v\u00e4ntetider f\u00f6r OLAP-uppgifter \u00e4r acceptabla, men f\u00f6r OLTP-uppgifter \u00e4r det oacceptabelt; det skulle helst vara 100 ms, \u00e4nnu b\u00e4ttre 10 ms.<\/p>\n<h2>Resultat<\/h2>\n<p>\nServerless databas \u00e4r m\u00f6jlig tack vare uppdelningen av databasen i Stateless och Stateful delar. Du har s\u00e4kert lagt m\u00e4rke till att i alla de givna exemplen, s\u00e5 \u00e4r Stateful-delen \u2013 s\u00e5 att s\u00e4ga \u2013 lagringen av mikro-partitioner i S3, medan Stateless \u00e4r optimeraren, arbetet med metadata, och hanteringen av s\u00e4kerhetsfr\u00e5gor som kan lyftas som oberoende l\u00e4ttvikts Stateless-tj\u00e4nster.<\/p>\n<p>Utf\u00f6rande av SQL-fr\u00e5gor kan ocks\u00e5 ses som tj\u00e4nster med ett l\u00e4tt state, som kan dyka upp i serverless-l\u00e4ge, likt Snowflake ber\u00e4kningskluster, h\u00e4mta endast n\u00f6dv\u00e4ndig data, utf\u00f6ra fr\u00e5gan och \"sl\u00e4ckas\".<\/p>\n<p>Serverless-databaser av produktionsniv\u00e5 \u00e4r nu tillg\u00e4ngliga f\u00f6r anv\u00e4ndning och fungerar. Dessa serverless-databaser \u00e4r redan redo att hantera OLAP-uppgifter. Tyv\u00e4rr anv\u00e4nds de f\u00f6r OLTP-uppgifter... med vissa nyanser, d\u00e5 det finns begr\u00e4nsningar. \u00c5 ena sidan \u00e4r det en nackdel. Men \u00e5 andra sidan \u00e4r det en m\u00f6jlighet. Kanske hittar n\u00e5gon av l\u00e4sarna ett s\u00e4tt att g\u00f6ra en OLTP-databas helt serverless, utan begr\u00e4nsningar fr\u00e5n Aurora.<\/p>\n<p>Jag hoppas att ni tyckte det var intressant. F\u00f6r serverless framtid \ud83d\ude42<br \/>\n<br \/>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47P\u00e5 v\u00e4gen mot serverless databaser \u2014 hur och varf\u00f6r | ProHoster","description":"Hej alla! Jag heter Nikolaj Golov.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}