{"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\/lv\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","title":{"rendered":"Google Cloud Spanner: labs, slikts, \u0161ausm\u012bgs","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>Sveiki, Habr\u0101! Tradicion\u0101li turpin\u0101m dal\u012bties ar interesantu materi\u0101lu pirms jauno kursu uzs\u0101k\u0161anas. \u0160odien \u012bpa\u0161i jums esam tulkoju\u0161i rakstu par Google Cloud Spanner, saistot to ar kursa uzs\u0101k\u0161anu. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">\u00abAWS izstr\u0101d\u0101t\u0101jiem\u00bb<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: labs, slikts, \u0161ausm\u012bgs\" src=\"\/wp-content\/uploads\/2020\/02\/b27b8a09543d10b078480c317553ca46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>S\u0101kotn\u0113ji public\u0113ts <noindex><a rel=\"nofollow\" href=\"https:\/\/www.lightspeedhq.com\/blog\/\">blog\u0101 Lightspeed HQ<\/a><\/noindex>.<\/i><\/p>\n<p>K\u0101 uz\u0146\u0113mums, kas pied\u0101v\u0101 daudzus m\u0101kon\u012b balst\u012btus POS risin\u0101jumus mazumtirgot\u0101jiem, restor\u0101niem un tie\u0161saistes p\u0101rdev\u0113jiem vis\u0101 pasaul\u0113, Lightspeed izmanto vair\u0101kus da\u017e\u0101dus datub\u0101zu platformu veidus, lai apstr\u0101d\u0101tu daudzus transakciju, anal\u012btiskos un mekl\u0113\u0161anas gad\u012bjumus. Katra no \u0161\u012bm datub\u0101zu platform\u0101m ir ar sav\u0101m priek\u0161roc\u012bb\u0101m un tr\u016bkumiem. T\u0101d\u0113j\u0101di, kad Google ieviesa tirg\u016b Cloud Spanner \u2014 sol\u012bgas funkcijas, kas nav redz\u0113tas rel\u0101ciju datub\u0101zu pasaul\u0113, piem\u0113ram, praktiski neierobe\u017eota horizont\u0101l\u0101 m\u0113rogojam\u012bba un 99,999% pakalpojumu l\u012bmenis (SLA) \u2014 m\u0113s nevar\u0113j\u0101m palaist gar\u0101m iesp\u0113ju to ieg\u016bt sav\u0101s rok\u0101s!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLai sniegtu visaptvero\u0161u p\u0101rskatu par m\u016bsu pieredzi ar Cloud Spanner, k\u0101 ar\u012b v\u0113rt\u0113\u0161anas krit\u0113rijiem, kurus m\u0113s izmantoj\u0101m, m\u0113s apskat\u012bsim \u0161\u0101das t\u0113mas:<\/p>\n<ol>\n<li>M\u016bsu v\u0113rt\u0113\u0161anas krit\u0113riji<\/li>\n<li>Cloud Spanner divos v\u0101rdos<\/li>\n<li>M\u016bsu v\u0113rt\u0113jums<\/li>\n<li>M\u016bsu secin\u0101jumi<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Google Cloud Spanner: labs, slikts, \u0161ausm\u012bgs\" src=\"\/wp-content\/uploads\/2020\/02\/29ed599362fb189283faa9215c18297a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>1. M\u016bsu v\u0113rt\u0113\u0161anas krit\u0113riji<\/h2>\n<p>\nPirms iegremd\u0113jamies Cloud Spanner funkcij\u0101s, t\u0101s l\u012bdz\u012bb\u0101s un at\u0161\u0137ir\u012bb\u0101s ar citiem risin\u0101jumiem tirg\u016b, vispirms run\u0101sim par galvenajiem lieto\u0161anas gad\u012bjumiem, kurus m\u0113s uzsv\u0113r\u0101m, apsverot, kur izvietot Cloud Spanner m\u016bsu infrastrukt\u016br\u0101:<\/p>\n<ul>\n<li>K\u0101 (domin\u0113jo\u0161s) tradicion\u0101l\u0101 SQL datub\u0101zu risin\u0101juma aizst\u0101j\u0113js<\/li>\n<li>K\u0101 OLTP risin\u0101jums ar OLAP atbalstu<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i><b>Piez\u012bme:<\/b> Lai vienk\u0101r\u0161otu un atvieglotu sal\u012bdzin\u0101\u0161anu, \u0161is raksts sal\u012bdzina Cloud Spanner ar MySQL variantiem GCP Cloud SQL un Amazon AWS RDS risin\u0101jumu \u0123imen\u0113.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h4>Cloud Spanner izmanto\u0161ana k\u0101 tradicion\u0101l\u0101 SQL datub\u0101zu risin\u0101juma aizst\u0101j\u0113js<\/h4>\n<p>\nVide <i>tradicion\u0101l\u0101s <\/i>datub\u0101z\u0113s, kad piepras\u012bjumu atbildes laiks tuvojas vai pat p\u0101rsniedz iepriek\u0161 noteikt\u0101s lietojumprogrammas slodzes robe\u017eas (galvenok\u0101rt palielin\u0101to lietot\u0101ju un\/vai piepras\u012bjumu d\u0113\u013c), past\u0101v vair\u0101ki veidi, k\u0101 samazin\u0101t atbildes laiku l\u012bdz pie\u0146emamiem l\u012bme\u0146iem. Tom\u0113r liel\u0101k\u0101 da\u013ca no \u0161iem risin\u0101jumiem prasa roku iejauk\u0161anos.<\/p>\n<p>Piem\u0113ram, pirmais solis, kas j\u0101dara, ir apl\u016bkot da\u017e\u0101dus datu b\u0101zu parametrus, kas saist\u012bti ar veiktsp\u0113ju, un piel\u0101got tos t\u0101, lai tie vislab\u0101k atbilstu lietojumprogrammu izmanto\u0161anas mode\u013ciem. Ja tas izr\u0101d\u012bsies nepietiekami, var izv\u0113l\u0113ties datu b\u0101zes vertik\u0101lo vai horizont\u0101lo papla\u0161in\u0101\u0161anu.<\/p>\n<p>Vertik\u0101l\u0101 papla\u0161in\u0101\u0161ana noz\u012bm\u0113 servera instance atjaunin\u0101\u0161anu, parasti pievienojot vair\u0101k procesoru\/ kodolu, liel\u0101ku operat\u012bvo atmi\u0146u, \u0101tr\u0101ku uzglab\u0101\u0161anu utt. Papildu aparat\u016bras resursu pievieno\u0161ana palielina datu b\u0101zes veiktsp\u0113ju, ko galvenok\u0101rt m\u0113ra dar\u012bjumu skait\u0101 sekund\u0113 un dar\u012bjumu aizturi OLTP sist\u0113m\u0101m. Rel\u0101ciju datu b\u0101zu sist\u0113mas (kuras izmanto vair\u0101ku pavedienu pieeju), piem\u0113ram, MySQL, labi papla\u0161in\u0101s vertik\u0101li.<\/p>\n<p>\u0160ai pieejai ir vair\u0101ki tr\u016bkumi, bet ac\u012bmredzam\u0101kais ir maksim\u0101lais servera izm\u0113rs tirg\u016b. Kad ir sasniegts visliel\u0101k\u0101 servera instance limits, vien\u012bg\u0101 iesp\u0113ja ir horizont\u0101l\u0101 papla\u0161in\u0101\u0161ana.<\/p>\n<p>Horizont\u0101l\u0101 papla\u0161in\u0101\u0161ana ir pieeja, kur\u0101 klasteriem pievieno vair\u0101k serveru, lai ide\u0101li line\u0101ri palielin\u0101tu veiktsp\u0113ju ar palielin\u0101tu serveru skaitu. Vair\u0101kums <i>tradicion\u0101l\u0101s <\/i>datub\u0101zu sist\u0113mu slikti papla\u0161in\u0101s horizont\u0101li vai visp\u0101r neprasa papla\u0161in\u0101\u0161anu. Piem\u0113ram, MySQL var horizont\u0101li papla\u0161in\u0101t las\u012b\u0161anas darb\u012bb\u0101m, pievienojot slave-nolas\u012bt\u0101jus, bet nevar horizont\u0101li papla\u0161in\u0101t rakst\u012b\u0161anas darb\u012bb\u0101m.<\/p>\n<p>Savuk\u0101rt, pateicoties savai b\u016bt\u012bbai, Cloud Spanner var viegli papla\u0161in\u0101ties horizont\u0101li ar minim\u0101lu iejauk\u0161anos.<\/p>\n<p>Piln\u012bb\u0101 funkcion\u0101la<i> DB k\u0101 pakalpojums<\/i> j\u0101nov\u0113rt\u0113 no da\u017e\u0101diem aspektiem. M\u016bsu pamats bija popul\u0101r\u0101k\u0101 m\u0101ko\u0146a datu b\u0101ze \u2014 Google GCP Cloud SQL un Amazon AWS RDS. M\u016bsu nov\u0113rt\u0113jums koncentr\u0113j\u0101s uz \u0161\u0101d\u0101m kategorij\u0101m:<\/p>\n<ul>\n<li>Funkciju sal\u012bdzin\u0101\u0161ana: SQL apjoms, DDL, DML; savienojumu bibliot\u0113kas \/ savienot\u0101ji, dar\u012bjumu atbalsts utt.<\/li>\n<li>Izstr\u0101des atbalsts: izstr\u0101des un test\u0113\u0161anas vienk\u0101r\u0161\u012bba.<\/li>\n<li>Administrat\u012bv\u0101s atbalsta funkcijas: instan\u010du p\u0101rvald\u012bba \u2013 piem\u0113ram, m\u0113rogo\u0161ana uz aug\u0161u\/uz leju un instan\u010du uzlabojums; SLA, dubl\u0113\u0161ana un atjauno\u0161ana; dro\u0161\u012bba\/kontrol\u0113\u0161anas piek\u013cuve.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Cloud Spanner izmanto\u0161ana k\u0101 OLTP risin\u0101jums ar OLAP atbalstu<\/h4>\n<p>\nLai gan Google ac\u012bmredzami nev\u0113las apgalvot, ka Cloud Spanner ir paredz\u0113ts anal\u012btiskai apstr\u0101dei, tam ir da\u017eas kop\u012bgas \u012bpa\u0161\u012bbas ar cit\u0101m sist\u0113m\u0101m, piem\u0113ram, Apache Impala &amp; Kudu un YugaByte, kas paredz\u0113tas OLAP darba slodz\u0113m.<\/p>\n<p>Pat ja past\u0101v\u0113tu tikai neliela iesp\u0113ja, ka Cloud Spanner ir iek\u013caujis horizont\u0101li m\u0113rogojamu HTAP (hibr\u012bd\u0101s transakciju\/anal\u012btisk\u0101s apstr\u0101des) motoru ar (vair\u0101k vai maz\u0101k) noder\u012bgu OLAP funkcionalit\u0101ti, m\u0113s dom\u0101jam, ka tas b\u016btu peln\u012bjis m\u016bsu uzman\u012bbu.<\/p>\n<p>\u0145emot to v\u0113r\u0101, m\u0113s apskat\u012bj\u0101m \u0161\u0101das kategorijas:<\/p>\n<ul>\n<li>Datu iel\u0101de, indeks\u0113\u0161ana un partiz\u0113\u0161anas atbalsts<\/li>\n<li>Vaic\u0101jumu veiktsp\u0113ja un DML<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Cloud Spanner divos v\u0101rdos<\/h2>\n<p>\nGoogle Spanner ir klastera rel\u0101ciju datu b\u0101zes p\u0101rvald\u012bbas sist\u0113ma (RDPS), ko Google izmanto vair\u0101ku savu pakalpojumu nodro\u0161in\u0101\u0161anai. Google padar\u012bja to publiski pieejamu Google Cloud Platform lietot\u0101jiem 2017. gada s\u0101kum\u0101.<\/p>\n<p>\u0160eit ir da\u017ei Cloud Spanner atrib\u016bti:<\/p>\n<ul>\n<li>Sp\u0113c\u012bga sinhroniz\u0113ta, m\u0113rogojama klastera RDPS: izmanto aparat\u016bras laika sinhroniz\u0101ciju, lai nodro\u0161in\u0101tu datu saska\u0146ot\u012bbu.<\/li>\n<li>Atbalsts starp tabul\u0101m veiktajiem dar\u012bjumiem: dar\u012bjumi var aptvert vair\u0101kas tabulas, neierobe\u017eojoties tikai ar vienu tabulu (at\u0161\u0137ir\u012bb\u0101 no Apache HBase vai Apache Kudu).<\/li>\n<li>Tabulas, kas balst\u012btas uz prim\u0101ro atsl\u0113gu: vis\u0101m tabul\u0101m j\u0101b\u016bt deklar\u0113tai prim\u0101jai atsl\u0113gai (PA), kas var sast\u0101v\u0113t no vair\u0101kiem tabulas kolonn\u0101m. Tabulas dati tiek glab\u0101ti PA sec\u012bb\u0101, kas padara tos \u013coti efekt\u012bvus un \u0101trus mekl\u0113\u0161anai p\u0113c PA. K\u0101 cit\u0101m sist\u0113m\u0101m, kas balst\u012btas uz PA, ievie\u0161anai j\u0101b\u016bt mode\u013c\u0113tai, \u0146emot v\u0113r\u0101 iepriek\u0161 izstr\u0101d\u0101tus lieto\u0161anas gad\u012bjumus, lai pan\u0101ktu <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/schema-and-data-model\">lab\u0101ko veiktsp\u0113ju<\/a><\/noindex>.<\/li>\n<li>Main\u012bt\u0101s tabulas: tabul\u0101m var b\u016bt fiziskas atkar\u012bbas viena no otras. Apak\u0161tabulas rindas var tikt sasaist\u012btas ar vec\u0101ku tabulas rind\u0101m. \u0160\u0101da pieeja pa\u0101trina attiec\u012bbu mekl\u0113\u0161anu, kas var tikt defin\u0113ta datu model\u0113\u0161anas posm\u0101, piem\u0113ram, kop\u0113jo klientu un vi\u0146u r\u0113\u0137inu novietojum\u0101.<\/li>\n<li>Indeksi: Cloud Spanner atbalsta sekund\u0101ros indeksus. Indekss sast\u0101v no indeks\u0113tajiem laukiem un visiem PK laukiem. Ja v\u0113las, indekss var satur\u0113t ar\u012b citus neindeks\u0113tus laukus. Indekss var b\u016bt sav\u012bts ar vec\u0101ku tabulu, lai pa\u0101trin\u0101tu piepras\u012bjumus. Indeksam tiek piem\u0113roti vair\u0101ki ierobe\u017eojumi, piem\u0113ram, maksim\u0101lais papildu lauku skaits, kas saglab\u0101ts indeks\u0101. Ar\u012b piepras\u012bjumi caur indekso\u0161anas ce\u013ciem var neb\u016bt tik tie\u0161i k\u0101 cit\u0101s RDBMS.<\/li>\n<\/ul>\n<p>\n<i>\u201eCloud Spanner autom\u0101tiski izv\u0113las indeksu tikai retos gad\u012bjumos. \u012apa\u0161i, ja piepras\u012bjums pieprasa k\u0101dus laukus, kas nav saglab\u0101ti <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/secondary-indexes\">indeks\u0101 <\/a><\/noindex>\u00bb.<\/i><\/p>\n<ul>\n<li>Pakalpojuma l\u012bgums (SLA): izvietojums vien\u0101 re\u0123ion\u0101 ar SLA 99,99%; vair\u0101ku re\u0123ionu izvietojumi ar SLA 99,999%. Lai ar\u012b pats pakalpojuma l\u012bgums ir tikai vieno\u0161an\u0101s, nevis k\u0101da garantija, man \u0161\u0137iet, ka Google darbiniekiem patie\u0161\u0101m ir prec\u012bzi dati, lai izdar\u012btu \u0161\u0101du nopietnu apgalvojumu. (Piem\u0113ram, 99,999% noz\u012bm\u0113 26,3 sekundes pakalpojuma nepieejam\u012bbas m\u0113nes\u012b.)<\/li>\n<li>Vair\u0101k: <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>Piez\u012bme:<\/b> Apache Tephra projekts pievieno papla\u0161in\u0101tu dar\u012bjumu atbalstu Apache HBase (tagad ar\u012b \u012bstenots Apache Phoenix k\u0101 beta versija).<\/i><\/p><\/blockquote>\n<p><\/p>\n<h2>3. M\u016bsu nov\u0113rt\u0113jums<\/h2>\n<p>\nT\u0101tad, m\u0113s visi esam izlas\u012bju\u0161i Googles apgalvojumus par Cloud Spanner priek\u0161roc\u012bb\u0101m \u2014 gandr\u012bz neierobe\u017eota horizont\u0101l\u0101 m\u0113rogojam\u012bba, saglab\u0101jot augstu saska\u0146ot\u012bbu un \u013coti augstu SLA. Lai ar\u012b \u0161os pras\u012bjumus ir \u0101rk\u0101rt\u012bgi gr\u016bti sasniegt, m\u016bsu m\u0113r\u0137is nebija tos apstr\u012bd\u0113t. T\u0101 viet\u0101 koncentr\u0113simies uz citiem aspektiem, kas satrauc liel\u0101ko da\u013cu datu b\u0101zu lietot\u0101ju: lieto\u0161anas \u0113rtumu.<\/p>\n<h4>M\u0113s nov\u0113rt\u0113j\u0101m Cloud Spanner k\u0101 Sharded MySQL aizst\u0101j\u0113ju.<\/h4>\n<p>\nGoogle Cloud SQL un Amazon AWS RDS, divas popul\u0101r\u0101k\u0101s OLTP datub\u0101zes m\u0101ko\u0146u tirg\u016b, pied\u0101v\u0101 \u013coti pla\u0161u funkciju kopumu. Tom\u0113r, lai papla\u0161in\u0101tu \u0161\u012bs datub\u0101zes \u0101rpus vienas mezgla lieluma, jums ir j\u0101veic aplik\u0101ciju sadal\u012b\u0161ana. \u0160\u0101ds pieejas veids rada papildu sare\u017e\u0123\u012bjumus gan aplik\u0101cij\u0101m, gan administr\u0113\u0161anai. M\u0113s apl\u016bkoj\u0101m, k\u0101 Spanner iederas scen\u0101rij\u0101, apvienojot vair\u0101kus segmentus vien\u0101 instanc\u0113, un k\u0101das funkcijas (ja t\u0101das past\u0101v), iesp\u0113jams, n\u0101ksies upur\u0113t.<\/p>\n<h4>Atbalsts SQL, DML un DDL, k\u0101 ar\u012b savienot\u0101js un bibliot\u0113kas?<\/h4>\n<p>\nPirmk\u0101rt, uzs\u0101kot darbu ar jebkuru datub\u0101zi, ir j\u0101izveido datu modelis. Ja dom\u0101jat, ka varat piesl\u0113gt JDBC Spanner pie sava iecien\u012bt\u0101 SQL r\u012bka, j\u016bs atkl\u0101siet, ka varat veikt piepras\u012bjumus uz saviem datiem, bet nevarat to izmantot tabulu izveidei vai izmai\u0146\u0101m (DDL) vai jebkurai ievieto\u0161anas\/atjaunin\u0101\u0161anas\/dz\u0113\u0161anas oper\u0101cijai (DML). Ofici\u0101lais Google JDBC neatbalsta nevienu no tiem.<\/p>\n<blockquote><p><i>\u00abPa\u0161laik draiveri neatbalsta DML vai DDL operatorus\u00bb.<\/i><br \/>\nSpanner dokument\u0101cija<\/p><\/blockquote>\n<p>\nAr GCP konsoli situ\u0101cija nav lab\u0101ka \u2014 varat izs\u016bt\u012bt tikai SELECT piepras\u012bjumus. Par laimi, ir pieejams DML un DDL atbalsto\u0161s JDBC draiveris no kopienas, kas iek\u013cauj transakcijas. <noindex><a rel=\"nofollow\" href=\"http:\/\/github.com\/olavloite\/spanner-jdbc\">github.com\/olavloite\/spanner-jdbc<\/a><\/noindex>. Lai gan \u0161is draiveris ir \u0101rk\u0101rt\u012bgi noder\u012bgs, Google tr\u016bkums ar savu JDBC draiveri p\u0101rsteidz. Par laimi, Google pied\u0101v\u0101 diezgan pla\u0161u klientu bibliot\u0113ku atbalstu (balstoties uz gRPC): C#, Go, Java, node.js, PHP, Python un Ruby.<\/p>\n<p>Tehnolo\u0123iski oblig\u0101t\u0101 Cloud Spanner piel\u0101goto API izmanto\u0161ana (DML un DDL tr\u016bkuma d\u0113\u013c JDBC) ierobe\u017eo ar to saist\u012btos koda apgabalus, piem\u0113ram, savienojumu baseinus vai datub\u0101zes saist\u012b\u0161anas ietvarus (piem\u0113ram, Spring MVC). Parasti, izmantojot JDBC, varat br\u012bvi izv\u0113l\u0113ties m\u012b\u013c\u0101ko savienojumu baseinu (piem\u0113ram, HikariCP, DBCP, C3PO utt.), kas ir p\u0101rbaud\u012bts un labi darbojas. Piel\u0101goto API Spanner gad\u012bjum\u0101 mums j\u0101pa\u013caujas uz ietvariem\/saist\u012b\u0161anas\/pakalpojumu baseiniem, kurus esam rad\u012bju\u0161i pa\u0161i.<\/p>\n<p>S\u0101nu veido\u0161ana, kas orient\u0113ta uz prim\u0101ro atsl\u0113gu (PK), \u013cauj Cloud Spanneri b\u016bt \u013coti \u0101tram datu piek\u013cuves gad\u012bjumos, izmantojot PK, bet ar\u012b rada da\u017eas probl\u0113mas ar vaic\u0101jumiem.<\/p>\n<ul>\n<li>J\u016bs nevarat atjaunin\u0101t prim\u0101r\u0101 atsl\u0113ga v\u0113rt\u012bbu; vispirms j\u0101izdz\u0113\u0161 ieraksts ar ori\u0123in\u0101lo PA un j\u0101ievieto tas atk\u0101rtoti ar jauno v\u0113rt\u012bbu. (Tas ir l\u012bdz\u012bgi cit\u0101m PA orient\u0113t\u0101m datub\u0101z\u0113m\/uzglab\u0101\u0161anas meh\u0101nismiem.)<\/li>\n<li>Visiem UPDATE un DELETE operatoriem j\u0101nor\u0101da PA WHERE, t\u0101d\u0113\u013c nevar b\u016bt tuk\u0161iem DELETE all operatoriem \u2014 vienm\u0113r j\u0101b\u016bt apak\u0161vaic\u0101jumam, piem\u0113ram: UPDATE xxx WHERE id IN (SELECT id FROM table1)<\/li>\n<li>Tr\u016bkst autoinkrement\u0101cijas opcijas vai kaut k\u0101 l\u012bdz\u012bga, kas nosaka sec\u012bbu PA laukam. Lai tas darbotos, attiec\u012bg\u0101 v\u0113rt\u012bba j\u0101sagatavo lietojumprogrammas pus\u0113.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Otrie indeksi?<\/h4>\n<p>\nGoogle Cloud Spanner nodro\u0161ina ieb\u016bv\u0113tu atbalstu otrajiem indeksi. Tas ir \u013coti jauks papildin\u0101jums, kas ne vienm\u0113r ir pieejams cit\u0101s tehnolo\u0123ij\u0101s. Apache Kudu \u0161obr\u012bd visp\u0101r neatbalsta otros indeksus, bet Apache HBase tie netiek atbalst\u012bti tie\u0161i, bet var tikt pievienoti caur Apache Phoenix.<\/p>\n<p>Indekus Kudu un HBase var model\u0113t k\u0101 atsevi\u0161\u0137u tabulu ar at\u0161\u0137ir\u012bgu prim\u0101ro atsl\u0113gu sast\u0101vu, bet atomarit\u0101te oper\u0101cij\u0101m, kas tiek veiktas ar vec\u0101ku tabulu un saist\u012btaj\u0101m indeksu tabul\u0101m, j\u0101dara lietojumprogrammas l\u012bmen\u012b un nav triviala pareiz\u0101 \u012bstenojum\u0101.<\/p>\n<p>K\u0101 min\u0113ts Cloud Spanner apskat\u0101, t\u0101 indeksiem var b\u016bt at\u0161\u0137ir\u012bbas no MySQL indeksiem. T\u0101d\u0113\u013c raksturojot vaic\u0101jumus un profilu, ir j\u0101b\u016bt \u012bpa\u0161i piesardz\u012bgiem, lai nodro\u0161in\u0101tu, ka tiek izmantots atbilsto\u0161s indekss, kur tas nepiecie\u0161ams.<\/p>\n<h4>Skati?<\/h4>\n<p>\n\u013boti popul\u0101rs un noder\u012bgs objekts datub\u0101z\u0113 ir skati. Tie var b\u016bt noder\u012bgi daudzos lieto\u0161anas gad\u012bjumos; divi mani favor\u012bti ir lo\u0123isk\u0101s abstrakcijas l\u012bmenis un dro\u0161\u012bbas l\u012bmenis. Diem\u017e\u0113l Cloud Spanner NEatbalsta skatus. Tom\u0113r tas m\u016bs ierobe\u017eo tikai da\u013c\u0113ji, jo piek\u013cuves ties\u012bb\u0101m nav kolonnu l\u012bme\u0146a detaliz\u0101cijas, kur skati var\u0113tu b\u016bt pie\u0146emams risin\u0101jums.<\/p>\n<p>Cloud Spanner dokument\u0101cij\u0101 sada\u013c\u0101, kur detaliz\u0113ti aprakst\u012btas kvotas un ierobe\u017eojumi (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/quotas\">spanner\/quotas<\/a><\/noindex>), ir ir, jo vid\u016b ir viena, kas var b\u016bt problem\u0101tiska da\u017e\u0101m lietotn\u0113m: Cloud Spanner noklus\u0113juma iestat\u012bjumos ir ierobe\u017eojums l\u012bdz 100 datub\u0101z\u0113m vien\u0101 instanc\u0113. Ac\u012bmredzami tas var k\u013c\u016bt par nopietnu \u0161\u0137\u0113rsli datub\u0101zei, kas paredz\u0113ta m\u0113rogo\u0161anai uz vair\u0101k nek\u0101 100 datub\u0101z\u0113m. Par laimi, p\u0113c sarunas ar m\u016bsu Google tehnisko p\u0101rst\u0101vi m\u0113s uzzin\u0101j\u0101m, ka \u0161o ierobe\u017eojumu var palielin\u0101t praktiski l\u012bdz jebkurai v\u0113rt\u012bbai, izmantojot Google atbalsta dienestu.<\/p>\n<h4>Atbalsts izstr\u0101dei?<\/h4>\n<p>\nCloud Spanner pied\u0101v\u0101 diezgan piekl\u0101j\u012bgu programm\u0113\u0161anas valodu atbalstu darbam ar t\u0101s API. Ofici\u0101li atbalst\u012bt\u0101s bibliot\u0113kas ir C#, Go, Java, node.js, PHP, Python un Ruby. Dokument\u0101cija ir pietiekami detaliz\u0113ta, ta\u010du, k\u0101 tas ir ar cit\u0101m novatorisk\u0101m tehnolo\u0123ij\u0101m, kopiena ir diezgan maza sal\u012bdzin\u0101jum\u0101 ar popul\u0101r\u0101kaj\u0101m datub\u0101zu tehnolo\u0123ij\u0101m, kas var palielin\u0101t laiku, kas nepiecie\u0161ams, lai atrisin\u0101tu maz\u0101k izplat\u012btas lietojuma vai probl\u0113mas.<\/p>\n<h4>K\u0101 tad ir ar lok\u0101l\u0101s izstr\u0101des atbalstu?<\/h4>\n<p>\nM\u0113s neatrad\u0101m veidu, k\u0101 izveidot Cloud Spanner instanci lok\u0101l\u0101 vid\u0113. Vislab\u0101kais, ko m\u0113s ieguv\u0101m, bija Docker att\u0113ls. <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/cockroachdb\/cockroach\">CockroachDB<\/a><\/noindex>, kas princip\u0101 ir l\u012bdz\u012bgs, ta\u010du praks\u0113 ir iev\u0113rojami at\u0161\u0137ir\u012bgs. Piem\u0113ram, CockroachDB var izmantot PostgreSQL JDBC. T\u0101 k\u0101 izstr\u0101des videi j\u0101b\u016bt p\u0113c iesp\u0113jas tuv\u0101k darb\u012bbai, Cloud Spanner nav ide\u0101ls, jo j\u0101pa\u013caujas uz pilnu Spanner instance. Lai samazin\u0101tu izmaksas, varat izv\u0113l\u0113ties instanci vien\u0101 re\u0123ion\u0101.<\/p>\n<h4>Administr\u0113\u0161anas atbalsts?<\/h4>\n<p>\nIzveidot Cloud Spanner instanci ir \u013coti vienk\u0101r\u0161i. J\u016bsu j\u0101izv\u0113las tikai starp multimod\u0101l\u0101 vai viena re\u0123iona instanci, j\u0101nor\u0101da re\u0123ions(-i) un mezglu skaits. Maz\u0101k nek\u0101 min\u016btes laik\u0101 instancia tiks palaista un gatava darbam.<\/p>\n<p>Da\u017eas pamata metrikas ir tie\u0161i pieejamas Spanner lap\u0101 Google konsol\u0113. Detaliz\u0113t\u0101kus skatus var ieg\u016bt caur Stackdriver, kur varat ar\u012b iestat\u012bt metrikas slieks\u0146us un br\u012bdin\u0101juma politikas.<\/p>\n<h4>Piek\u013cuve resursiem?<\/h4>\n<p>\nMySQL pied\u0101v\u0101 pla\u0161as un \u013coti detaliz\u0113tas lietot\u0101ju at\u013cauju\/rolu iestat\u012b\u0161anas iesp\u0113jas. Ir viegli iestat\u012bt piek\u013cuvi noteiktai tabulai vai pat tikai t\u0101s da\u013cai no kolonn\u0101m. Cloud Spanner izmanto Google Identity &amp; Access Management (IAM) r\u012bku, kas \u013cauj noteikt politiku un at\u013caujas tikai \u013coti augst\u0101 l\u012bmen\u012b. Visdetaliz\u0113t\u0101kais variants ir datub\u0101zes l\u012bme\u0146a at\u013cauja, kas liel\u0101kaj\u0101 da\u013c\u0101 ra\u017eo\u0161anas gad\u012bjumu nesaskan. \u0160is ierobe\u017eojums liek jums papildus nodro\u0161in\u0101t dro\u0161\u012bbas pas\u0101kumus sav\u0101 kod\u0101, infrastrukt\u016br\u0101 vai abos, lai nov\u0113rstu neat\u013cautu Spanner resursu izmanto\u0161anu.<\/p>\n<h4>Dubl\u0113jumi?<\/h4>\n<p>\nVienk\u0101r\u0161i sakot, Cloud Spanner nav dubl\u0113jumu. Lai ar\u012b augstie Google SLA pras\u012bbas var garant\u0113t, ka j\u016bs nepazaud\u0113siet datus aparat\u016bras vai datub\u0101zes k\u013c\u016bdu d\u0113\u013c, no cilv\u0113ka k\u013c\u016bd\u0101m, programmat\u016bras defektiem utt. M\u0113s visi zin\u0101m noteikumu: augsta pieejam\u012bba neaizst\u0101j sapr\u0101t\u012bgu dubl\u0113\u0161anas strat\u0113\u0123iju. Pa \u0161o br\u012bdi vien\u012bgais veids, k\u0101 dubl\u0113t datus, ir programmat\u016bras pl\u016bsmas p\u0101rs\u016bt\u012b\u0161ana no datub\u0101zes uz atsevi\u0161\u0137u uzglab\u0101\u0161anas vidi.<\/p>\n<h4>Vaic\u0101jumu veiktsp\u0113ja?<\/h4>\n<p>\nDatu iel\u0101dei un vaic\u0101jumu test\u0113\u0161anai m\u0113s izmantoj\u0101m Yahoo! Cloud Serving Benchmark. T\u0101l\u0101k eso\u0161aj\u0101 tabul\u0101 ir par\u0101d\u012bta B YCSB darba slodze ar 95% las\u012b\u0161anas un 5% rakst\u012b\u0161anas attiec\u012bbu.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: labs, slikts, \u0161ausm\u012bgs\" src=\"\/wp-content\/uploads\/2020\/02\/8fca14875af33c8ed3cd04b602c52b78.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Slodzes tests tika veikts uz skait\u013co\u0161anas dzin\u0113ja (CE) n1-standard-32 (32 vCPU, 120 GB atmi\u0146as), un test\u0113\u0161anas instances nekad nebija \u0161aurs posms testos.<\/i><br \/>\n<i>** Maksim\u0101lais pavedienu skaits vien\u0101 YCSB instanc\u0113 ir 400. Kopum\u0101 bija j\u0101uzs\u0101k se\u0161i paral\u0113li YCSB testu instance, lai ieg\u016btu kopum\u0101 2400 pavedienus.<\/i><\/p>\n<p>Apskatot testu rezult\u0101tus, \u012bpa\u0161i procesora slodzes un TPS kombin\u0101ciju, m\u0113s skaidri redzam, ka Cloud Spanner diezgan labi iesp\u0113jo. Liela slodze, ko rada liels skaits pavedienu, tiek kompens\u0113ta ar lielu mezglu skaitu Cloud Spanner klaster\u012b. Lai gan aizture izskat\u0101s diezgan augsta, \u012bpa\u0161i str\u0101d\u0101jot ar 2400 pavedieniem, prec\u012bz\u0101ku skait\u013cu ieg\u016b\u0161anai var b\u016bt nepiecie\u0161ams atk\u0101rtoti p\u0101rbaud\u012bt ar 6 maz\u0101kiem skait\u013co\u0161anas dzin\u0113jiem. Katrs dzin\u0113js veiks vienu YCSB testu, nevis vienu lielu CE instanci ar 6 paral\u0113liem testiem. T\u0101d\u0113j\u0101di b\u016bs viegl\u0101k at\u0161\u0137irt Cloud Spanner piepras\u012bjumu aizturi un aizturi, ko pievieno t\u012bkla savienojums starp Cloud Spanner un CE instanci, kur\u0101 tiek veikts tests.<\/p>\n<h3>K\u0101 Cloud Spanner darbojas k\u0101 OLAP?<\/h3>\n<p><\/p>\n<h4>Particion\u0113\u0161ana?<\/h4>\n<p>\nDatu sadal\u012b\u0161ana fiziski un\/vai lo\u0123iski neatkar\u012bgos segmentos, ko sauc par partikcij\u0101m, ir \u013coti popul\u0101ra koncepcija, kas rakstur\u012bga liel\u0101kajai da\u013cai OLAP meh\u0101nismu. Partikcijas var iev\u0113rojami uzlabot piepras\u012bjumu veiktsp\u0113ju un datu b\u0101zes uztur\u0113jam\u012bbu. Turpm\u0101ka izp\u0113te par partikcij\u0101m prasa atsevi\u0161\u0137u rakstu, t\u0101d\u0113\u013c piemin\u0113sim tikai partciju un sub-particiju sh\u0113mas noz\u012bmi. Iesp\u0113ja dal\u012bt datus partcij\u0101s un pat t\u0101l\u0101k sub-particij\u0101s ir atsl\u0113ga anal\u012btisko piepras\u012bjumu veiktsp\u0113jai.<\/p>\n<p>Cloud Spanner neatbalsta partcijas k\u0101 t\u0101das. Tas sadala datus iek\u0161\u0113ji, izmantojot t\u0101 sauktos <i>split<\/i>-us, kas balst\u012bti uz prim\u0101ro atsl\u0113gu diapazoniem. Sadal\u012b\u0161ana tiek veikta autom\u0101tiski, lai l\u012bdzsvarotu slodzi Cloud Spanner klaster\u012b. Viena \u013coti noder\u012bga funkcija Cloud Spanner ir pamat\u0101 eso\u0161\u0101s slodzes sadal\u012b\u0161ana vec\u0101ku tabul\u0101 (tabul\u0101, kura nesatur citas). Spanner autom\u0101tiski nosaka, vai <i>split <\/i>dati tiek las\u012bti bie\u017e\u0101k nek\u0101 dati citos <i>split<\/i>-os, un var pie\u0146emt l\u0113mumu par t\u0101l\u0101ku sadal\u012b\u0161anu. T\u0101d\u0113j\u0101di piepras\u012bjum\u0101 var b\u016bt iesaist\u012bti vair\u0101k mezglu, kas arvien efekt\u012bv\u0101k palielina caurlaid\u012bbu.<\/p>\n<h4>Datu aug\u0161upiel\u0101d\u0113\u0161ana?<\/h4>\n<p>\nCloud Spanner datu apstr\u0101des metode ir l\u012bdz\u012bga parastai iel\u0101dei. Lai pan\u0101ktu maksim\u0101lu veiktsp\u0113ju, ir j\u0101iev\u0113ro da\u017ei ieteikumi, tostarp:<\/p>\n<ul>\n<li>K\u0101rtot datus p\u0113c prim\u0101r\u0101 atsl\u0113gas.<\/li>\n<li>Sadaliet tos desmitos*<i>mezglu skaits<\/i> atsevi\u0161\u0137\u0101s sekcij\u0101s.<\/li>\n<li>Izveidojiet uzdevumu kopu, kas vienlaic\u012bgi iel\u0101d\u0113 datus.<\/li>\n<\/ul>\n<p>\n\u0160\u0101d\u0101 datu iel\u0101d\u0113 tiek izmantoti visi Cloud Spanner mezgli.<\/p>\n<p>M\u0113s izmantot\u0101m A YCSB slodzes testu, lai \u0123ener\u0113tu datu kopu ar 10M rind\u0101m.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: labs, slikts, \u0161ausm\u012bgs\" src=\"\/wp-content\/uploads\/2020\/02\/89b9c0353716be2d389b3e8da82781ad.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Slodzes tests tika veikts uz n1-standard-32 apr\u0113\u0137inu dzin\u0113ja (32 vCPU, 120 GB RAM), un test\u0113\u0161anas instance nekad nebija \u0161aurs posms testos.<br \/>\n** Viena mezgla iestat\u012bjums nav ieteicams jebkurai ra\u017eo\u0161anas slodzei.<\/i><\/p>\n<p>K\u0101 min\u0113ts iepriek\u0161, Cloud Spanner autom\u0101tiski apstr\u0101d\u0101 sadal\u012bjumus atkar\u012bb\u0101 no to slodzes, t\u0101d\u0113\u013c rezult\u0101ti uzlabojas p\u0113c vair\u0101kiem sec\u012bgiem testu atk\u0101rtojumiem. \u0160eit sniegtie rezult\u0101ti ir lab\u0101kie, ko m\u0113s esam ieg\u016bst\u0161i. Skatoties uz augst\u0101k min\u0113tajiem skait\u013ciem, varam redz\u0113t, k\u0101 Cloud Spanner (labi) m\u0113rogojas ar pieaugo\u0161o mezglu skaitu klaster\u012b. Izv\u0113rsti skait\u013ci ir \u0101rk\u0101rt\u012bgi zemas vid\u0113j\u0101s aiztures, kas kontrast\u0113 ar sajauktaj\u0101m slodz\u0113m (95% las\u012b\u0161anai un 5% rakst\u012b\u0161anai), k\u0101 aprakst\u012bts iepriek\u0161.<\/p>\n<h4>M\u0113rogainas?<\/h4>\n<p>\nCloud Spanner mezglu skaita palielin\u0101\u0161ana un samazin\u0101\u0161ana ir uzdevums, kas tiek veikts ar vienu klik\u0161\u0137i. Ja v\u0113laties \u0101tri iel\u0101d\u0113t datus, varat apsv\u0113rt iesp\u0113ju palielin\u0101t instances jaudu l\u012bdz maksimumam (m\u016bsu gad\u012bjum\u0101 tas bija 25 mezgli re\u0123ion\u0101 US-EAST), p\u0113c tam samazin\u0101t mezglu skaitu, kas atbilst j\u016bsu parastajai slodzei, kad visi dati ir ievietoti datu b\u0101z\u0113, \u0146emot v\u0113r\u0101 2 TB\/mezgls ierobe\u017eojumu.<\/p>\n<p>Mums bija j\u0101atg\u0101dina par \u0161o ierobe\u017eojumu pat ar daudz maz\u0101ku datu b\u0101zi. P\u0113c vair\u0101kiem slodzes testu palai\u0161anas m\u016bsu datu b\u0101ze bija apm\u0113ram 155 GB, un, samazinoties uz 1 mezgla instanci, m\u0113s sa\u0146\u0113m\u0101m sekojo\u0161o k\u013c\u016bdu:<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: labs, slikts, \u0161ausm\u012bgs\" src=\"\/wp-content\/uploads\/2020\/02\/4a46c97e7943b5105bf178316dc67433.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMums izdev\u0101s samazin\u0101t m\u0113rogu no 25 l\u012bdz 2 instanc\u0113m, ta\u010du m\u0113s iestr\u0113g\u0101m uz diviem mezgliem.<\/p>\n<p>Klastra Cloud Spanner mezglu skaita palielin\u0101\u0161anu un samazin\u0101\u0161anu var automatiz\u0113t, izmantojot REST API. Tas var b\u016bt \u012bpa\u0161i noder\u012bgi, lai samazin\u0101tu paaugstin\u0101tu slodzi uz sist\u0113mu saspringtos darba laikos.<\/p>\n<h4>K\u0101da ir OLAP vaic\u0101jumu veiktsp\u0113ja?<\/h4>\n<p>\nS\u0101kotn\u0113ji m\u0113s pl\u0101noj\u0101m velt\u012bt iev\u0113rojamu laiku m\u016bsu Spanner nov\u0113rt\u0113\u0161anai \u0161aj\u0101 jom\u0101. P\u0113c vair\u0101kiem SELECT COUNT, m\u0113s acumirkl\u012b saprat\u0101m, ka test\u0113\u0161ana b\u016bs \u012bsa un ka Spanner NEB\u016aS piem\u0113rots OLAP dzin\u0113jam. Neatkar\u012bgi no mezglu skaita klastra, vienk\u0101r\u0161a rindu skaita izv\u0113le tabul\u0101 ar 10M rind\u0101m aiz\u0146\u0113ma no 55 l\u012bdz 60 sekund\u0113m. Turkl\u0101t jebkur\u0161 vaic\u0101jums, kas pras\u012bja liel\u0101ku atmi\u0146as apjomu starpposma rezult\u0101tu glab\u0101\u0161anai, beidz\u0101s ar OOM k\u013c\u016bdu.<\/p>\n<p><code>SELECT COUNT(DISTINCT(field0)) FROM usertable; \u2014 (10M at\u0161\u0137ir\u012bgas v\u0113rt\u012bbas) -&gt; SpoolingHashAggregateIterator izbeidz\u0101s atmi\u0146a jaunai rindai.<\/code><\/p>\n<p>Da\u017eas skait\u013ci TPC-H vaic\u0101jumiem var atrast Todda Lipkona rakst\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/kudu.apache.org\/2017\/10\/23\/nosql-kudu-spanner-slides.html\">Nosql-kudu-spanner-slides.html<\/a><\/noindex>, sl\u012bdraksti 42 un 43. \u0160ie skait\u013ci sakr\u012bt ar m\u016bsu pa\u0161u rezult\u0101tiem (diem\u017e\u0113l).<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: labs, slikts, \u0161ausm\u012bgs\" src=\"\/wp-content\/uploads\/2020\/02\/d070c839bbc62b1ba1bebbaf64127e93.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>4. M\u016bsu secin\u0101jumi<\/h4>\n<p>\n\u0145emot v\u0113r\u0101 Cloud Spanner funkciju pa\u0161reiz\u0113jo st\u0101vokli, ir gr\u016bti iedom\u0101ties to k\u0101 vienk\u0101r\u0161u aizst\u0101j\u0113ju eso\u0161ajiem OLTP risin\u0101jumiem, jo \u012bpa\u0161i, ja j\u016bsu vajadz\u012bbas p\u0101rsniegs t\u0101 iesp\u0113jas. B\u016btu j\u0101velta iev\u0113rojams laiks, lai izveidotu risin\u0101jumu, \u0146emot v\u0113r\u0101 Cloud Spanner tr\u016bkumus.<\/p>\n<p>Kad m\u0113s s\u0101k\u0101m v\u0113rt\u0113t Cloud Spanner, m\u0113s gaid\u012bj\u0101m, ka t\u0101 p\u0101rvald\u012bbas funkcijas b\u016bs l\u012bdzv\u0113rt\u012bgas vai vismaz tuvu citu Google SQL risin\u0101jumu l\u012bmenim. Bet m\u0113s bij\u0101m p\u0101rsteigti par piln\u012bgu rezervju tr\u016bkumu un \u013coti ierobe\u017eoto piek\u013cuves kontroli resursiem. Nemaz nerun\u0101jot par skatu tr\u016bkumu, lok\u0101l\u0101s izstr\u0101des vides tr\u016bkumu, neatbalst\u012bt\u0101m sekvenc\u0113m, JDBC bez DML un DDL atbalsta un t\u0101 t\u0101l\u0101k.<\/p>\n<p>Lai saprastu, kur doties tam, kam nepiecie\u0161ams papla\u0161in\u0101t transakciju datub\u0101zi, j\u0101saka, ka tirg\u016b pagaid\u0101m nav viengabalaina risin\u0101juma, kas piem\u0113rots visiem lietojuma gad\u012bjumiem. Past\u0101v daudz risin\u0101jumu ar sl\u0113gto un atv\u0113rt\u0101 koda (da\u017ei no tiem tiek apspriesti \u0161aj\u0101 rakst\u0101), katrs ar sav\u0101m priek\u0161roc\u012bb\u0101m un tr\u016bkumiem, ta\u010du nevienam no tiem nav SaaS ar SLA 99,999% un augstu saskan\u012bbu. Ja augsts SLA l\u012bmenis ir j\u016bsu galvenais m\u0113r\u0137is un j\u016bs nev\u0113laties izveidot savu risin\u0101jumu vair\u0101ku m\u0101ko\u0146u vid\u0113, Cloud Spanner var\u0113tu b\u016bt tie\u0161i tas risin\u0101jums, ko j\u016bs mekl\u0113jat. Tom\u0113r jums j\u0101zina par visiem t\u0101 ierobe\u017eojumiem.<\/p>\n<p>God\u012bguma labad j\u0101saka, ka Cloud Spanner tika izdots visp\u0101r\u0113jai piek\u013cuvei tikai 2017. gada pavasar\u012b, t\u0101p\u0113c ir sapr\u0101t\u012bgi gaid\u012bt, ka da\u017ei no t\u0101 pa\u0161reiz\u0113jiem tr\u016bkumiem galu gal\u0101 var\u0113s izzust (cerams), un, kad tas notiks, tas var main\u012bt sp\u0113\u013cu noteikumus. Galu gal\u0101 Cloud Spanner nav tikai blakusprojekts Google. Google to izmanto k\u0101 pamatu citiem Google produktiem. Un, kad Google nesen nomain\u012bja Megastore Google Cloud Storage uz Cloud Spanner, tas \u013c\u0101va Google Cloud Storage k\u013c\u016bt stingri saskan\u012bgam objektu sarakstiem vis\u0101 pasaul\u0113 (kas joproj\u0101m neattiecas uz <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>T\u0101tad cer\u012bba joproj\u0101m ir\u2026 m\u0113s ceram.<\/p>\n<p>Uz \u0161\u012b ir viss. T\u0101pat k\u0101 raksta autors, ar\u012b m\u0113s turpin\u0101m cer\u0113t, bet k\u0101das ir j\u016bsu domas par to? Rakstiet koment\u0101ros<\/p>\n<p><b>Ikvienu aicin\u0101m apmekl\u0113t m\u016bsu <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">bezmaks\u012bgu t\u012bmek\u013ca semin\u0101ru<\/a><\/noindex> kur\u0101 s\u012bki izst\u0101st\u012bsim par kursu<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\"> \u00abAWS izstr\u0101d\u0101t\u0101jiem\u00bb<\/a><\/noindex> no OTUS.<\/b><br \/>\n<br \/>Avots: <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.5 - 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\/lv\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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: labs, slikts, nepat\u012bkams | ProHoster","description":"Sveiki, habr\u0101nie\u0161i. Tradicion\u0101li turpin\u0101m dal\u012bties interesant\u0101 materi\u0101l\u0101 pirms jauno kursu s\u0101kuma.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/69568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=69568"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/69568\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/69569"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=69568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=69568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=69568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}