{"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\/sq\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","title":{"rendered":"Google Cloud Spanner: e mir\u00eb, e keqe, e sh\u00ebmtuar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>P\u00ebrsh\u00ebndetje, banor\u00eb t\u00eb Habrushka. Si zakonisht, vijojm\u00eb t\u00eb ndajm\u00eb materiale interesante p\u00ebrpara nisjes s\u00eb kurseve t\u00eb reja. Sot, p\u00ebr ju, kemi p\u00ebrkthyer nj\u00eb artikull mbi Google Cloud Spanner, duke e p\u00ebrshatur me lansimin e kursit <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">\u00abAWS p\u00ebr zhvilluesit\u00bb<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: e mir\u00eb, e keqe, e sh\u00ebmtuar\" src=\"\/wp-content\/uploads\/2020\/02\/b27b8a09543d10b078480c317553ca46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Fillimisht e publikuar n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.lightspeedhq.com\/blog\/\">blogun e Lightspeed HQ<\/a><\/noindex>.<\/i><\/p>\n<p>Si nj\u00eb kompani q\u00eb ofron nj\u00eb s\u00ebr\u00eb zgjidhjesh cloud POS p\u00ebr tregtar\u00ebt me pakic\u00eb, restorantet dhe shit\u00ebsit online n\u00eb t\u00eb gjith\u00eb bot\u00ebn, Lightspeed p\u00ebrdor disa lloje t\u00eb ndryshme platformash databazash p\u00ebr shum\u00eb raste transaksionale, analitike dhe k\u00ebrkuese. Secila nga k\u00ebto platforma databazash ka p\u00ebrpar\u00ebsit\u00eb dhe disavantazhet e saj. Prandaj, kur Google prezantoi Cloud Spanner n\u00eb treg \u2014 funksione t\u00eb premtuara, t\u00eb papara n\u00eb bot\u00ebn e databazave relacionale, si shkall\u00ebzimi horizontal praktikisht i pakufizuar dhe nj\u00eb marr\u00ebveshje p\u00ebr nivelin e sh\u00ebrbimit (SLA) prej 99,999% \u2014 ne nuk mund t\u00eb humbisnim rastin p\u00ebr ta pasur at\u00eb n\u00eb duar!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nP\u00ebr t\u00eb ofruar nj\u00eb pasqyr\u00eb t\u00eb plot\u00eb t\u00eb p\u00ebrvoj\u00ebs son\u00eb me Cloud Spanner, si dhe t\u00eb kritereve t\u00eb vler\u00ebsimit q\u00eb kemi p\u00ebrdorur, ne do t\u00eb shqyrtojm\u00eb temat e m\u00ebposhtme:<\/p>\n<ol>\n<li>Kriteret tona t\u00eb vler\u00ebsimit<\/li>\n<li>Cloud Spanner n\u00eb dy fjal\u00eb<\/li>\n<li>Vler\u00ebsimi yn\u00eb<\/li>\n<li>Konkluzionet tona<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Google Cloud Spanner: e mir\u00eb, e keqe, e sh\u00ebmtuar\" src=\"\/wp-content\/uploads\/2020\/02\/29ed599362fb189283faa9215c18297a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>1. Kriteret tona t\u00eb vler\u00ebsimit<\/h2>\n<p>\nPara se t\u00eb thellohemi n\u00eb karakteristikat e Cloud Spanner, ngjashm\u00ebrin\u00eb dhe ndryshimet me zgjidhjet e tjera n\u00eb treg, le t\u00eb flasim fillimisht p\u00ebr rastet kryesore t\u00eb p\u00ebrdorimit q\u00eb kishim n\u00eb mendje kur shqyrtonim se ku t\u00eb implementonim Cloud Spanner n\u00eb infrastruktur\u00ebn ton\u00eb:<\/p>\n<ul>\n<li>Si nj\u00eb z\u00ebvend\u00ebsim p\u00ebr zgjidhjen tradicionale t\u00eb databazave SQL<\/li>\n<li>Si nj\u00eb zgjidhje OLTP me mb\u00ebshtetje p\u00ebr OLAP<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i><b>V\u00ebrejtje:<\/b> P\u00ebr leht\u00ebsi dhe p\u00ebr krahasonim, ky artikull krahas s\u00eb Cloud Spanner me variantet e MySQL t\u00eb familjeve t\u00eb zgjidhjeve GCP Cloud SQL dhe Amazon AWS RDS.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h4>P\u00ebrdorimi i Cloud Spanner si z\u00ebvend\u00ebsim p\u00ebr zgjidhjen tradicionale t\u00eb databazave SQL<\/h4>\n<p>\nN\u00eb mjedisin <i>tradicional <\/i>t\u00eb databazave, kur koha e p\u00ebrgjigjes p\u00ebr nj\u00eb k\u00ebrkes\u00eb n\u00eb databaz\u00eb afron ose madje kalon vlerat e p\u00ebrcaktuara t\u00eb pragut t\u00eb aplikacionit (m\u00eb s\u00eb shumti p\u00ebr shkak t\u00eb rritjes s\u00eb numrit t\u00eb p\u00ebrdoruesve dhe\/ose k\u00ebrkesave), ka disa m\u00ebnyra p\u00ebr t\u00eb ulur koh\u00ebn e p\u00ebrgjigjes n\u00eb nivele t\u00eb pranueshme. Megjithat\u00eb, shumica e k\u00ebtyre zgjidhjeve p\u00ebrfshijn\u00eb nd\u00ebrhyrje manuale.<\/p>\n<p>P\u00ebr shembull, hapi i par\u00eb q\u00eb duhet t\u00eb merrni \u00ebsht\u00eb t\u00eb shikoni parametrat e ndrysh\u00ebm t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave q\u00eb lidhen me performanc\u00ebn dhe t'i konfiguroni ata n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb p\u00ebrputhen sa m\u00eb mir\u00eb me modelet e skenar\u00ebve t\u00eb p\u00ebrdorimit t\u00eb aplikacioneve. N\u00ebse kjo nuk \u00ebsht\u00eb e mjaftueshme, mund t\u00eb zgjidhni p\u00ebr t\u00eb shkall\u00ebzuar baz\u00ebn e t\u00eb dh\u00ebnave n\u00eb m\u00ebnyr\u00eb vertikale ose horizontale.<\/p>\n<p>Shkall\u00ebzimi vertikal i nj\u00eb aplikacioni b\u00ebhet me azhurnimin e instanc\u00ebs s\u00eb serverit, zakonisht duke shtuar m\u00eb shum\u00eb procesor\u00eb\/kanale, m\u00eb shum\u00eb memorie RAM, ruajtje m\u00eb t\u00eb shpejt\u00eb, etj. Shtimi i m\u00eb shum\u00eb burimeve harduerike \u00e7on n\u00eb rritjen e performanc\u00ebs s\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, e cila matet kryesisht n\u00eb transaksione p\u00ebr sekond\u00eb dhe vonesa transaksionesh p\u00ebr sistemet OLTP. Sistemet e bazave t\u00eb t\u00eb dh\u00ebnave relazionale (t\u00eb cilat p\u00ebrdorin qasjen shum\u00ebthith\u00ebse), si MySQL, shkall\u00ebzohen mir\u00eb n\u00eb m\u00ebnyr\u00eb vertikale.<\/p>\n<p>Ky qasje ka disa disavantazhe, por m\u00eb e dukshme \u00ebsht\u00eb madh\u00ebsia maksimale e serverit n\u00eb treg. Sapo t\u00eb arrihet kufiri i instanc\u00ebs m\u00eb t\u00eb madhe t\u00eb serverit, do t\u00eb mbetet vet\u00ebm nj\u00eb rrug\u00eb: shkall\u00ebzimi horizontal.<\/p>\n<p>Shkall\u00ebzimi horizontal \u00ebsht\u00eb nj\u00eb qasje n\u00eb t\u00eb cil\u00ebn shtohen m\u00eb shum\u00eb server\u00eb n\u00eb klaster, p\u00ebr t\u00eb rritur idealisht performanc\u00ebn n\u00eb m\u00ebnyr\u00eb lineare me shtimin e numrit t\u00eb server\u00ebve. Shumica <i>tradicional <\/i>e sistemeve t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave shkall\u00ebzohen keq horizontalisht ose nuk shkall\u00ebzohen fare. P\u00ebr shembull, MySQL mund t\u00eb shkall\u00ebzohet horizontalisht p\u00ebr operacione leximi, duke shtuar lexues slave, por nuk mund t\u00eb shkall\u00ebzohet horizontalisht p\u00ebr operacione shkruese.<\/p>\n<p>Nga ana tjet\u00ebr, p\u00ebr shkak t\u00eb natyr\u00ebs s\u00eb tij, Cloud Spanner mund t\u00eb shkall\u00ebzohet leht\u00ebsisht horizontalisht me nd\u00ebrhyrje minimale.<\/p>\n<p>Nj\u00eb<i> Sistemi i Menaxhimit t\u00eb Bazave t\u00eb t\u00eb Dh\u00ebnave si Sh\u00ebrbim<\/i> duhet t\u00eb vler\u00ebsohet nga k\u00ebndv\u00ebshtrime t\u00eb ndryshme. Si baz\u00eb, ne mor\u00ebm sistemin m\u00eb t\u00eb popullarizuar t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave n\u00eb cloud \u2014 p\u00ebr Google, GCP Cloud SQL dhe p\u00ebr Amazon, AWS RDS. N\u00eb vler\u00ebsimin ton\u00eb, p\u00ebrq\u00ebndruam v\u00ebmendjen n\u00eb kategorit\u00eb e m\u00ebposhtme:<\/p>\n<ul>\n<li>Krahasimi i karakteristikave: extensi SQL, DDL, DML; bibliotekat e lidhjeve\/konektor\u00ebve, mb\u00ebshtetja p\u00ebr transaksione etj.<\/li>\n<li>Mb\u00ebshtetja p\u00ebr zhvillimin: leht\u00ebsia e zhvillimit dhe testimit.<\/li>\n<li>Mb\u00ebshtetje p\u00ebr administrimin: menaxhimi i instanceve \u2014 p\u00ebr shembull, shkall\u00ebzimi lart\/posht\u00eb dhe p\u00ebrmir\u00ebsimi i instanceve; SLA, kopjimi n\u00eb rezerv\u00eb dhe rikuperimi; siguria\/kontrolli i qasjes.<\/li>\n<\/ul>\n<p><\/p>\n<h4>P\u00ebrdorimi i Cloud Spanner si nj\u00eb zgjidhje OLTP me mb\u00ebshtetje OLAP<\/h4>\n<p>\nMegjith\u00ebse Google nuk e deklaron qart\u00eb se Cloud Spanner \u00ebsht\u00eb i destinuar p\u00ebr p\u00ebrpunimin analitik, ai ndan disa tipare me mekanizma t\u00eb tjer\u00eb si Apache Impala &amp; Kudu dhe YugaByte, t\u00eb cil\u00ebt jan\u00eb t\u00eb dizajnuar p\u00ebr ngarkesa t\u00eb pun\u00ebs OLAP.<\/p>\n<p>Edhe n\u00ebse do t\u00eb kishte vet\u00ebm nj\u00eb probabilitet t\u00eb vog\u00ebl q\u00eb Cloud Spanner t\u00eb p\u00ebrfshinte nj\u00eb motor t\u00eb shkall\u00ebzuesh\u00ebm horizontalisht t\u00eb harmonizuar HTAP (p\u00ebrpunim hibrid transaksional\/analitik) me nj\u00eb paket\u00eb funksionesh OLAP q\u00eb \u00ebsht\u00eb (m\u00eb shum\u00eb apo pak) e p\u00ebrdorshme, ne mendojm\u00eb se kjo do t\u00eb meritonte v\u00ebmendjen ton\u00eb.<\/p>\n<p>Me k\u00ebt\u00eb n\u00eb mendje, ne shqyrtuam kategorit\u00eb n\u00eb vijim:<\/p>\n<ul>\n<li>Ngarkimi i t\u00eb dh\u00ebnave, indekset dhe mb\u00ebshtetje p\u00ebr parti\u00e7ionimin<\/li>\n<li>K\u00ebrkesat e performanc\u00ebs dhe DML<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Cloud Spanner n\u00eb dy fjal\u00eb<\/h2>\n<p>\nGoogle Spanner \u00ebsht\u00eb nj\u00eb sistem i grumbulluar i menaxhimit t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave relacionale (RDBMS) q\u00eb Google e p\u00ebrdor p\u00ebr sh\u00ebrbime t\u00eb shumta t\u00eb veta. Google e b\u00ebri at\u00eb t\u00eb disponueshme p\u00ebr p\u00ebrdoruesit e Google Cloud Platform n\u00eb fillim t\u00eb vitit 2017.<\/p>\n<p>Ja disa nga atributet e Cloud Spanner:<\/p>\n<ul>\n<li>Klastra RDBMS e shkall\u00ebzuar me harmonizim t\u00eb fort\u00eb: p\u00ebrdor sinchronizimin e harduerit p\u00ebr t\u00eb siguruar koherenc\u00ebn e t\u00eb dh\u00ebnave.<\/li>\n<li>Mb\u00ebshtetje p\u00ebr transaksionet nd\u00ebrmjet tabelave: transaksionet mund t\u00eb p\u00ebrfshijn\u00eb disa tabela \u2014 nuk \u00ebsht\u00eb e nevojshme t\u00eb kufizohen n\u00eb nj\u00eb tavolin\u00eb (ndryshe nga Apache HBase ose Apache Kudu).<\/li>\n<li>Tabela t\u00eb bazuara n\u00eb \u00e7el\u00ebsin primar: t\u00eb gjitha tabelat duhet t\u00eb ken\u00eb nj\u00eb \u00e7el\u00ebs t\u00eb deklaruar primar (\u00c7P), i cili mund t\u00eb p\u00ebrb\u00ebhet nga disa kolona t\u00eb tabel\u00ebs. T\u00eb dh\u00ebnat e tabelave ruhen sipas \u00c7P, gj\u00eb q\u00eb i b\u00ebn ato shum\u00eb efikase dhe t\u00eb shpejta p\u00ebr k\u00ebrkim sipas \u00c7P. Si sistemet e tjera t\u00eb bazuara n\u00eb \u00c7P, zbatimi duhet t\u00eb modeloj\u00eb me kujdes rastet e p\u00ebrdorimit t\u00eb parashikuara p\u00ebr t\u00eb arritur <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/schema-and-data-model\">performanc\u00ebn m\u00eb t\u00eb mir\u00eb<\/a><\/noindex>.<\/li>\n<li>Tabelat e alternuara: tabelat mund t\u00eb ken\u00eb var\u00ebsi fizike nga nj\u00ebra-tjetra. Rreshtat e tabel\u00ebs f\u00ebmij\u00eb mund t\u00eb lidhen me rreshtat e tabel\u00ebs prind. Ky qasje accelrojn\u00eb k\u00ebrkimin e marr\u00ebdh\u00ebnieve, t\u00eb cilat mund t\u00eb p\u00ebrcaktohen n\u00eb faz\u00ebn e modelimit t\u00eb t\u00eb dh\u00ebnave, p\u00ebr shembull, n\u00eb vendosjen e p\u00ebrbashk\u00ebt t\u00eb klient\u00ebve dhe faturave t\u00eb tyre.<\/li>\n<li>Indekset: Cloud Spanner mb\u00ebshtet indekset dyt\u00ebsore. Nj\u00eb indeks p\u00ebrb\u00ebhet nga kolonat e indeksuara dhe t\u00eb gjitha kolonat e PK. N\u00ebse d\u00ebshirohet, indeksi gjithashtu mund t\u00eb p\u00ebrfshij\u00eb kolona t\u00eb tjera q\u00eb nuk jan\u00eb t\u00eb indeksuara. Indeksi mund t\u00eb alternohet me tabel\u00ebn prind p\u00ebr t\u00eb p\u00ebrshpejtuar k\u00ebrkesat. Jan\u00eb disa kufizime q\u00eb zbatohen p\u00ebr indekset, si\u00e7 \u00ebsht\u00eb numri maksimal i kolonave shtes\u00eb q\u00eb ruhen n\u00eb indeks. Gjithashtu, k\u00ebrkesat p\u00ebrmes indekseve mund t\u00eb mos jen\u00eb aq t\u00eb drejtp\u00ebrdrejta si n\u00eb sistemet e tjera RDBMS.<\/li>\n<\/ul>\n<p>\n<i>\u00abCloud Spanner zgjedh indeksin automatikisht vet\u00ebm n\u00eb raste t\u00eb rralla. N\u00eb ve\u00e7anti, Cloud Spanner nuk zgjedh automatikisht nj\u00eb indeks dyt\u00ebsor n\u00ebse k\u00ebrkesa k\u00ebrkon ndonj\u00eb kolon\u00eb q\u00eb nuk ruhet n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/secondary-indexes\">indeksin <\/a><\/noindex>\u00bb.<\/i><\/p>\n<ul>\n<li>Marr\u00ebveshja p\u00ebr nivelin e sh\u00ebrbimit (SLA): implementimi n\u00eb nj\u00eb rajon me SLA prej 99,99%; implementimet me shum\u00eb regjione me 99,999% SLA. Edhe pse marr\u00ebveshja p\u00ebr nivelin e sh\u00ebrbimit \u00ebsht\u00eb thjesht nj\u00eb marr\u00ebveshje dhe jo ndonj\u00eb garanci, un\u00eb besoj se punonj\u00ebsit e Google kan\u00eb disa t\u00eb dh\u00ebna t\u00eb sakta p\u00ebr t\u00eb b\u00ebr\u00eb nj\u00eb deklarat\u00eb kaq t\u00eb r\u00ebnd\u00ebsishme. (P\u00ebr reference, 99,999% do t\u00eb thot\u00eb 26,3 sekonda pap\u00ebrshtatshm\u00ebri sh\u00ebrbimi n\u00eb muaj.)<\/li>\n<li>M\u00eb shum\u00eb: <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>V\u00ebrejtje:<\/b> Projekti Apache Tephra shton mb\u00ebshtetje t\u00eb zgjeruar p\u00ebr transaksionet n\u00eb Apache HBase (i implementuar gjithashtu tani n\u00eb Apache Phoenix si nj\u00eb version beta).<\/i><\/p><\/blockquote>\n<p><\/p>\n<h2>3. Vler\u00ebsimi yn\u00eb<\/h2>\n<p>\nPra, t\u00eb gjith\u00eb kemi lexuar deklaratat e Google p\u00ebr p\u00ebrfitimet e Cloud Spanner \u2014 nj\u00eb shkall\u00ebzim horizontal praktikisht t\u00eb pakufizuar duke ruajtur nj\u00eb konsistenc\u00eb t\u00eb lart\u00eb dhe nj\u00eb SLA shum\u00eb t\u00eb lart\u00eb. Edhe pse k\u00ebto k\u00ebrkesa, n\u00eb \u00e7do rast, jan\u00eb jasht\u00ebzakonisht t\u00eb v\u00ebshtira p\u00ebr t'u arritur, q\u00ebllimi yn\u00eb nuk ishte t\u00eb mohonim ato. N\u00eb vend t\u00eb k\u00ebsaj, le t\u00eb p\u00ebrqendrohemi n\u00eb gj\u00ebra t\u00eb tjera q\u00eb shqet\u00ebsojn\u00eb shumic\u00ebn e p\u00ebrdoruesve t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave: qart\u00ebsia dhe leht\u00ebsia e p\u00ebrdorimit.<\/p>\n<h4>Ne e vler\u00ebsuam Cloud Spanner si nj\u00eb z\u00ebvend\u00ebsim p\u00ebr Sharded MySQL.<\/h4>\n<p>\nGoogle Cloud SQL dhe Amazon AWS RDS, dy sistemet m\u00eb t\u00eb popullarizuara OLTP n\u00eb tregun cloud, kan\u00eb nj\u00eb set t\u00eb madh funksionesh. Megjithat\u00eb, p\u00ebr t\u00eb shkall\u00ebzuar k\u00ebto baza t\u00eb dh\u00ebnash p\u00ebrtej madh\u00ebsis\u00eb s\u00eb nj\u00eb nodi, ju nevojitet t\u00eb realizoni shpartallimin e aplikacioneve. Ky qasje krijon nj\u00eb kompleksitet t\u00eb shtuar si p\u00ebr aplikacionet ashtu edhe p\u00ebr administrimin. Ne shqyrtuam se si Spanner p\u00ebrfshihet n\u00eb skenarin e bashkimit t\u00eb disa segmenteve n\u00eb nj\u00eb instanc\u00eb dhe cilat funksione (n\u00ebse ka) mund t\u00eb nevojiten t\u00eb sakrifikohen.<\/p>\n<h4>Mb\u00ebshtetje p\u00ebr SQL, DML dhe DDL, si dhe p\u00ebr lidh\u00ebsin dhe bibliotekat?<\/h4>\n<p>\nS\u00eb pari, kur startoni me \u00e7do baz\u00eb t\u00eb dh\u00ebnash, \u00ebsht\u00eb e nevojshme t\u00eb krijoni nj\u00eb model t\u00eb dh\u00ebnash. N\u00ebse mendoni se mund ta lidhni JDBC Spanner me mjetin tuaj t\u00eb preferuar SQL, do t\u00eb zbuloni se mund t\u00eb k\u00ebrkoni t\u00eb dh\u00ebnat tuaja me t\u00eb, por nuk mund ta p\u00ebrdorni at\u00eb p\u00ebr t\u00eb krijuar tabela ose p\u00ebr t\u00eb b\u00ebr\u00eb ndryshime (DDL) ose ndonj\u00eb operacion n\u00ebnshtesa\/aktualizimi\/fshirje (DML). JDBC zyrtar nga Google nuk mb\u00ebshtet asnj\u00ebrin.<\/p>\n<blockquote><p><i>\u00abAktualisht, driver\u00ebt nuk mb\u00ebshtesin operacionet DML ose DDL\u00bb.<\/i><br \/>\nDokumentacioni i Spanner<\/p><\/blockquote>\n<p>\nMe konsol\u00ebn GCP, situata nuk \u00ebsht\u00eb m\u00eb e mir\u00eb - mund t\u00eb d\u00ebrgoni vet\u00ebm k\u00ebrkesa SELECT. Me fat, ekziston nj\u00eb driver JDBC me mb\u00ebshtetje p\u00ebr DML dhe DDL nga komuniteti, duke p\u00ebrfshir\u00eb transaksionet <noindex><a rel=\"nofollow\" href=\"http:\/\/github.com\/olavloite\/spanner-jdbc\">github.com\/olavloite\/spanner-jdbc<\/a><\/noindex>. Edhe pse ky driver \u00ebsht\u00eb jasht\u00ebzakonisht i dobish\u00ebm, mungesa e nj\u00eb driver-i JDBC nga Google \u00ebsht\u00eb befasuese. Me fat, Google ofron nj\u00eb mb\u00ebshtetje t\u00eb gjer\u00eb p\u00ebr bibliotekat e klient\u00ebve (t\u00eb bazuara n\u00eb gRPC): C#, Go, Java, node.js, PHP, Python dhe Ruby.<\/p>\n<p>P\u00ebrdorimi praktikisht i detyruesh\u00ebm i API-ve t\u00eb personalizuara p\u00ebr Cloud Spanner (p\u00ebr shkak t\u00eb munges\u00ebs s\u00eb DDL dhe DML n\u00eb JDBC) sjell disa kufizime p\u00ebr fushat e lidhura t\u00eb kodit, si\u00e7 jan\u00eb pikat e lidhjes ose kornizat e lidhjes s\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave (p.sh., Spring MVC). Si rregull, kur p\u00ebrdorni JDBC, mund t\u00eb zgjidhni lirsh\u00ebm pikat e lidhjes tuaj t\u00eb preferuar (p.sh., HikariCP, DBCP, C3PO etj.), t\u00eb cilat jan\u00eb testuar dhe punojn\u00eb mir\u00eb. N\u00eb rastin e API-ve t\u00eb personalizuara Spanner, ne duhet t\u00eb mb\u00ebshtetemi n\u00eb kornizat\/pikat e lidhjes\/sesionet q\u00eb kemi krijuar vet\u00eb.<\/p>\n<p>Konstrukti, i orientuar drejt \u00e7el\u00ebsit t\u00eb par\u00eb (PK), i lejon Cloud Spanner t\u00eb jet\u00eb shum\u00eb i shpejt\u00eb n\u00eb aksesin e t\u00eb dh\u00ebnave p\u00ebrmes PK, por gjithashtu \u00e7on n\u00eb disa probleme me k\u00ebrkesat.<\/p>\n<ul>\n<li>Nuk mund t\u00eb p\u00ebrdit\u00ebsoni vler\u00ebn e \u00e7el\u00ebsit kryesor; duhet t\u00eb fshini fillimisht rekordin me PK-n\u00eb origjinale dhe ta insertoni at\u00eb p\u00ebrs\u00ebri me vler\u00ebn e re. (Kjo \u00ebsht\u00eb e ngjashme me bazat e t\u00eb dh\u00ebnave t\u00eb orientuara ndaj PK-ve \/ mekanizmat e ruajtjes.)<\/li>\n<li>\u00c7do operator UPDATE dhe DELETE duhet t\u00eb p\u00ebrcaktoj\u00eb PK n\u00eb WHERE, prandaj, nuk mund t\u00eb ket\u00eb operator\u00eb DELETE t\u00eb zbraz\u00ebt - gjithmon\u00eb duhet t\u00eb ket\u00eb nj\u00eb n\u00ebnk\u00ebrkes\u00eb, p\u00ebr shembull: UPDATE xxx WHERE id IN (SELECT id FROM table1)<\/li>\n<li>Mungon opsioni i auto-increment ose di\u00e7ka e ngjashme q\u00eb vendos nj\u00eb sekuenc\u00eb p\u00ebr fush\u00ebn e PK-s\u00eb. N\u00eb m\u00ebnyr\u00eb q\u00eb kjo t\u00eb funksionoj\u00eb, vlera p\u00ebrkat\u00ebse duhet t\u00eb krijohet nga ana e aplikacionit.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Indekset sekondare?<\/h4>\n<p>\nGoogle Cloud Spanner ka mb\u00ebshtetje t\u00eb integruar p\u00ebr indekset sekondare. Kjo \u00ebsht\u00eb nj\u00eb tipar shum\u00eb i bukur, i cili nuk \u00ebsht\u00eb gjithmon\u00eb i pranish\u00ebm n\u00eb teknologjit\u00eb e tjera. Apache Kudu aktualisht nuk mb\u00ebshtet fare indekset sekondare, nd\u00ebrsa Apache HBase nuk mb\u00ebshtet indekset drejtp\u00ebrdrejt, por mund t'i shtoj\u00eb ato n\u00ebp\u00ebrmjet Apache Phoenix.<\/p>\n<p>Indekset n\u00eb Kudu dhe HBase mund t\u00eb modelohen si nj\u00eb tabel\u00eb e ve\u00e7ant\u00eb me nj\u00eb p\u00ebrb\u00ebrje t\u00eb ndryshme t\u00eb \u00e7el\u00ebsave kryesor\u00eb, por atomik\u00ebsia e operacioneve q\u00eb kryhen me tabel\u00ebn prindore dhe tabelat indeks t\u00eb lidhura duhet t\u00eb kryhet n\u00eb nivelin e aplikacionit dhe nuk \u00ebsht\u00eb triviale n\u00eb nj\u00eb zbatim t\u00eb duhur.<\/p>\n<p>Si\u00e7 u p\u00ebrmend n\u00eb p\u00ebrmbledhjen e Cloud Spanner, indeksat e tij mund t\u00eb ndryshojn\u00eb nga indeksat e MySQL. Prandaj, \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb jepni kujdes t\u00eb ve\u00e7ant\u00eb kur krijoni pyetje dhe b\u00ebni profilizimin, p\u00ebr t\u00eb siguruar p\u00ebrdorimin e indeksit t\u00eb duhur atje ku \u00ebsht\u00eb e nevojshme.<\/p>\n<h4>Pamjet?<\/h4>\n<p>\nNj\u00eb objekt shum\u00eb popullor dhe i dobish\u00ebm n\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash jan\u00eb pamjet. Ato mund t\u00eb jen\u00eb t\u00eb dobishme p\u00ebr nj\u00eb s\u00ebr\u00eb p\u00ebrdorimesh; dy t\u00eb preferuarit e mi jan\u00eb niveli i abstraksionit logjik dhe niveli i siguris\u00eb. Fatkeq\u00ebsisht, Cloud Spanner nuk mb\u00ebshtet pamjet. Megjithat\u00eb, kjo na kufizon vet\u00ebm pjes\u00ebrisht, pasi detajet e aksesit nuk jan\u00eb n\u00eb nivelin e kolonave, ku pamjet mund t\u00eb jen\u00eb nj\u00eb zgjidhje e pranueshme.<\/p>\n<p>N\u00eb dokumentacionin e Cloud Spanner, n\u00eb seksionin q\u00eb p\u00ebrshkruan kuotat dhe kufizimet (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/quotas\">spanner\/quotas<\/a><\/noindex>), there is one in particular that may be problematic for some applications: Cloud Spanner out of the box has a limit of a maximum of 100 databases per instance. Obviously, this can become a serious obstacle for a database intended to scale beyond 100 databases. Fortunately, after speaking with our Google technical representative, we found out that this limit can be increased to virtually any value through Google support.<\/p>\n<h4>Support for development?<\/h4>\n<p>\nCloud Spanner offers quite decent support for programming languages to work with its API. Officially supported libraries are available for C#, Go, Java, node.js, PHP, Python, and Ruby. The documentation is quite detailed, but, like with other cutting-edge technologies, the community is relatively small compared to the most popular database technologies, which can lead to increased time spent on solving less common use cases or issues.<\/p>\n<h4>So, what about support for local development?<\/h4>\n<p>\nWe did not find a way to create a Cloud Spanner instance in a local environment. The closest we got was a Docker image <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/cockroachdb\/cockroach\">CockroachDB<\/a><\/noindex>, which is generally similar but, in practice, is quite different. For example, CockroachDB can use PostgreSQL JDBC. Since the development environment should be as close as possible to the production environment, Cloud Spanner is not ideal, as you need to rely on a full Spanner instance. To save costs, you can choose an instance for a single region.<\/p>\n<h4>Support for administration?<\/h4>\n<p>\nCreating a Cloud Spanner instance is very simple. You just need to choose between creating a multi-regional or a single-region instance, specify the region(s), and the number of nodes. In less than a minute, the instance will be up and ready to work.<\/p>\n<p>Several basic metrics are directly available on the Spanner page in the Google Console. More detailed views are available through Stackdriver, where you can also set metric thresholds and alert policies.<\/p>\n<h4>Access to resources?<\/h4>\n<p>\nMySQL ofron nj\u00eb konfigurim t\u00eb gjer\u00eb dhe shum\u00eb t\u00eb detajuar t\u00eb lejeve\/rolave t\u00eb p\u00ebrdoruesve. Mund t\u00eb rregulloni leht\u00ebsisht qasjen n\u00eb nj\u00eb tabel\u00eb t\u00eb caktuar apo madje edhe n\u00eb nj\u00eb n\u00ebngrup t\u00eb kolonave t\u00eb saj. Cloud Spanner p\u00ebrdor mjetin Google Identity &amp; Access Management (IAM), i cili lejon vendosjen e politikave dhe lejeve vet\u00ebm n\u00eb nj\u00eb nivel shum\u00eb t\u00eb lart\u00eb. M\u00eb i detajuar \u00ebsht\u00eb leja n\u00eb nivelin e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, e cila nuk p\u00ebrshtatet n\u00eb shumic\u00ebn e rasteve prodhuese. Ky kufizim ju detyron t\u00eb shtoni masa t\u00eb tjera sigurie n\u00eb kodin tuaj, infrastruktur\u00ebn tuaj ose t\u00eb dyja p\u00ebr t\u00eb parandaluar p\u00ebrdorimin e paautorizuar t\u00eb burimeve Spanner.<\/p>\n<h4>Kopjet e rezerv\u00ebs?<\/h4>\n<p>\nTh\u00ebn\u00eb thjesht, nuk ekzistojn\u00eb kopje rezerv\u00eb n\u00eb Cloud Spanner. Edhe pse k\u00ebrkesat e larta t\u00eb SLA t\u00eb Google mund t\u00eb garantojn\u00eb q\u00eb nuk do t\u00eb humbisni asnj\u00eb t\u00eb dh\u00ebn\u00eb p\u00ebr shkak t\u00eb d\u00ebshtimeve t\u00eb pajisjeve ose t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, nga gabimet njer\u00ebzore, defektet e aplikacioneve etj. T\u00eb gjith\u00eb e dim\u00eb rregullin: disponueshm\u00ebria e lart\u00eb nuk z\u00ebvend\u00ebson nj\u00eb strategji t\u00eb arsyeshme t\u00eb kopjimit t\u00eb rezerv\u00ebs. N\u00eb k\u00ebt\u00eb moment, m\u00ebnyra e vetme p\u00ebr t\u00eb b\u00ebr\u00eb kopje rezerv\u00eb t\u00eb t\u00eb dh\u00ebnave \u00ebsht\u00eb transmetimi i tyre p\u00ebrmes nj\u00eb programi n\u00eb nj\u00eb ambient t\u00eb ve\u00e7ant\u00eb t\u00eb ruajtjes.<\/p>\n<h4>P\u00ebrformanca e k\u00ebrkesave?<\/h4>\n<p>\nP\u00ebr shkarkimin e t\u00eb dh\u00ebnave dhe testimin e k\u00ebrkesave, ne p\u00ebrdor\u00ebm Yahoo! Cloud Serving Benchmark. N\u00eb tabel\u00ebn m\u00eb posht\u00eb, \u00ebsht\u00eb paraqitur ngarkesa e pun\u00ebs B YCSB me nj\u00eb raport leximi 95% dhe shkrimi 5%.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: e mir\u00eb, e keqe, e sh\u00ebmtuar\" src=\"\/wp-content\/uploads\/2020\/02\/8fca14875af33c8ed3cd04b602c52b78.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Testi i ngarkes\u00ebs u krye n\u00eb motorin e llogaritjes (CE) n1-standard-32 (32 vCPU, 120 GB RAM), dhe instanca testuese nuk ishte kurr\u00eb nj\u00eb ngusht\u00ebsim n\u00eb testime.<\/i><br \/>\n<i>** Numri maksimal i fijeve n\u00eb nj\u00eb instanc\u00eb YCSB \u00ebsht\u00eb 400. M\u00eb shum\u00eb se duhej t\u00eb nisnin gjasht\u00eb instanca paralele t\u00eb testeve YCSB p\u00ebr t\u00eb arritur nj\u00eb total prej 2400 fijeve.<\/i><\/p>\n<p>Duke rezultatet e testeve, ve\u00e7an\u00ebrisht kombinimi i ngarkes\u00ebs mbi procesorin dhe TPS, ne qart\u00eb shohim se Cloud Spanner shkall\u00ebzohet mjaft mir\u00eb. Ngarkesa e madhe, e shkaktuar nga numri i madh i proceseve, kompensohet nga numri i madh i nyjeve n\u00eb klasterin Cloud Spanner. Megjith\u00ebse vonesa duket mjaft e lart\u00eb, ve\u00e7an\u00ebrisht kur punoni me 2400 procese, p\u00ebr t\u00eb fituar numra m\u00eb t\u00eb sakt\u00eb mund t\u00eb nevojitet ritetestim me 6 instance m\u00eb t\u00eb vogla t\u00eb motorit t\u00eb p\u00ebrllogaritjes. \u00c7do instanc\u00eb do t\u00eb kryej\u00eb nj\u00eb test YCSB n\u00eb vend t\u00eb nj\u00eb instance t\u00eb madhe CE me 6 teste paralele. K\u00ebshtu, do t\u00eb jet\u00eb m\u00eb e leht\u00eb t\u00eb dallosh vonesat e k\u00ebrkesave t\u00eb Cloud Spanner dhe vonesat e shtuar nga lidhja rrjetore midis Cloud Spanner dhe instance CE ku po kryhet testi.<\/p>\n<h3>Si e menaxhon Cloud Spanner si OLAP?<\/h3>\n<p><\/p>\n<h4>Pjes\u00ebtimi?<\/h4>\n<p>\nNdarja e t\u00eb dh\u00ebnave n\u00eb segmente fizikisht dhe\\\/ose logjikisht t\u00eb pavarura, t\u00eb quajtura pjes\u00eb, \u00ebsht\u00eb nj\u00eb koncept shum\u00eb i njohur, q\u00eb i takon shumic\u00ebs s\u00eb mekanizmave OLAP. Pjes\u00ebt mund t\u00eb p\u00ebrmir\u00ebsojn\u00eb ndjesh\u00ebm performanc\u00ebn e k\u00ebrkesave dhe mb\u00ebshtetje t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Nj\u00eb thellim m\u00eb i thell\u00eb n\u00eb pjes\u00eb do t\u00eb rezultonte n\u00eb nj\u00eb artikull t\u00eb ndar\u00eb (artikuj), prandaj le t\u00eb p\u00ebrmendim thjesht r\u00ebnd\u00ebsin\u00eb e ekzistenc\u00ebs s\u00eb nj\u00eb skeme t\u00eb pjes\u00ebtimit dhe sub-pjes\u00ebtimit. Aft\u00ebsia p\u00ebr t\u00eb ndar\u00eb t\u00eb dh\u00ebnat n\u00eb pjes\u00eb dhe madje m\u00eb tej n\u00eb n\u00ebnpjes\u00eb \u00ebsht\u00eb \u00e7el\u00ebsi p\u00ebr performanc\u00ebn e k\u00ebrkesave analitike.<\/p>\n<p>Cloud Spanner nuk mb\u00ebshtet pjes\u00ebt si t\u00eb tilla. Ai ndan t\u00eb dh\u00ebnat brenda n\u00eb ato q\u00eb njihen si <i>split<\/i>-e n\u00eb baz\u00eb t\u00eb intervaleve t\u00eb \u00e7el\u00ebsit primar. Ndarja kryhet automatikisht p\u00ebr t\u00eb balancuar ngarkes\u00ebn n\u00eb klasterin Cloud Spanner. Nj\u00eb funksion shum\u00eb i p\u00ebrshtatsh\u00ebm i Cloud Spanner \u00ebsht\u00eb ndarja e ngarkes\u00ebs baz\u00eb t\u00eb tabel\u00ebs prind (tabela q\u00eb nuk alternohet me ndonj\u00eb tjet\u00ebr). Spanner automatikisht p\u00ebrcakton n\u00ebse <i>split <\/i>t\u00eb dh\u00ebnat q\u00eb lexohen m\u00eb shpesh se t\u00eb dh\u00ebnat n\u00eb t\u00eb tjera <i>split<\/i>-e, dhe mund t\u00eb vendos\u00eb p\u00ebr ndarjen m\u00eb tej. K\u00ebshtu, m\u00eb shum\u00eb nyje mund t\u00eb jen\u00eb t\u00eb angazhuara n\u00eb nj\u00eb k\u00ebrkes\u00eb, e cila gjithashtu rrit n\u00eb m\u00ebnyr\u00eb efektive kapacitetin.<\/p>\n<h4>Ngarkimi i t\u00eb dh\u00ebnave?<\/h4>\n<p>\nMetoda Cloud Spanner p\u00ebr t\u00eb dh\u00ebna voluminoze \u00ebsht\u00eb e ngjashme me at\u00eb t\u00eb ngarkes\u00ebs normale. P\u00ebr t\u00eb arritur maksimalin e performanc\u00ebs, duhet t\u00eb ndiqni disa rekomandime, duke p\u00ebrfshir\u00eb:<\/p>\n<ul>\n<li>Klasifikoni t\u00eb dh\u00ebnat tuaja sipas \u00e7el\u00ebsit primar.<\/li>\n<li>B\u00ebni ato n\u00eb 10*<i>numri i nyjeve<\/i> seksioneve t\u00eb ve\u00e7anta.<\/li>\n<li>Krijoni nj\u00eb grup detyrash pune q\u00eb ngarkojn\u00eb t\u00eb dh\u00ebnat paralelisht.<\/li>\n<\/ul>\n<p>\nTeksa ngarkohet data, t\u00eb gjitha nyjet e Cloud Spanner shfryt\u00ebzohen.<\/p>\n<p>Ne p\u00ebrdor\u00ebm ngarkes\u00ebn A YCSB p\u00ebr t\u00eb gjeneruar nj\u00eb grup t\u00eb dh\u00ebnash prej 10M rreshtash.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: e mir\u00eb, e keqe, e sh\u00ebmtuar\" src=\"\/wp-content\/uploads\/2020\/02\/89b9c0353716be2d389b3e8da82781ad.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Testi i ngarkes\u00ebs u realizua n\u00eb motorin llogarit\u00ebs n1-standard-32 (32 vCPU, 120 GB RAM), dhe instanca testuese kurr\u00eb nuk u b\u00eb nj\u00eb ngushtic\u00eb n\u00eb teste.<br \/>\n** Cil\u00ebsimi me 1 nyje nuk rekomandohet p\u00ebr asnj\u00eb ngarkes\u00eb prodhuese.<\/i><\/p>\n<p>Si\u00e7 p\u00ebrmend\u00ebm m\u00eb sip\u00ebr, Cloud Spanner automatizimisht menaxhon ndarjet n\u00eb var\u00ebsi t\u00eb ngarkes\u00ebs s\u00eb tyre, prandaj rezultatet p\u00ebrmir\u00ebsohen pas disa p\u00ebrs\u00ebritjeve t\u00eb pasfollowuara t\u00eb testeve. Rezultatet e paraqitura k\u00ebtu jan\u00eb rezultatet m\u00eb t\u00eb mira q\u00eb kemi marr\u00eb. Duke par\u00eb numrat e m\u00ebsip\u00ebrm, mund t\u00eb shohim se Cloud Spanner (n\u00eb m\u00ebnyr\u00eb t\u00eb mir\u00eb) shkall\u00ebzohet me rritjen e numrit t\u00eb nyjeve n\u00eb klas\u00ebr. Numrat q\u00eb spikatin paraqesin mesatare shum\u00eb t\u00eb ul\u00ebt vonese, t\u00eb cilat bien n\u00eb kontrast me rezultatet e ngarkesave t\u00eb p\u00ebrziera (95% p\u00ebr lexim dhe 5% p\u00ebr shkruaj), si\u00e7 \u00ebsht\u00eb p\u00ebrshkruar n\u00eb seksionin m\u00eb sip\u00ebr.<\/p>\n<h4>Shkall\u00ebzimi?<\/h4>\n<p>\nRritja dhe ulja e numrit t\u00eb nyjeve n\u00eb Cloud Spanner \u00ebsht\u00eb nj\u00eb detyr\u00eb q\u00eb b\u00ebhet me nj\u00eb klik. N\u00ebse d\u00ebshironi t\u00eb ngarkoni t\u00eb dh\u00ebna shpejt, mund t\u00eb merrni parasysh p\u00ebrshkall\u00ebzimin e instanc\u00ebs n\u00eb maksimum (n\u00eb rastin ton\u00eb ishin 25 nyje n\u00eb rajonin US-EAST), dhe pastaj t\u00eb ulni numrin e nyjeve q\u00eb i p\u00ebrshtaten ngarkes\u00ebs tuaj t\u00eb zakonshme, pas ngarkimit t\u00eb t\u00eb gjitha t\u00eb dh\u00ebnave n\u00eb databaz\u00eb, duke pasur parasysh kufizimin prej 2 TB\/nyje.<\/p>\n<p>Na u kujtua p\u00ebr k\u00ebt\u00eb kufi edhe me nj\u00eb databaz\u00eb shum\u00eb m\u00eb t\u00eb vog\u00ebl. Pas disa cikleve t\u00eb testimit t\u00eb ngarkes\u00ebs, databaza jon\u00eb kishte nj\u00eb madh\u00ebsi prej rreth 155 GB, dhe kur u ulim n\u00eb nj\u00eb instanc\u00eb me 1 nyje mor\u00ebm k\u00ebt\u00eb gabim:<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: e mir\u00eb, e keqe, e sh\u00ebmtuar\" src=\"\/wp-content\/uploads\/2020\/02\/4a46c97e7943b5105bf178316dc67433.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa arriti t\u00eb zvog\u00eblojm\u00eb shkall\u00ebn nga 25 n\u00eb 2 instance, por mbet\u00ebm t\u00eb ngujuar n\u00eb dy nyje.<\/p>\n<p>Rritja dhe ulja e numrit t\u00eb nyjeve n\u00eb klas\u00ebn Cloud Spanner mund t\u00eb automatizohet duke p\u00ebrdorur REST API. Kjo mund t\u00eb jet\u00eb ve\u00e7an\u00ebrisht e dobishme p\u00ebr t\u00eb zvog\u00ebluar ngarkes\u00ebn e shtuar n\u00eb sistem gjat\u00eb or\u00ebve me fluks t\u00eb lart\u00eb.<\/p>\n<h4>Cila \u00ebsht\u00eb performanca e pyetjeve OLAP?<\/h4>\n<p>\nFillimisht, ne planifikuam t\u00eb dedikonim nj\u00eb koh\u00eb t\u00eb madhe p\u00ebr vler\u00ebsimin ton\u00eb t\u00eb Spanner p\u00ebr k\u00ebt\u00eb pjes\u00eb. Pas disa SELECT COUNT, ne menj\u00ebher\u00eb kuptuam se testimi do t\u00eb ishte i shkurt\u00ebr dhe se Spanner NUK do t\u00eb ishte i p\u00ebrshtatsh\u00ebm si motor OLAP. Pavar\u00ebsisht nga numri i nyjeve n\u00eb klas\u00eb, nj\u00eb zgjedhje e thjesht\u00eb e numrit t\u00eb rreshtave n\u00eb nj\u00eb tabel\u00eb me 10M rreshta zgjati nga 55 deri n\u00eb 60 sekonda. P\u00ebr m\u00eb tep\u00ebr, \u00e7do k\u00ebrkes\u00eb q\u00eb k\u00ebrkonte nj\u00eb volum m\u00eb t\u00eb madh memorje p\u00ebr ruajtjen e rezultateve nd\u00ebrmjet\u00ebse p\u00ebrfundoi me nj\u00eb gabim OOM.<\/p>\n<p><code>SELECT COUNT(DISTINCT(field0)) FROM usertable; \u2014 (10M vlera t\u00eb ndryshme)-&gt; SpoolingHashAggregateIterator e shkoi jasht\u00eb memorjes gjat\u00eb rreshtit t\u00eb ri.<\/code><\/p>\n<p>Disa numra p\u00ebr k\u00ebrkesat TPC-H mund t\u00eb gjenden n\u00eb artikullin e Todd Lipkon. <noindex><a rel=\"nofollow\" href=\"https:\/\/kudu.apache.org\/2017\/10\/23\/nosql-kudu-spanner-slides.html\">Nosql-kudu-spanner-slides.html<\/a><\/noindex>, diapozitivet 42 dhe 43. K\u00ebto numra bien dakord me rezultatet tona (fatkeq\u00ebsisht).<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: e mir\u00eb, e keqe, e sh\u00ebmtuar\" src=\"\/wp-content\/uploads\/2020\/02\/d070c839bbc62b1ba1bebbaf64127e93.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>4. P\u00ebrfundimet tona<\/h4>\n<p>\nDuke marr\u00eb parasysh gjendjen aktuale t\u00eb karakteristikave t\u00eb Cloud Spanner, \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb imagjinosh se ai do t\u00eb ishte nj\u00eb z\u00ebvend\u00ebsim i thjesht\u00eb p\u00ebr zgjidhjen ekzistuese OLTP, ve\u00e7an\u00ebrisht kur nevojat e tua do t\u00eb tejkalojn\u00eb ato. Do t\u00eb nevojitej nj\u00eb koh\u00eb e konsiderueshme p\u00ebr t\u00eb nd\u00ebrtuar nj\u00eb zgjidhje duke marr\u00eb parasysh disavantazhet e Cloud Spanner.<\/p>\n<p>Kur filluam vler\u00ebsimin e Cloud Spanner, prisnim q\u00eb funksionaliteti i menaxhimit t\u00eb ishte n\u00eb nivelin e duhur ose, t\u00eb pakt\u00ebn, jo shum\u00eb larg nga zgjidhjet e tjera Google SQL. Por na surprizoi mungesa totale e kopjeve rezerv\u00eb dhe kontrolli shum\u00eb i kufizuar mbi burimet. T\u00eb mos harrojm\u00eb munges\u00ebn e pamjeve, munges\u00ebn e mjedisit lokal t\u00eb zhvillimit, sekuenca q\u00eb nuk mb\u00ebshteten, JDBC pa mb\u00ebshtetje p\u00ebr DML dhe DDL dhe k\u00ebshtu me radh\u00eb.<\/p>\n<p>Pra t'u shkruar, \u00e7far\u00eb mund t\u00eb b\u00ebj\u00eb ai q\u00eb i nevojitet p\u00ebr t\u00eb shkall\u00ebzuar nj\u00eb baz\u00eb t\u00eb dh\u00ebnash transaksionale? Duket se aktualisht n\u00eb treg nuk ka nj\u00eb zgjidhje unike q\u00eb i p\u00ebrshtatet t\u00eb gjitha rasteve t\u00eb p\u00ebrdorimit. Ekzistojn\u00eb shum\u00eb zgjidhje me kod t\u00eb hapur dhe t\u00eb mbyllur (disa prej t\u00eb cilave p\u00ebrmenden n\u00eb k\u00ebt\u00eb artikull), \u00e7do nj\u00ebra ka forc\u00ebn dhe dob\u00ebsit\u00eb e saj, por asnj\u00ebra nuk ofron SaaS me SLA 99,999% dhe nj\u00eb nivel t\u00eb lart\u00eb konsistence. N\u00ebse nj\u00eb nivel i lart\u00eb SLA \u00ebsht\u00eb q\u00ebllimi juaj kryesor, dhe nuk jeni t\u00eb prirur t\u00eb krijoni nj\u00eb zgjidhje p\u00ebr disa mjete cloud, Cloud Spanner mund t\u00eb jet\u00eb zgjidhja q\u00eb po k\u00ebrkoni. Por duhet t\u00eb jeni t\u00eb vet\u00ebdijsh\u00ebm p\u00ebr t\u00eb gjitha kufizimet e tij.<\/p>\n<p>P\u00ebr t\u00eb qen\u00eb t\u00eb drejt\u00eb, duhet t\u00eb p\u00ebrmendet se Cloud Spanner u publikua p\u00ebr qasje t\u00eb p\u00ebrgjithshme vet\u00ebm n\u00eb pranver\u00ebn e vitit 2017, prandaj \u00ebsht\u00eb e arsyeshme t\u00eb pritet q\u00eb disa nga disavantazhet e tij aktuale mund t\u00eb zhduken n\u00eb fund (shpresoj), dhe kur ndodhi kjo, mund t\u00eb ndryshoj\u00eb loj\u00ebn. Pas t\u00eb gjitha, Cloud Spanner nuk \u00ebsht\u00eb thjesht nj\u00eb projekt jasht\u00eb p\u00ebr Google. Google e p\u00ebrdor at\u00eb si baz\u00eb p\u00ebr produkte t\u00eb tjera t\u00eb Google. Dhe kur Google koh\u00ebt e fundit z\u00ebvend\u00ebsoi Megastore n\u00eb Google Cloud Storage me Cloud Spanner, kjo i dha mund\u00ebsi Google Cloud Storage t\u00eb b\u00ebhej shum\u00eb i q\u00ebndruesh\u00ebm p\u00ebr listat e objekteve n\u00eb shkall\u00eb globale (\u00e7ka ende nuk i p\u00ebrket <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-it<\/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>Pra, shpres\u00eb ka ende\u2026 ne shpresojm\u00eb.<\/p>\n<p>K\u00ebtu p\u00ebrfundon gjith\u00e7ka. Si\u00e7 \u00ebsht\u00eb autori i artikullit, ne gjithashtu vazhdojm\u00eb t\u00eb shpresojm\u00eb, por \u00e7far\u00eb mendoni ju p\u00ebr k\u00ebt\u00eb? Shkruani n\u00eb komentet<\/p>\n<p><b>T\u00eb gjith\u00eb t\u00eb interesuarit i ftojm\u00eb t\u00eb vizitojn\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">webinarin falas<\/a><\/noindex> n\u00eb kuad\u00ebr t\u00eb t\u00eb cilit do t\u00eb flasim n\u00eb detaje mbi kursin<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\"> \u00abAWS p\u00ebr zhvilluesit\u00bb<\/a><\/noindex> from OTUS.<\/b><br \/>\n<br \/>Burimi: <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.2 - 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\/sq\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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: i mir\u00eb, i keq, i keqi | ProHoster","description":"P\u00ebrsh\u00ebndetje, habrovcan\u00eb. Tradicionalisht vazhdojm\u00eb t\u00eb ndajm\u00eb materiale interesante n\u00eb prag t\u00eb nisjes s\u00eb kurseve t\u00eb reja.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/69568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=69568"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/69568\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/69569"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=69568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=69568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=69568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}