{"id":69568,"date":"2020-02-20T15:24:23","date_gmt":"2020-02-20T12:24:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/google-cloud-spanner-horoshij-plohoj-zloj"},"modified":"2020-03-03T16:14:50","modified_gmt":"2020-03-03T13:14:50","slug":"google-cloud-spanner-horoshij-plohoj-zloj","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","title":{"rendered":"Google Cloud Spanner: dobr\u00e9, zl\u00e9, a \u0161kared\u00e9","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>Ahojte, Habr\u00e1ci. Tradi\u010dne pokra\u010dujeme v zdie\u013ean\u00ed zauj\u00edmav\u00e9ho materi\u00e1lu pred za\u010diatkom nov\u00fdch kurzov. Dnes sme pre v\u00e1s posunuli \u010dl\u00e1nok o Google Cloud Spanner, ktor\u00fd s\u00favis\u00ed so spusten\u00edm kurzu. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">AWS pre v\u00fdvoj\u00e1rov<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: dobr\u00e9, zl\u00e9, a \u0161kared\u00e9\" src=\"\/wp-content\/uploads\/2020\/02\/b27b8a09543d10b078480c317553ca46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>P\u00f4vodne publikovan\u00e9 na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.lightspeedhq.com\/blog\/\">blogu Lightspeed HQ<\/a><\/noindex>.<\/i><\/p>\n<p>Ako spolo\u010dnos\u0165, ktor\u00e1 pon\u00faka mno\u017estvo cloudov\u00fdch POS rie\u0161en\u00ed pre maloobchodn\u00edkov, re\u0161taur\u00e1torov a online predajcov po celom svete, Lightspeed pou\u017e\u00edva nieko\u013eko r\u00f4znych typov datab\u00e1zov\u00fdch platforiem pre mno\u017estvo transak\u010dn\u00fdch, analytick\u00fdch a vyh\u013ead\u00e1vac\u00edch pr\u00edpadov. Ka\u017ed\u00e1 z t\u00fdchto datab\u00e1zov\u00fdch platforiem m\u00e1 svoje siln\u00e9 a slab\u00e9 str\u00e1nky. Ke\u010f Google predstavil Cloud Spanner na trhu \u2014 s s\u013eubn\u00fdmi funkciami, ak\u00e9 sme v oblasti rela\u010dn\u00fdch datab\u00e1z e\u0161te nevideli, ako takmer neobmedzen\u00e1 horizont\u00e1lna \u0161k\u00e1lovate\u013enos\u0165 a zmluva o \u00farovni slu\u017eieb (SLA) na \u00farovni 99,999 % \u2014 nemohli sme si necha\u0165 ujs\u0165 pr\u00edle\u017eitos\u0165 z\u00edska\u0165 ho do na\u0161ich r\u00fak!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAby sme poskytli komplexn\u00fd preh\u013ead na\u0161ich sk\u00fasenost\u00ed s Cloud Spannerom, ako aj hodnotiacich krit\u00e9ri\u00ed, ktor\u00e9 sme pou\u017eili, pozrieme sa na nasleduj\u00face t\u00e9my:<\/p>\n<ol>\n<li>Na\u0161e krit\u00e9ri\u00e1 hodnotenia<\/li>\n<li>Cloud Spanner v skratke<\/li>\n<li>Na\u0161a hodnotenie<\/li>\n<li>Na\u0161e z\u00e1very<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Google Cloud Spanner: dobr\u00e9, zl\u00e9, a \u0161kared\u00e9\" src=\"\/wp-content\/uploads\/2020\/02\/29ed599362fb189283faa9215c18297a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>1. Na\u0161e krit\u00e9ri\u00e1 hodnotenia<\/h2>\n<p>\nPredt\u00fdm, ako sa podrobne zaober\u00e1me funkciami Cloud Spanneru, jeho podobnos\u0165ami a rozdielmi s in\u00fdmi rie\u0161eniami na trhu, po\u010fme najprv hovori\u0165 o hlavn\u00fdch pr\u00edpadoch pou\u017eitia, ktor\u00e9 sme zva\u017eovali pri ot\u00e1zke, kde nasadi\u0165 Cloud Spanner v na\u0161ej infra\u0161trukt\u00fare:<\/p>\n<ul>\n<li>Ako n\u00e1hrada (dominantn\u00e9ho) tradi\u010dn\u00e9ho rie\u0161enia datab\u00e1zy SQL<\/li>\n<li>Ako OLTP rie\u0161enie s podporou OLAP<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i><b>Pozn\u00e1mka:<\/b> Pre jednoduchos\u0165 a pohodlie porovnania, tento \u010dl\u00e1nok porovn\u00e1va Cloud Spanner s variantmi MySQL rodiny rie\u0161en\u00ed GCP Cloud SQL a Amazon AWS RDS.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h4>Pou\u017e\u00edvanie Cloud Spanner ako n\u00e1hrady tradi\u010dn\u00e9ho rie\u0161enia datab\u00e1zy SQL<\/h4>\n<p>\nV prostred\u00ed <i>tradi\u010dn\u00fdch <\/i>datab\u00e1z, ke\u010f doba odozvy na dotaz v datab\u00e1ze prich\u00e1dza bl\u00edzko alebo dokonca presahuje predt\u00fdm stanoven\u00e9 prahov\u00e9 hodnoty aplik\u00e1cie (predov\u0161etk\u00fdm kv\u00f4li n\u00e1rastu po\u010dtu pou\u017e\u00edvate\u013eov a\/alebo dopytov), existuje nieko\u013eko sp\u00f4sobov, ako zn\u00ed\u017ei\u0165 dobu odozvy na prijate\u013en\u00e9 \u00farovne. V\u00e4\u010d\u0161ina t\u00fdchto rie\u0161en\u00ed v\u0161ak zah\u0155\u0148a manu\u00e1lny z\u00e1sah.<\/p>\n<p>Napr\u00edklad, prv\u00fd krok, ktor\u00fd je potrebn\u00e9 urobi\u0165, je pozrie\u0165 sa na r\u00f4zne parametre datab\u00e1zy s\u00favisiace s v\u00fdkonom a nastavi\u0165 ich tak, aby najlep\u0161ie vyhovovali vzorom pou\u017e\u00edvania aplik\u00e1ci\u00ed. Ak to nebude sta\u010di\u0165, m\u00f4\u017eete zvoli\u0165 vertik\u00e1lne alebo horizont\u00e1lne \u0161k\u00e1lovanie datab\u00e1zy.<\/p>\n<p>Vertik\u00e1lne \u0161k\u00e1lovanie aplik\u00e1cie spo\u010d\u00edva v aktualiz\u00e1cii in\u0161tancie servera, zvy\u010dajne pridan\u00edm v\u00e4\u010d\u0161ieho po\u010dtu procesorov\/jadier, v\u00e4\u010d\u0161ieho mno\u017estva opera\u010dnej pam\u00e4te, r\u00fdchlej\u0161ieho \u00falo\u017eiska at\u010f. Pridanie v\u00e4\u010d\u0161ieho mno\u017estva hardv\u00e9rov\u00fdch zdrojov vedie k zv\u00fd\u0161eniu v\u00fdkonu datab\u00e1zy, ktor\u00fd sa meria najm\u00e4 v transakci\u00e1ch za sekundu a oneskoren\u00ed transakci\u00ed pre syst\u00e9my OLTP. Syst\u00e9my rela\u010dn\u00fdch datab\u00e1z (ktor\u00e9 pou\u017e\u00edvaj\u00fa viacvl\u00e1knov\u00fd pr\u00edstup), ako MySQL, sa dobre \u0161k\u00e1luj\u00fa vertik\u00e1lne.<\/p>\n<p>Tento pr\u00edstup m\u00e1 nieko\u013eko nev\u00fdhod, ale najobviousnej\u0161ou je maxim\u00e1lna ve\u013ekos\u0165 servera na trhu. Akon\u00e1hle sa dosiahne limit najv\u00e4\u010d\u0161ej in\u0161tancie servera, ost\u00e1va jedin\u00e1 cesta: horizont\u00e1lne \u0161k\u00e1lovanie.<\/p>\n<p>Horizont\u00e1lne \u0161k\u00e1lovanie je pr\u00edstup, pri ktorom sa do klastra prid\u00e1va viac serverov, aby sa ide\u00e1lne line\u00e1rne zvy\u0161oval v\u00fdkon s pridan\u00edm po\u010dtu serverov. V\u00e4\u010d\u0161ina <i>tradi\u010dn\u00fdch <\/i>syst\u00e9mov datab\u00e1z sa zle \u0161k\u00e1luje horizont\u00e1lne alebo v\u00f4bec nie \u0161k\u00e1luje. Napr\u00edklad MySQL m\u00f4\u017ee horizont\u00e1lne \u0161k\u00e1lova\u0165 pre oper\u00e1cie \u010d\u00edtania pridan\u00edm slave-\u010ditate\u013eov, ale nem\u00f4\u017ee horizont\u00e1lne \u0161k\u00e1lova\u0165 pre oper\u00e1cie z\u00e1pisu.<\/p>\n<p>Na druhej strane, v\u010faka svojej povahe Cloud Spanner m\u00f4\u017ee \u013eahko horizont\u00e1lne \u0161k\u00e1lova\u0165 s minim\u00e1lnym z\u00e1sahom.<\/p>\n<p>Plne funk\u010dn\u00fd<i> DBMS ako slu\u017eba<\/i> by mala by\u0165 hodnoten\u00e1 z r\u00f4znych uhlov. Ako z\u00e1klad sme vzali najpopul\u00e1rnej\u0161iu DBMS v cloude \u2013 pre Google, GCP Cloud SQL a pre Amazon, AWS RDS. V na\u0161ej hodnoten\u00ed sme sa zamerali na nasleduj\u00face kateg\u00f3rie:<\/p>\n<ul>\n<li>Porovnanie vlastnost\u00ed: extensia SQL, DDL, DML; kni\u017enice pripojen\u00ed\/konektory, podpora transakci\u00ed a tak \u010falej.<\/li>\n<li>Podpora v\u00fdvoja: jednoduchos\u0165 v\u00fdvoja a testovania.<\/li>\n<li>Podpora spr\u00e1vy: spr\u00e1va in\u0161tanci\u00ed \u2013 napr\u00edklad \u0161k\u00e1lovanie nahor\/dolu a vylep\u0161enie in\u0161tanci\u00ed; SLA, z\u00e1lohovanie a obnova; bezpe\u010dnos\u0165\/kontrola pr\u00edstupu.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Pou\u017eitie Cloud Spanner ako OLTP rie\u0161enia s podporou OLAP.<\/h4>\n<p>\nHoci Google jasne neuv\u00e1dza, \u017ee Cloud Spanner je ur\u010den\u00fd na analytick\u00e9 spracovanie, del\u00ed sa o niektor\u00e9 atrib\u00faty s in\u00fdmi mechanizmami, ako s\u00fa Apache Impala &amp; Kudu a YugaByte, ktor\u00e9 s\u00fa ur\u010den\u00e9 na OLAP pracovn\u00e9 za\u0165a\u017eenia.<\/p>\n<p>Aj keby existovala len mal\u00e1 pravdepodobnos\u0165, \u017ee Cloud Spanner obsahuje s\u00faladne horizont\u00e1lne \u0161k\u00e1lovate\u013en\u00fd motor HTAP (hybridn\u00e9ho transak\u010dno\/analytick\u00e9ho spracovania) s (viac-menej) pou\u017eite\u013en\u00fdm setom funkci\u00ed OLAP, mysl\u00edme si, \u017ee by to st\u00e1lo za na\u0161u pozornos\u0165.<\/p>\n<p>S t\u00fdmto na pam\u00e4ti sme zv\u00e1\u017eili nasleduj\u00face kateg\u00f3rie:<\/p>\n<ul>\n<li>Na\u010d\u00edtanie d\u00e1t, indexy a podpora partionovania.<\/li>\n<li>V\u00fdkon dotazov a DML.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Cloud Spanner v skratke.<\/h2>\n<p>\nGoogle Spanner je klastra syst\u00e9m riadenia rela\u010dn\u00fdch datab\u00e1z (RDBMS), ktor\u00fd Google pou\u017e\u00edva pre niektor\u00e9 svoje vlastn\u00e9 slu\u017eby. Google ho spr\u00edstupnil verejnosti pre pou\u017e\u00edvate\u013eov Google Cloud Platform na za\u010diatku roka 2017.<\/p>\n<p>Tu s\u00fa niektor\u00e9 z atrib\u00fatov Cloud Spanner:<\/p>\n<ul>\n<li>Silne s\u00faladn\u00fd \u0161k\u00e1lovate\u013en\u00fd klaster RDBMS: pou\u017e\u00edva hardv\u00e9rov\u00fa synchroniz\u00e1ciu \u010dasu na zabezpe\u010denie konzistencie d\u00e1t.<\/li>\n<li>Podpora transakci\u00ed pre viacer\u00e9 tabu\u013eky: transakcie m\u00f4\u017eu pokr\u00fdva\u0165 viacero tabuliek \u2013 nie s\u00fa obmedzen\u00e9 len na jednu tabu\u013eku (na rozdiel od Apache HBase alebo Apache Kudu).<\/li>\n<li>Tabu\u013eky na z\u00e1klade prim\u00e1rneho k\u013e\u00fa\u010da: v\u0161etky tabu\u013eky musia ma\u0165 deklarovan\u00fd prim\u00e1rny k\u013e\u00fa\u010d (PK), ktor\u00fd m\u00f4\u017ee pozost\u00e1va\u0165 z viacer\u00fdch st\u013apcov tabu\u013eky. Tabu\u013ekov\u00e9 d\u00e1ta s\u00fa ulo\u017een\u00e9 v porad\u00ed PK, \u010do ich rob\u00ed ve\u013emi efekt\u00edvnymi a r\u00fdchlymi na vyh\u013ead\u00e1vanie pod\u013ea PK. Rovnako ako in\u00e9 syst\u00e9my na b\u00e1ze PK, implement\u00e1cia mus\u00ed by\u0165 modelovan\u00e1 s oh\u013eadom na predom premyslen\u00e9 use-cases pre dosiahnutie <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/schema-and-data-model\">najlep\u0161ieho v\u00fdkonu.<\/a><\/noindex>.<\/li>\n<li>Striedav\u00e9 tabu\u013eky: tabu\u013eky m\u00f4\u017eu ma\u0165 fyzick\u00e9 z\u00e1vislosti jedna od druhej. Riadky podriadenej tabu\u013eky m\u00f4\u017eu by\u0165 priraden\u00e9 k riadkom rodi\u010dovskej tabu\u013eky. Tento pr\u00edstup ur\u00fdch\u013euje vyh\u013ead\u00e1vanie vz\u0165ahov, ktor\u00e9 m\u00f4\u017eu by\u0165 definovan\u00e9 po\u010das f\u00e1zy modelovania d\u00e1t, napr\u00edklad pri spolo\u010dnom umiestnen\u00ed klientov a ich fakt\u00far.<\/li>\n<li>Indexy: Cloud Spanner podporuje sekund\u00e1rne indexy. Index sa sklad\u00e1 z indexovan\u00fdch st\u013apcov a v\u0161etk\u00fdch st\u013apcov PK. Ak si to prajete, index m\u00f4\u017ee tie\u017e obsahova\u0165 in\u00e9 neinexovan\u00e9 st\u013apce. Index m\u00f4\u017ee by\u0165 striedav\u00fd s rodi\u010dovskou tabu\u013ekou na ur\u00fdchlenie dopytov. Na indexy sa vz\u0165ahuje nieko\u013eko obmedzen\u00ed, ako napr\u00edklad maxim\u00e1lny po\u010det \u010fal\u0161\u00edch st\u013apcov, ktor\u00e9 sa uchov\u00e1vaj\u00fa v indexe. Tie\u017e dopyty cez indexy nemusia by\u0165 tak\u00e9 priamo\u010diare ako v in\u00fdch RDBMS.<\/li>\n<\/ul>\n<p>\n<i>\u201eCloud Spanner automaticky vyber\u00e1 index iba vo zriedkav\u00fdch pr\u00edpadoch. Najm\u00e4 Cloud Spanner automaticky nevyber\u00e1 sekund\u00e1rny index, ak dopyt po\u017eaduje ak\u00e9ko\u013evek st\u013apce, ktor\u00e9 nie s\u00fa ulo\u017een\u00e9 v <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/secondary-indexes\">indexe <\/a><\/noindex>\u00bb.<\/i><\/p>\n<ul>\n<li>Slu\u017eobn\u00e1 \u00farove\u0148 zmluvy (SLA): nasadenie v jednom regi\u00f3ne so SLA 99,99%; viacregion\u00e1lne nasadenia so SLA 99,999%. Hoci samotn\u00e1 slu\u017eobn\u00e1 \u00farove\u0148 zmluvy je len dohodou, nie z\u00e1rukou, ver\u00edm, \u017ee zamestnanci Googlu maj\u00fa skuto\u010dne presn\u00e9 \u00fadaje, aby mohli urobi\u0165 tak\u00e9 v\u00e1\u017ene tvrdenie. (Pre referenciu, 99,999% znamen\u00e1 26,3 sekundy nedostupnosti slu\u017eby mesa\u010dne.)<\/li>\n<li>Viac: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/\">https:\/\/cloud.google.com\/spanner\/<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i><b>Pozn\u00e1mka:<\/b> Projekt Apache Tephra prid\u00e1va roz\u0161\u00edren\u00fa podporu transakci\u00ed v Apache HBase (teraz je implementovan\u00fd aj v Apache Phoenix ako beta verzia).<\/i><\/p><\/blockquote>\n<p><\/p>\n<h2>Na\u0161a predpove\u010f<\/h2>\n<p>\n\u010c\u00edtali sme v\u0161etky vyhl\u00e1senia Googlu o v\u00fdhod\u00e1ch Cloud Spanner \u2014 prakticky neobmedzen\u00e9 horizont\u00e1lne \u0161k\u00e1lovanie pri zachovan\u00ed vysokej konzistencie a ve\u013emi vysok\u00e9ho SLA. Hoci tieto po\u017eiadavky s\u00fa vo v\u0161etk\u00fdch pr\u00edpadoch mimoriadne \u0165a\u017ek\u00e9 dosiahnu\u0165, na\u0161\u00edm cie\u013eom nebolo ich vyvr\u00e1ti\u0165. Namiesto toho sa zamerajme na in\u00e9 veci, ktor\u00e9 znepokojuj\u00fa v\u00e4\u010d\u0161inu pou\u017e\u00edvate\u013eov datab\u00e1z: presnos\u0165 a pou\u017eite\u013enos\u0165.<\/p>\n<h4>Ohodnotili sme Cloud Spanner ako n\u00e1hradu za Sharded MySQL<\/h4>\n<p>\nGoogle Cloud SQL a Amazon AWS RDS, dve najpopul\u00e1rnej\u0161ie OLTP DBMS na cloudovom trhu, maj\u00fa ve\u013emi \u0161irok\u00fa \u0161k\u00e1lu funkci\u00ed. Ak v\u0161ak chcete \u0161k\u00e1lova\u0165 tieto datab\u00e1zy za hranice jedn\u00e9ho uzla, mus\u00edte vykon\u00e1va\u0165 rozdelenie aplik\u00e1ci\u00ed. Tento pr\u00edstup vytv\u00e1ra dodato\u010dn\u00fa zlo\u017eitost ako pre aplik\u00e1cie, tak aj pre administrat\u00edvu. Prezreli sme si, ako sa Spanner zapad\u00e1 do scen\u00e1ra kombinovania nieko\u013ek\u00fdch segmentov do jedn\u00e9ho in\u0161tancie a ak\u00e9 funkcie (ak existuj\u00fa) mo\u017eno bude potrebn\u00e9 obetova\u0165.<\/p>\n<h4>Podpora SQL, DML a DDL, ako aj konektor a kni\u017enice?<\/h4>\n<p>\nPo prv\u00e9, pri sp\u00fa\u0161\u0165an\u00ed s akouko\u013evek datab\u00e1zou je potrebn\u00e9 vytvori\u0165 model \u00fadajov. Ak si mysl\u00edte, \u017ee m\u00f4\u017eete pripoji\u0165 JDBC Spanner k svojmu ob\u013e\u00faben\u00e9mu n\u00e1stroju SQL, zist\u00edte, \u017ee m\u00f4\u017eete dotazova\u0165 svoje \u00fadaje pomocou neho, ale nem\u00f4\u017eete ho pou\u017ei\u0165 na vytv\u00e1ranie tabuliek alebo na zmeny (DDL) alebo ak\u00e9ko\u013evek oper\u00e1cie vkladania\/aktualizovania\/odstra\u0148ovania (DML). Ofici\u00e1lny JDBC od Google nepodporuje ani to, ani to.<\/p>\n<blockquote><p><i>\u201eV s\u00fa\u010dasnosti ovl\u00e1da\u010de nepodporuj\u00fa pr\u00edkazy DML ani DDL.\u201c<\/i><br \/>\nDokument\u00e1cia Spanner<\/p><\/blockquote>\n<p>\nSo syst\u00e9mom GCP to nie je lep\u0161ie \u2014 m\u00f4\u017eete posiela\u0165 len SELECT dotazy. Na\u0161\u0165astie existuje JDBC ovl\u00e1da\u010d s podporou DML a DDL od komunity, vr\u00e1tane transakci\u00ed. <noindex><a rel=\"nofollow\" href=\"http:\/\/github.com\/olavloite\/spanner-jdbc\">github.com\/olavloite\/spanner-jdbc<\/a><\/noindex>. Hoci je tento ovl\u00e1da\u010d mimoriadne u\u017eito\u010dn\u00fd, absencia vlastn\u00e9ho JDBC ovl\u00e1da\u010da od Google prekvapuje. Na\u0161\u0165astie Google pon\u00faka pomerne \u0161irok\u00fa podporu klientskych kni\u017en\u00edc (na b\u00e1ze gRPC): C#, Go, Java, node.js, PHP, Python a Ruby.<\/p>\n<p>Takmer povinn\u00e9 pou\u017e\u00edvanie vlastn\u00fdch API Cloud Spanner (kv\u00f4li absencii DDL a DML v JDBC) vedie k ur\u010dit\u00fdm obmedzeniam pre pr\u00edbuzn\u00e9 oblasti k\u00f3du, ako s\u00fa pooly pripojen\u00ed alebo r\u00e1mce na prepojenie datab\u00e1z\u00ed (napr. Spring MVC). Vo v\u0161eobecnosti pri pou\u017e\u00edvan\u00ed JDBC m\u00f4\u017eete vo\u013ene vybera\u0165 svoj ob\u013e\u00faben\u00fd pool pripojen\u00ed (napr. HikariCP, DBCP, C3PO at\u010f.), ktor\u00fd bol testovan\u00fd a funguje dobre. V pr\u00edpade vlastn\u00fdch API Spanner mus\u00edme spolieha\u0165 na r\u00e1mce\/pooly na prepojenie\/sesie, ktor\u00e9 sme vytvorili sami.<\/p>\n<p>Kon\u0161trukcia zameran\u00e1 na prim\u00e1rny k\u013e\u00fa\u010d (PK) umo\u017e\u0148uje Cloud Spanner ve\u013emi r\u00fdchly pr\u00edstup k \u00fadajom prostredn\u00edctvom PK, ale vedie aj k ur\u010dit\u00fdm probl\u00e9mom s dotazmi.<\/p>\n<ul>\n<li>Nem\u00f4\u017eete aktualizova\u0165 hodnotu prim\u00e1rneho k\u013e\u00fa\u010da; najsk\u00f4r mus\u00edte odstr\u00e1ni\u0165 z\u00e1znam s p\u00f4vodn\u00fdm PK a znova ho vlo\u017ei\u0165 s novou hodnotou. (To je podobn\u00e9 in\u00fdm datab\u00e1zam orientovan\u00fdm na PK\/\u00falo\u017en\u00fdm mechanizmom.)<\/li>\n<li>Ak\u00e9ko\u013evek oper\u00e1cie UPDATE a DELETE musia uv\u00e1dza\u0165 PK v WHERE, preto nem\u00f4\u017eu by\u0165 pr\u00e1zdne oper\u00e1tory DELETE all \u2014 v\u017edy mus\u00ed by\u0165 poddotaz, napr\u00edklad: UPDATE xxx WHERE id IN (SELECT id FROM table1)<\/li>\n<li>Ch\u00fdbaj\u00faca mo\u017enos\u0165 auto-increment alebo nie\u010do podobn\u00e9, \u010do ur\u010duje sekvenciu pre pole PK. Aby to fungovalo, pr\u00edslu\u0161n\u00e1 hodnota mus\u00ed by\u0165 vytvoren\u00e1 na strane aplik\u00e1cie.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Sekund\u00e1rne indexy?<\/h4>\n<p>\nGoogle Cloud Spanner m\u00e1 zabudovan\u00fa podporu sekund\u00e1rnych indexov. Je to ve\u013emi pr\u00edjemn\u00e1 vlastnos\u0165, ktor\u00e1 nie v\u017edy prich\u00e1dza v in\u00fdch technol\u00f3gi\u00e1ch. Apache Kudu v s\u00fa\u010dasnosti vo v\u0161eobecnosti nepodporuje sekund\u00e1rne indexy a Apache HBase ich nepodporuje priamo, ale m\u00f4\u017ee ich prid\u00e1va\u0165 prostredn\u00edctvom Apache Phoenix.<\/p>\n<p>Indexy v Kudu a HBase m\u00f4\u017eu by\u0165 modelovan\u00e9 ako samostatn\u00e1 tabu\u013eka s r\u00f4znymi zlo\u017een\u00edm prim\u00e1rnych k\u013e\u00fa\u010dov, av\u0161ak at\u00f3mnos\u0165 oper\u00e1ci\u00ed vykonan\u00fdch s rodi\u010dovskou tabu\u013ekou a prisl\u00fachaj\u00facimi indexov\u00fdmi tabu\u013ekami mus\u00ed by\u0165 vykon\u00e1van\u00e1 na \u00farovni aplik\u00e1cie a nie je trivi\u00e1lna v spr\u00e1vnej implement\u00e1cii.<\/p>\n<p>Ako bolo uveden\u00e9 v preh\u013eade Cloud Spanner, jeho indexy sa m\u00f4\u017eu l\u00ed\u0161i\u0165 od indexov MySQL. Preto je potrebn\u00e9 zachova\u0165 osobitn\u00fa opatrnos\u0165 pri zostavovan\u00ed dopytov a profilovan\u00ed, aby sa zabezpe\u010dilo vyu\u017eitie spr\u00e1vneho indexu tam, kde je to potrebn\u00e9.<\/p>\n<h4>Poh\u013eady?<\/h4>\n<p>\nVe\u013emi popul\u00e1rny a u\u017eito\u010dn\u00fd objekt v datab\u00e1ze \u2014 poh\u013eady. M\u00f4\u017eu by\u0165 u\u017eito\u010dn\u00e9 pre mno\u017estvo pr\u00edpady pou\u017eitia; dva moje ob\u013e\u00faben\u00e9 s\u00fa \u00farove\u0148 logickej abstrakcie a \u00farove\u0148 bezpe\u010dnosti. Bohu\u017eia\u013e, Cloud Spanner NEpodporuje poh\u013eady. To v\u0161ak n\u00e1s len \u010diasto\u010dne obmedzuje, preto\u017ee na \u00farove\u0148 pr\u00edstupov\u00fdch pr\u00e1v nie je podrobnos\u0165 na \u00farovni st\u013apcov, kde by mohli by\u0165 poh\u013eady prijate\u013en\u00fdm rie\u0161en\u00edm.<\/p>\n<p>V dokument\u00e1cii Cloud Spanner v \u010dasti, ktor\u00e1 podrobne popisuje kv\u00f3ty a obmedzenia (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/quotas\">spanner\/quotas<\/a><\/noindex>), existuje jedna, kter\u00e1 m\u016f\u017ee b\u00fdt probl\u00e9mov\u00e1 pro n\u011bkter\u00e9 aplikace: Cloud Spanner m\u00e1 z v\u00fdroby omezen\u00ed na maxim\u00e1ln\u011b 100 datab\u00e1z\u00ed na instance. To m\u016f\u017ee b\u00fdt v\u00e1\u017enou p\u0159ek\u00e1\u017ekou pro datab\u00e1zi, kter\u00e1 m\u00e1 b\u00fdt \u0161k\u00e1lov\u00e1na na v\u00edce ne\u017e 100 datab\u00e1z\u00ed. Na\u0161t\u011bst\u00ed jsme po rozhovoru s na\u0161\u00edm technick\u00fdm z\u00e1stupcem Google zjistili, \u017ee tento limit m\u016f\u017ee b\u00fdt prakticky zv\u00fd\u0161en na jakoukoli hodnotu prost\u0159ednictv\u00edm podpory Google.<\/p>\n<h4>Podpora v\u00fdvoje?<\/h4>\n<p>\nCloud Spanner nab\u00edz\u00ed docela slu\u0161nou podporu programovac\u00edch jazyk\u016f pro pr\u00e1ci s jeho API. Ofici\u00e1ln\u011b podporovan\u00e9 knihovny zahrnuj\u00ed C#, Go, Java, node.js, PHP, Python a Ruby. Dokumentace je dostate\u010dn\u011b podrobn\u00e1, ale jako u jin\u00fdch pokro\u010dil\u00fdch technologi\u00ed je komunita pom\u011brn\u011b mal\u00e1 ve srovn\u00e1n\u00ed s nejobl\u00edben\u011bj\u0161\u00edmi datab\u00e1zov\u00fdmi technologiemi, co\u017e m\u016f\u017ee v\u00e9st ke zv\u00fd\u0161en\u00ed \u010dasu str\u00e1ven\u00e9ho \u0159e\u0161en\u00edm m\u00e9n\u011b b\u011b\u017en\u00fdch p\u0159\u00edpad\u016f pou\u017eit\u00ed nebo probl\u00e9m\u016f.<\/p>\n<h4>Jak je to ale s podporou lok\u00e1ln\u00edho v\u00fdvoje?<\/h4>\n<p>\nNena\u0161li jsme zp\u016fsob, jak vytvo\u0159it instance Cloud Spanner v lok\u00e1ln\u00edm prost\u0159ed\u00ed. To nejbl\u00ed\u017ee, co jsme dostali \u2014 Docker obraz, <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/cockroachdb\/cockroach\">CockroachDB<\/a><\/noindex>, co\u017e je v z\u00e1sad\u011b podobn\u00e9, ale v praxi se velmi li\u0161\u00ed. Nap\u0159\u00edklad CockroachDB m\u016f\u017ee pou\u017e\u00edvat PostgreSQL JDBC. Proto\u017ee by m\u011blo b\u00fdt v\u00fdvojov\u00e9 prost\u0159ed\u00ed co nejbl\u00ed\u017ee pracovn\u00edmu prost\u0159ed\u00ed, Cloud Spanner nen\u00ed ide\u00e1ln\u00ed, proto\u017ee se mus\u00ed spol\u00e9hat na plnou instanci Spanner. Pro sn\u00ed\u017een\u00ed n\u00e1klad\u016f m\u016f\u017eete zvolit instanci pro jeden region.<\/p>\n<h4>Podpora spr\u00e1vy?<\/h4>\n<p>\nVytvo\u0159en\u00ed instance Cloud Spanner je velmi jednoduch\u00e9. Sta\u010d\u00ed si vybrat mezi vytvo\u0159en\u00edm multiregion\u00e1ln\u00ed nebo instance pro jeden region, uv\u00e9st region(y) a po\u010det uzl\u016f. B\u011bhem m\u00e9n\u011b ne\u017e minuty bude instance spu\u0161t\u011bna a p\u0159ipravena k pr\u00e1ci.<\/p>\n<p>N\u011bkter\u00e9 z\u00e1kladn\u00ed metriky jsou p\u0159\u00edmo dostupn\u00e9 na str\u00e1nce Spanner v konzoli Google. Podrobn\u011bj\u0161\u00ed pohledy jsou dostupn\u00e9 prost\u0159ednictv\u00edm Stackdriveru, kde si tak\u00e9 m\u016f\u017eete nastavit prahov\u00e9 hodnoty metrik a pravidla upozorn\u011bn\u00ed.<\/p>\n<h4>P\u0159\u00edstup k prost\u0159edk\u016fm?<\/h4>\n<p>\nMySQL pon\u00faka rozsiahle a ve\u013emi podrobn\u00e9 nastavenia opr\u00e1vnen\u00ed\/\u00faloh pou\u017e\u00edvate\u013eov. Pr\u00edstup k ur\u010ditej tabu\u013eke alebo dokonca len k podmno\u017eine jej st\u013apcov je mo\u017en\u00e9 jednoduch\u00e9 nastavi\u0165. Cloud Spanner pou\u017e\u00edva n\u00e1stroj Google Identity &amp; Access Management (IAM), ktor\u00fd umo\u017e\u0148uje nastavovanie polit\u00edk a opr\u00e1vnen\u00ed len na ve\u013emi vysokej \u00farovni. Najpodrobnej\u0161ou mo\u017enos\u0165ou je opr\u00e1vnenie na \u00farovni datab\u00e1zy, ktor\u00e9 sa nezapad\u00e1 do v\u00e4\u010d\u0161iny produk\u010dn\u00fdch pr\u00edpadov. Toto obmedzenie v\u00e1s n\u00fati prid\u00e1va\u0165 \u010fal\u0161ie bezpe\u010dnostn\u00e9 opatrenia do v\u00e1\u0161ho k\u00f3du, infra\u0161trukt\u00fary alebo oboch, aby ste predi\u0161li neopr\u00e1vnen\u00e9mu pou\u017e\u00edvaniu zdrojov Spanner.<\/p>\n<h4>Z\u00e1lohy?<\/h4>\n<p>\nJednoducho povedan\u00e9, z\u00e1lohy v Cloud Spanner neexistuj\u00fa. Hoci vysok\u00e9 po\u017eiadavky Google SLA m\u00f4\u017eu zaru\u010di\u0165, \u017ee nestrat\u00edte \u017eiadne d\u00e1ta kv\u00f4li poruch\u00e1m hardv\u00e9ru alebo datab\u00e1zy, od \u013eudsk\u00fdch ch\u00fdb, defektov aplik\u00e1ci\u00ed at\u010f. V\u0161etci pozn\u00e1me pravidlo: vysok\u00e1 dostupnos\u0165 nenahr\u00e1dza rozumn\u00fa strat\u00e9giu z\u00e1lohovania. V s\u00fa\u010dasnosti je jedin\u00fdm sp\u00f4sobom z\u00e1lohovania d\u00e1t softv\u00e9rov\u00fd prenos ich z datab\u00e1zy do samostatn\u00e9ho \u00falo\u017eiska.<\/p>\n<h4>V\u00fdkon dotazov?<\/h4>\n<p>\nNa na\u010d\u00edtanie d\u00e1t a testovanie dotazov sme pou\u017eili Yahoo! Cloud Serving Benchmark. V tabu\u013eke ni\u017e\u0161ie je zobrazen\u00e1 pracovn\u00e1 z\u00e1\u0165a\u017e B YCSB s pomerom \u010d\u00edtania 95% a z\u00e1pisu 5%.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: dobr\u00e9, zl\u00e9, a \u0161kared\u00e9\" src=\"\/wp-content\/uploads\/2020\/02\/8fca14875af33c8ed3cd04b602c52b78.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Z\u00e1\u0165a\u017eov\u00fd test bol vykonan\u00fd na v\u00fdpo\u010dtovom eng\u00edne (CE) n1-standard-32 (32 vCPU, 120 GB pam\u00e4te) a testovac\u00ed in\u0161tanc nikdy nebol \u00fazkym miestom v testoch.<\/i><br \/>\n<i>** Maxim\u00e1lny po\u010det vl\u00e1kien v jednom in\u0161tancii YCSB je 400. Celkovo bolo potrebn\u00e9 spusti\u0165 \u0161es\u0165 paraleln\u00fdch in\u0161tanci\u00ed YCSB testov, aby sa dosiahlo celkovo 2400 vl\u00e1kien.<\/i><\/p>\n<p>Pri poh\u013eade na v\u00fdsledky testovania, najm\u00e4 kombin\u00e1ciu za\u0165a\u017eenia procesora a TPS, jasne vid\u00edme, \u017ee Cloud Spanner sa dobre \u0161k\u00e1luje. Vysok\u00e9 za\u0165a\u017eenie vytvoren\u00e9 mno\u017estvom vl\u00e1kien je vyv\u00e1\u017een\u00e9 vysok\u00fdm po\u010dtom uzlov v clustri Cloud Spanner. Hoci oneskorenie sa zd\u00e1 by\u0165 pomerne vysok\u00e9, najm\u00e4 pri pr\u00e1ci s 2400 vl\u00e1knami, na z\u00edskanie presnej\u0161\u00edch \u010d\u00edsel m\u00f4\u017ee by\u0165 potrebn\u00e9 opakovan\u00e9 testovanie s 6 men\u0161\u00edmi in\u0161tanciami v\u00fdpo\u010dtov\u00e9ho motora. Ka\u017ed\u00e1 in\u0161tancia bude sp\u00fa\u0161\u0165a\u0165 jeden test YCSB namiesto jednej ve\u013ekej in\u0161tancie CE so 6 paraleln\u00fdmi testami. Takto bude jednoduch\u0161ie rozl\u00ed\u0161i\u0165 oneskorenia po\u017eiadaviek Cloud Spanner a oneskorenia pridan\u00e9 sie\u0165ov\u00fdm pripojen\u00edm medzi Cloud Spanner a in\u0161tanciou CE, na ktorej sa test vykon\u00e1va.<\/p>\n<h3>Ako Cloud Spanner zvl\u00e1da OLAP?<\/h3>\n<p><\/p>\n<h4>Partitioning?<\/h4>\n<p>\nRozdelenie \u00fadajov na fyzicky a\/alebo logicky nez\u00e1visl\u00e9 segmenty, naz\u00fdvan\u00e9 partition, je ve\u013emi popul\u00e1rny koncept, ktor\u00fd sa vyskytuje vo v\u00e4\u010d\u0161ine mechanizmov OLAP. Partitiony m\u00f4\u017eu v\u00fdrazne zlep\u0161i\u0165 v\u00fdkon dotazov a udr\u017eiavate\u013enos\u0165 datab\u00e1zy. Podrobnej\u0161ie sk\u00famanie partition by vy\u017eadovalo samostatn\u00fd \u010dl\u00e1nok, preto len spomenieme d\u00f4le\u017eitos\u0165 existencie sch\u00e9my partition a sub-partition. Mo\u017enos\u0165 rozdeli\u0165 \u00fadaje na partition a e\u0161te \u010falej na subpartition je k\u013e\u00fa\u010dom k v\u00fdkonu analytick\u00fdch dotazov.<\/p>\n<p>Cloud Spanner nepodporuje partitiony ako tak\u00e9. Rozde\u013euje \u00fadaje vo vn\u00fatri na tzv. <i>split<\/i>-y na z\u00e1klade rozsahov prim\u00e1rneho k\u013e\u00fa\u010da. Rozdelenie prebieha automaticky na vyv\u00e1\u017eenie za\u0165a\u017eenia v clustri Cloud Spanner. Ve\u013emi u\u017eito\u010dn\u00e1 funkcia Cloud Spanner je rozdelenie z\u00e1kladn\u00e9ho za\u0165a\u017eenia rodi\u010dovskej tabu\u013eky (tabu\u013eky, ktor\u00e1 sa nech\u00e1 preklada\u0165 s in\u00fdmi). Spanner automaticky zist\u00ed, \u010di obsahuje <i>split <\/i>\u00fadaje, ktor\u00e9 s\u00fa \u010d\u00edtan\u00e9 \u010dastej\u0161ie ako \u00fadaje v in\u00fdch <i>split<\/i>-\u00e1ch, a m\u00f4\u017ee sa rozhodn\u00fa\u0165 o \u010fal\u0161om rozdelen\u00ed. T\u00fdmto sp\u00f4sobom m\u00f4\u017ee by\u0165 zapojen\u00fdch viac uzlov, \u010do takisto efekt\u00edvne zvy\u0161uje priepustnos\u0165.<\/p>\n<h4>Nahr\u00e1vanie \u00fadajov?<\/h4>\n<p>\nSp\u00f4sob Cloud Spanner pre objemn\u00e9 d\u00e1ta je rovnak\u00fd ako pri be\u017enom nahr\u00e1van\u00ed. Pre dosiahnutie maxim\u00e1lneho v\u00fdkonu je potrebn\u00e9 dodr\u017eiava\u0165 niektor\u00e9 odpor\u00fa\u010dania, vr\u00e1tane:<\/p>\n<ul>\n<li>Usporiadajte va\u0161e d\u00e1ta pod\u013ea prim\u00e1rneho k\u013e\u00fa\u010da.<\/li>\n<li>Rozde\u013ete ich na 10*<i>po\u010det uzlov<\/i> samostatn\u00fdch sekci\u00ed.<\/li>\n<li>Vytvorte s\u00fabor pracovn\u00fdch \u00faloh, ktor\u00e9 nahr\u00e1vaj\u00fa d\u00e1ta paralelne.<\/li>\n<\/ul>\n<p>\nPri takomto nahr\u00e1van\u00ed d\u00e1t sa vyu\u017e\u00edvaj\u00fa v\u0161etky uzly Cloud Spanner.<\/p>\n<p>Pou\u017eili sme z\u00e1\u0165a\u017e A YCSB na generovanie s\u00faboru d\u00e1t zo 10M riadkov.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: dobr\u00e9, zl\u00e9, a \u0161kared\u00e9\" src=\"\/wp-content\/uploads\/2020\/02\/89b9c0353716be2d389b3e8da82781ad.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Z\u00e1\u0165a\u017eov\u00fd test bol vykonan\u00fd na v\u00fdpo\u010dtovom engine n1-standard-32 (32 vCPU, 120 GB pam\u00e4te), a testovac\u00ed in\u0161tancia nikdy nebola \u00fazkym miestom v testoch.<br \/>\n** Nastavenie z 1 uzla sa neodpor\u00fa\u010da pre \u017eiadnu produk\u010dn\u00fa z\u00e1\u0165a\u017e.<\/i><\/p>\n<p>Ako bolo uveden\u00e9 vy\u0161\u0161ie, Cloud Spanner automaticky spracov\u00e1va rozdelenia v z\u00e1vislosti od ich za\u0165a\u017eenia, preto sa v\u00fdsledky zlep\u0161uj\u00fa po nieko\u013ek\u00fdch po sebe id\u00facich opakovaniach testu. V\u00fdsledky uveden\u00e9 tu s\u00fa najlep\u0161ie v\u00fdsledky, ktor\u00e9 sme z\u00edskali. Pri poh\u013eade na \u010d\u00edsla vy\u0161\u0161ie, m\u00f4\u017eeme vidie\u0165, ako Cloud Spanner (dobr\u00e9) \u0161k\u00e1luje s rast\u00facim po\u010dtom uzlov v klastri. \u010c\u00edsla, ktor\u00e9 vynikaj\u00fa, predstavuj\u00fa extr\u00e9mne n\u00edzke priemern\u00e9 latencie, ktor\u00e9 kontrastuj\u00fa s v\u00fdsledkami zmie\u0161an\u00fdch pracovn\u00fdch z\u00e1\u0165a\u017e\u00ed (95 % na \u010d\u00edtanie a 5 % na z\u00e1pis), ako je pop\u00edsan\u00e9 v predch\u00e1dzaj\u00facej \u010dasti.<\/p>\n<h4>\u0160k\u00e1lovanie?<\/h4>\n<p>\nZvy\u0161ovanie a zni\u017eovanie po\u010dtu uzlov Cloud Spanner je \u00faloha, ktor\u00e1 sa vykon\u00e1va jedn\u00fdm kliknut\u00edm. Ak chcete r\u00fdchlo nahr\u00e1va\u0165 d\u00e1ta, m\u00f4\u017eete zv\u00e1\u017ei\u0165 zvy\u0161ovanie in\u0161tancie na maximum (v na\u0161om pr\u00edpade to bolo 25 uzlov v regi\u00f3ne US-EAST), a potom zn\u00ed\u017ei\u0165 po\u010det uzlov na \u00farove\u0148, ktor\u00e1 vyhovuje va\u0161ej be\u017enej z\u00e1\u0165a\u017ei, po nahrat\u00ed v\u0161etk\u00fdch d\u00e1t do datab\u00e1zy, pri\u010dom majte na pam\u00e4ti obmedzenie 2 TB\/uzol.<\/p>\n<p>Dokonca sme si pripomenuli toto obmedzenie aj s ove\u013ea men\u0161ou datab\u00e1zou. Po nieko\u013ek\u00fdch behaniach z\u00e1\u0165a\u017eov\u00fdch testov mala na\u0161a datab\u00e1za ve\u013ekos\u0165 pribli\u017ene 155 GB, a pri zni\u017eovan\u00ed na in\u0161tanciu z 1 uzla sme dostali nasleduj\u00facu chybu:<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: dobr\u00e9, zl\u00e9, a \u0161kared\u00e9\" src=\"\/wp-content\/uploads\/2020\/02\/4a46c97e7943b5105bf178316dc67433.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodarilo sa n\u00e1m zn\u00ed\u017ei\u0165 \u0161k\u00e1lu z 25 na 2 in\u0161tancie, ale uviazli sme pri dvoch uzloch.<\/p>\n<p>Zv\u00fd\u0161enie a zn\u00ed\u017eenie po\u010dtu uzlov v clustre Cloud Spanner je mo\u017en\u00e9 automatizova\u0165 pomocou REST API. To m\u00f4\u017ee by\u0165 obzvl\u00e1\u0161\u0165 u\u017eito\u010dn\u00e9 na zn\u00ed\u017eenie zv\u00fd\u0161enej z\u00e1\u0165a\u017ee na syst\u00e9me po\u010das ru\u0161n\u00fdch hod\u00edn.<\/p>\n<h4>V\u00fdkon OLAP dotazov?<\/h4>\n<p>\nP\u00f4vodne sme pl\u00e1novali venova\u0165 zna\u010dn\u00fd \u010das na\u0161ej hodnoten\u00ed Spanneru tejto \u010dasti. Po nieko\u013ek\u00fdch SELECT COUNT sme okam\u017eite pochopili, \u017ee testovanie bude kr\u00e1tke a \u017ee Spanner NIE JE vhodn\u00fdm OLAP motorom. Nez\u00e1le\u017e\u00ed na po\u010dte uzlov v clustre, jednoduch\u00fd v\u00fdber po\u010dtu riadkov v tabu\u013eke s 10M riadkami trval od 55 do 60 sek\u00fand. Okrem toho ak\u00fdko\u013evek dotaz, ktor\u00fd si vy\u017eadoval v\u00e4\u010d\u0161\u00ed objem pam\u00e4te na ukladanie medzi v\u00fdsledkov, skon\u010dil s chybou OOM.<\/p>\n<p><code>SELECT COUNT(DISTINCT(field0)) FROM usertable; \u2014 (10M distinct values) -&gt; SpoolingHashAggregateIterator vy\u010derpal pam\u00e4\u0165 po\u010das nov\u00e9ho riadku.<\/code><\/p>\n<p>Niektor\u00e9 \u010d\u00edsla pre TPC-H dotazy mo\u017eno n\u00e1js\u0165 v \u010dl\u00e1nku Todda Lipk\u00f3na <noindex><a rel=\"nofollow\" href=\"https:\/\/kudu.apache.org\/2017\/10\/23\/nosql-kudu-spanner-slides.html\">Nosql-kudu-spanner-slides.html<\/a><\/noindex>, sn\u00edmky 42 a 43. Tieto \u010d\u00edsla s\u00fa v s\u00falade s na\u0161imi vlastn\u00fdmi v\u00fdsledkami (\u017eia\u013e).<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: dobr\u00e9, zl\u00e9, a \u0161kared\u00e9\" src=\"\/wp-content\/uploads\/2020\/02\/d070c839bbc62b1ba1bebbaf64127e93.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>4. Na\u0161e zistenia<\/h4>\n<p>\nVzh\u013eadom na s\u00fa\u010dasn\u00fd stav funkci\u00ed Cloud Spanner je \u0165a\u017ek\u00e9 predstavi\u0165 si jeho jednoduch\u00fa n\u00e1hradu za existuj\u00face OLTP rie\u0161enie, najm\u00e4 ke\u010f va\u0161e potreby prevy\u0161uj\u00fa jeho mo\u017enosti. Bolo by potrebn\u00e9 vynalo\u017ei\u0165 zna\u010dn\u00e9 mno\u017estvo \u010dasu na vybudovanie rie\u0161enia zoh\u013ead\u0148uj\u00faceho nedostatky Cloud Spanner.<\/p>\n<p>Ke\u010f sme za\u010dali hodnoti\u0165 Cloud Spanner, o\u010dak\u00e1vali sme, \u017ee jeho funkcie riadenia bud\u00fa na \u00farovni alebo aspo\u0148 nie tak vzdialen\u00e9 od in\u00fdch rie\u0161en\u00ed Google SQL. Ale boli sme prekvapen\u00ed \u00fapln\u00fdm nedostatkom z\u00e1loh a ve\u013emi obmedzenou kontrolou pr\u00edstupu k zdrojom. Nehovoriac o absencii poh\u013eadov, absencii miestneho v\u00fdvojov\u00e9ho prostredia, nepodporovan\u00fdch sekvenci\u00e1ch, JDBC bez podpory DML a DDL a tak \u010falej.<\/p>\n<p>\u010co teda robi\u0165, ak potrebujete \u0161k\u00e1lova\u0165 transak\u010dn\u00fa datab\u00e1zu? Zd\u00e1 sa, \u017ee na trhu zatia\u013e neexistuje jedin\u00e9 rie\u0161enie, ktor\u00e9 by vyhovovalo v\u0161etk\u00fdm mo\u017enostiam pou\u017eitia. Existuje mno\u017estvo rie\u0161en\u00ed s uzavret\u00fdm a otvoren\u00fdm zdrojov\u00fdm k\u00f3dom (niektor\u00e9 z nich s\u00fa spomenut\u00e9 v tomto \u010dl\u00e1nku), z ktor\u00fdch ka\u017ed\u00e9 m\u00e1 svoje siln\u00e9 a slab\u00e9 str\u00e1nky, ale \u017eiadne z nich nenab\u00edzaj\u00fa SaaS s SLA 99,999% a vysokou \u00farov\u0148ou konzistencie. Ak je vysok\u00e1 \u00farove\u0148 SLA va\u0161\u00edm hlavn\u00fdm cie\u013eom a nie ste naklonen\u00ed vybudova\u0165 vlastn\u00e9 rie\u0161enie pre viacer\u00e9 cloudov\u00e9 prostredia, Cloud Spanner by mohlo by\u0165 rie\u0161en\u00edm, ktor\u00e9 h\u013ead\u00e1te. Mus\u00edte v\u0161ak by\u0165 obozn\u00e1men\u00ed so v\u0161etk\u00fdmi jeho obmedzeniami.<\/p>\n<p>Na spravodlivos\u0165 treba poznamena\u0165, \u017ee Cloud Spanner bol spr\u00edstupnen\u00fd pre verejnos\u0165 iba na jar 2017, preto je rozumn\u00e9 o\u010dak\u00e1va\u0165, \u017ee niektor\u00e9 jeho s\u00fa\u010dasn\u00e9 nedostatky by mohli nakoniec zmizn\u00fa\u0165 (d\u00fafajme), a ke\u010f sa to stane, m\u00f4\u017ee to zmeni\u0165 pravidl\u00e1 hry. Napokon, Cloud Spanner nie je len ved\u013eaj\u0161\u00ed projekt pre Google. Google ho pou\u017e\u00edva ako z\u00e1klad pre in\u00e9 produkty Google. A ke\u010f Google ned\u00e1vno nahradil Megastore v Google Cloud Storage Cloud Spannerom, umo\u017enilo to Google Cloud Storage sta\u0165 sa pr\u00edsne konzistentn\u00fdm pre zoznamy objektov na celosvetovej \u00farovni (\u010do sa st\u00e1le net\u00fdka <noindex><a rel=\"nofollow\" href=\"https:\/\/cloudplatform.googleblog.com\/2018\/02\/how-Google-Cloud-Storage-offers-strongly-consistent-object-listing-thanks-to-Spanner.html\">Amazon\u2019s<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/cloudplatform.googleblog.com\/2018\/02\/how-Google-Cloud-Storage-offers-strongly-consistent-object-listing-thanks-to-Spanner.html\">S3<\/a><\/noindex>).<\/p>\n<p>Tak\u017ee n\u00e1dej st\u00e1le existuje\u2026 d\u00fafame.<\/p>\n<p>Na tomto konci. Rovnako ako autor \u010dl\u00e1nku, aj my na\u010falej d\u00fafame, a \u010do si o tom mysl\u00edte vy? Nap\u00ed\u0161te do koment\u00e1rov<\/p>\n<p><b>V\u0161etk\u00fdch z\u00e1ujemcov srde\u010dne poz\u00fdvame na na\u0161u <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">bezplatn\u00fd webin\u00e1r<\/a><\/noindex> v r\u00e1mci ktorej podrobne rozpr\u00e1vame o kurze<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\"> AWS pre v\u00fdvoj\u00e1rov<\/a><\/noindex> od OTUS.<\/b><br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/489012\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u043c\u044b \u043f\u0440\u0435\u0432\u0435\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u043e Google Cloud Spanner, \u043f\u0440\u0438\u0443\u0440\u043e\u0447\u0438\u0432 \u0435\u0435 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043a\u0443\u0440\u0441\u0430 \u00abAWS \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432\u00bb. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e \u0432 \u0431\u043b\u043e\u0433\u0435 Lightspeed HQ. \u041a\u0430\u043a \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 POS-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0440\u043e\u0437\u043d\u0438\u0447\u043d\u044b\u0445 \u0442\u043e\u0440\u0433\u043e\u0432\u0446\u0435\u0432, \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u0440\u043e\u0434\u0430\u0432\u0446\u043e\u0432 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443, Lightspeed \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":69569,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-69568","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=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0432.\" \/>\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\/sk\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\udd47Google Cloud Spanner: \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u043f\u043b\u043e\u0445\u043e\u0439, \u0437\u043b\u043e\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj\" \/>\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-02-20T12:24:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:50+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\udd47Google Cloud Spanner: dobr\u00fd, zl\u00fd, \u0161kared\u00fd | ProHoster","description":"Ahoj, Habr\u00e1ci. Tradi\u010dne pokra\u010dujeme v zdie\u013ean\u00ed zauj\u00edmav\u00e9ho materi\u00e1lu pred za\u010diatkom nov\u00fdch kurzov.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\udd47Google Cloud Spanner: \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u043f\u043b\u043e\u0445\u043e\u0439, \u0437\u043b\u043e\u0439 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0432.","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","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-02-20T12:24:23+00:00","article:modified_time":"2020-03-03T13:14:50+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"69568","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 19:20:25","updated":"2022-09-30 15:10:07","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/69568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=69568"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/69568\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/69569"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=69568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=69568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=69568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}