{"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\/it\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","title":{"rendered":"Google Cloud Spanner: buono, cattivo, brutto","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>Ciao, amici di Habr. Continuiamo a condividere contenuti interessanti in vista del lancio dei nuovi corsi. Oggi, per voi, abbiamo tradotto un articolo su Google Cloud Spanner, in concomitanza con l\u2019inizio del corso. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">\u00abAWS per sviluppatori\u00bb<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: buono, cattivo, brutto\" src=\"\/wp-content\/uploads\/2020\/02\/b27b8a09543d10b078480c317553ca46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Originariamente pubblicato su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.lightspeedhq.com\/blog\/\">blog di Lightspeed HQ<\/a><\/noindex>.<\/i><\/p>\n<p>Come azienda che offre una vasta gamma di soluzioni POS cloud per rivenditori, ristoratori e venditori online in tutto il mondo, Lightspeed utilizza diversi tipi di piattaforme di database per vari casi d'uso transazionali, analitici e di ricerca. Ognuna di queste piattaforme ha i propri punti di forza e di debolezza. Pertanto, quando Google ha lanciato Cloud Spanner sul mercato, promettendo funzionalit\u00e0 mai viste prima nel mondo dei database relazionali, come quasi illimitata scalabilit\u00e0 orizzontale e un accordo sul livello di servizio (SLA) del 99,999%, non potevamo perdere l\u2019opportunit\u00e0 di metterci le mani sopra!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPer fornire una panoramica completa della nostra esperienza con Cloud Spanner e dei criteri di valutazione che abbiamo utilizzato, esamineremo i seguenti argomenti:<\/p>\n<ol>\n<li>I nostri criteri di valutazione<\/li>\n<li>Cloud Spanner in poche parole<\/li>\n<li>La nostra valutazione<\/li>\n<li>Le nostre conclusioni<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Google Cloud Spanner: buono, cattivo, brutto\" src=\"\/wp-content\/uploads\/2020\/02\/29ed599362fb189283faa9215c18297a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>1. I nostri criteri di valutazione<\/h2>\n<p>\nPrima di approfondire le caratteristiche di Cloud Spanner, le sue somiglianze e differenze rispetto ad altre soluzioni sul mercato, parliamo prima dei principali casi d'uso che avevamo in mente quando consideravamo dove implementare Cloud Spanner nella nostra infrastruttura:<\/p>\n<ul>\n<li>Come sostituto (dominante) della tradizionale soluzione per database SQL<\/li>\n<li>Come soluzione OLTP con supporto OLAP<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i><b>Nota:<\/b> Per facilit\u00e0 e comodit\u00e0 di confronto, questo articolo confronta Cloud Spanner con le varianti MySQL delle famiglie di soluzioni GCP Cloud SQL e Amazon AWS RDS.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h4>L'utilizzo di Cloud Spanner come sostituto della tradizionale soluzione per database SQL<\/h4>\n<p>\nNell'ambito <i>delle tradizionali <\/i>banche dati, quando il tempo di risposta alle richieste del database si avvicina o addirittura supera i valori soglia definiti dall'applicazione (principalmente a causa dell'aumento del numero di utenti e\/o richieste), esistono diversi modi per ridurre il tempo di risposta a livelli accettabili. Tuttavia, la maggior parte di queste soluzioni richiede un intervento manuale.<\/p>\n<p>Ad esempio, il primo passo da compiere \u00e8 esaminare le varie opzioni del database relative alle prestazioni e configurarle in modo che corrispondano al meglio ai modelli degli scenari di utilizzo delle applicazioni. Se ci\u00f2 non dovesse essere sufficiente, \u00e8 possibile optare per un'elevazione verticale o orizzontale del database.<\/p>\n<p>L'elevazione verticale dell'applicazione implica l'aggiornamento dell'istanza del server, solitamente aumentando il numero di processori\/core, la capacit\u00e0 di memoria RAM e le prestazioni dello storage, ecc. L'aggiunta di maggiori risorse hardware porta a un aumento delle prestazioni del database, misurato principalmente in transazioni al secondo e nella latenza delle transazioni per i sistemi OLTP. I sistemi di database relazionali (che utilizzano un approccio multithreading), come MySQL, scalano bene in verticale.<\/p>\n<p>Questo approccio presenta diversi svantaggi, ma il pi\u00f9 evidente \u00e8 la dimensione massima del server disponibile sul mercato. Non appena si raggiunge il limite dell'istanza server pi\u00f9 grande, l'unica soluzione rimasta \u00e8 la scalabilit\u00e0 orizzontale.<\/p>\n<p>La scalabilit\u00e0 orizzontale \u00e8 un approccio in cui vengono aggiunti pi\u00f9 server al cluster per idealmente aumentare linearmente le prestazioni con l'aggiunta di server. La maggior parte <i>delle tradizionali <\/i>dei sistemi di gestione dei database scalano male orizzontalmente o non scalano affatto. Ad esempio, MySQL pu\u00f2 scalare orizzontalmente per le operazioni di lettura, aggiungendo lettori slave, ma non pu\u00f2 scalare orizzontalmente per le operazioni di scrittura.<\/p>\n<p>D'altra parte, grazie alla sua natura, Cloud Spanner pu\u00f2 facilmente scalare orizzontalmente con il minimo intervento.<\/p>\n<p>Un database<i> come servizio<\/i> deve essere valutato da diverse angolazioni. Come base, abbiamo preso il database pi\u00f9 popolare nel cloud \u2014 Google Cloud SQL per Google e AWS RDS per Amazon. Nella nostra valutazione ci siamo concentrati sulle seguenti categorie:<\/p>\n<ul>\n<li>Corrispondenza delle funzionalit\u00e0: estensione SQL, DDL, DML; librerie di connessione \/ connettori, supporto per le transazioni, e cos\u00ec via.<\/li>\n<li>Supporto allo sviluppo: facilit\u00e0 di sviluppo e testing.<\/li>\n<li>Supporto all'amministrazione: gestione delle istanze \u2014 ad esempio, scalabilit\u00e0 verticale\/orizzontale e aggiornamenti delle istanze; SLA, backup e ripristino; sicurezza \/ controllo accesso.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Utilizzo di Cloud Spanner come soluzione OLTP con supporto OLAP<\/h4>\n<p>\nSebbene Google non affermi esplicitamente che Cloud Spanner sia destinato all'elaborazione analitica, esso condivide alcune caratteristiche con altri processori, come Apache Impala &amp; Kudu e YugaByte, progettati per carichi di lavoro OLAP.<\/p>\n<p>Anche se ci fosse una piccola possibilit\u00e0 che Cloud Spanner integrasse un motore HTAP (elaborazione ibrida transazionale \/ analitica) orizzontalmente scalabile e con un set di funzionalit\u00e0 OLAP (pi\u00f9 o meno) utilizzabile, riteniamo che meriterebbe la nostra attenzione.<\/p>\n<p>Tenendo questo in mente, abbiamo considerato le seguenti categorie:<\/p>\n<ul>\n<li>Caricamento dati, indici e supporto per il partizionamento<\/li>\n<li>Prestazioni delle query e DML<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Cloud Spanner in poche parole<\/h2>\n<p>\nGoogle Spanner \u00e8 un sistema di gestione di database relazionali distribuiti (RDBMS) che Google utilizza per molti dei propri servizi. Google l'ha reso accessibile agli utenti di Google Cloud Platform all'inizio del 2017.<\/p>\n<p>Ecco alcune delle caratteristiche di Cloud Spanner:<\/p>\n<ul>\n<li>Cluster RDBMS altamente coerente e scalabile: utilizza la sincronizzazione hardware del tempo per garantire la coerenza dei dati.<\/li>\n<li>Supporto delle transazioni cross-table: le transazioni possono coprire pi\u00f9 tabelle e non devono necessariamente essere limitate a una sola tabella (a differenza di Apache HBase o Apache Kudu).<\/li>\n<li>Tabelle basate su chiavi primarie: tutte le tabelle devono avere una chiave primaria (PK) dichiarata, che pu\u00f2 consistere in pi\u00f9 colonne. I dati delle tabelle sono memorizzati in base alla PK, rendendoli molto efficienti e rapidi per la ricerca per PK. Come altre implementazioni basate su PK, la progettazione deve essere modellata tenendo conto di casi d'uso predefiniti per ottenere <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/schema-and-data-model\">le migliori prestazioni.<\/a><\/noindex>.<\/li>\n<li>Tabelle alternate: le tabelle possono avere dipendenze fisiche tra loro. Le righe della tabella figlia possono essere correlate alle righe della tabella genitore. Questo approccio accelera la ricerca delle relazioni che possono essere definite nella fase di modellazione dei dati, ad esempio, durante l'hosting congiunto dei clienti e delle loro fatture.<\/li>\n<li>Indici: Cloud Spanner supporta indici secondari. Un indice \u00e8 composto da colonne indicizzate e tutte le colonne PK. Se desiderato, l'indice pu\u00f2 includere anche altre colonne non indicizzate. L'indice pu\u00f2 alternarsi alla tabella genitore per velocizzare le query. Aggiungono a questo, gli indici sono soggetti a varie restrizioni, come il numero massimo di colonne aggiuntive che possono essere memorizzate nell'indice. Inoltre, le query tramite indici potrebbero non essere cos\u00ec dirette come in altri RDBMS.<\/li>\n<\/ul>\n<p>\n<i>\"Cloud Spanner seleziona l'indice automaticamente solo in rari casi. In particolare, Cloud Spanner non seleziona automaticamente un indice secondario se la query richiede colonne che non sono memorizzate in <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/secondary-indexes\">nell'indice <\/a><\/noindex>\u00bb.<\/i><\/p>\n<ul>\n<li>Accordo sul livello di servizio (SLA): distribuzione in una regione con SLA del 99,99%; distribuzioni multi-regionali con SLA del 99,999%. Anche se l'accordo sul livello di servizio \u00e8 solo un accordo e non una garanzia, ritengo che i dipendenti di Google abbiano dati sufficienti per fare un'affermazione cos\u00ec seria. (Per riferimento, il 99,999% significa 26,3 secondi di inattivit\u00e0 del servizio al mese.)<\/li>\n<li>Di pi\u00f9: <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>Nota:<\/b> Il progetto Apache Tephra aggiunge supporto avanzato per le transazioni in Apache HBase (ora implementato anche in Apache Phoenix come versione beta).<\/i><\/p><\/blockquote>\n<p><\/p>\n<h2>3. La nostra valutazione<\/h2>\n<p>\nQuindi, abbiamo tutti letto le affermazioni di Google sui vantaggi di Cloud Spanner: scalabilit\u00e0 orizzontale praticamente illimitata mantenendo un'alta coerenza e un SLA molto elevato. Anche se questi requisiti sono estremamente difficili da raggiungere, il nostro obiettivo non era smentirli. Concentrati su altre cose che preoccupano la maggior parte degli utenti di database: integrit\u00e0 e facilit\u00e0 d'uso.<\/p>\n<h4>Abbiamo valutato Cloud Spanner come sostituto di Sharded MySQL<\/h4>\n<p>\nGoogle Cloud SQL e Amazon AWS RDS sono due dei sistemi di gestione di database relazionali (OLTP) pi\u00f9 popolari nel mercato cloud, e offrono un ampio set di funzionalit\u00e0. Tuttavia, per scalare questi database oltre le dimensioni di un singolo nodo, \u00e8 necessario implementare il partitioning delle applicazioni. Questo approccio aggiunge complessit\u00e0 sia per le applicazioni che per la gestione. Abbiamo esaminato come Spanner si inserisce nello scenario della fusione di pi\u00f9 segmenti in un'unica istanza e quali funzionalit\u00e0 (se ce ne sono) potrebbero dover essere sacrificate.<\/p>\n<h4>Supporto per SQL, DML e DDL, oltre a connettori e librerie?<\/h4>\n<p>\nPrima di tutto, quando si inizia con qualsiasi database, \u00e8 necessario creare un modello di dati. Se pensi di poter collegare JDBC Spanner al tuo strumento SQL preferito, scoprirai che puoi interrogare i tuoi dati, ma non puoi usarlo per creare tabelle o fare modifiche (DDL) o per operazioni di inserimento\/aggiornamento\/cancellazione (DML). Il JDBC ufficiale di Google non supporta n\u00e9 l'uno n\u00e9 l'altro.<\/p>\n<blockquote><p><i>\u00abAttualmente i driver non supportano operatori DML o DDL\u00bb.<\/i><br \/>\nDocumentazione Spanner<\/p><\/blockquote>\n<p>\nCon la console GCP la situazione non \u00e8 migliore: puoi inviare solo query SELECT. Fortunatamente, esiste un driver JDBC con supporto per DML e DDL dalla comunit\u00e0, incluso il supporto per le transazioni. <noindex><a rel=\"nofollow\" href=\"http:\/\/github.com\/olavloite\/spanner-jdbc\">github.com\/olavloite\/spanner-jdbc<\/a><\/noindex>Anche se questo driver \u00e8 estremamente utile, sorprende l'assenza di un driver JDBC nativo di Google. Fortunatamente, Google offre un supporto piuttosto ampio per le librerie client (basate su gRPC): C#, Go, Java, node.js, PHP, Python e Ruby.<\/p>\n<p>L'uso praticamente obbligatorio delle API personalizzate di Cloud Spanner (a causa dell'assenza di DDL e DML in JDBC) porta a alcune limitazioni per le aree di codice correlate, come i pool di connessione o i framework di binding del database (ad esempio, Spring MVC). In generale, quando si utilizza JDBC, \u00e8 possibile scegliere liberamente il proprio pool di connessione preferito (ad esempio, HikariCP, DBCP, C3PO, ecc.) che \u00e8 stato testato e funziona bene. Nel caso delle API personalizzate di Spanner, dobbiamo fare affidamento sui framework\/pool di binding\/sessione che abbiamo creato noi stessi.<\/p>\n<p>La struttura basata sulla chiave primaria (PK) consente a Cloud Spanner di accedere ai dati molto rapidamente tramite la PK, ma porta anche ad alcuni problemi con le query.<\/p>\n<ul>\n<li>Non puoi aggiornare il valore di una chiave primaria; devi prima eliminare la registrazione con la PK originale e reinserirla con il nuovo valore. (Questo \u00e8 simile ad altri database\/storage basati su chiavi primarie.)<\/li>\n<li>Qualsiasi operatore UPDATE e DELETE deve specificare la PK nella clausola WHERE, quindi non possono esserci operatori DELETE all vuoti \u2014 deve sempre esserci una sottoquery, ad esempio: UPDATE xxx WHERE id IN (SELECT id FROM table1)<\/li>\n<li>Manca l'opzione di auto-incremento o qualcosa di simile che stabilisca una sequenza per il campo PK. Per funzionare, il valore corrispondente deve essere generato dal lato dell'applicazione.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Indici secondari?<\/h4>\n<p>\nGoogle Cloud Spanner ha un supporto integrato per gli indici secondari. Questa \u00e8 una caratteristica molto apprezzata, che non \u00e8 sempre presente in altre tecnologie. Apache Kudu attualmente non supporta affatto gli indici secondari, mentre Apache HBase non supporta gli indici direttamente, ma pu\u00f2 aggiungerli tramite Apache Phoenix.<\/p>\n<p>Gli indici in Kudu e HBase possono essere modellati come una tabella separata con una composizione diversa delle chiavi primarie, ma l'atomicit\u00e0 delle operazioni eseguite sulla tabella principale e sulle tabelle degli indici correlate deve essere gestita a livello di applicazione e non \u00e8 banale in un'implementazione corretta.<\/p>\n<p>Come accennato nella panoramica di Cloud Spanner, i suoi indici possono differire dagli indici di MySQL. Pertanto, \u00e8 necessario prestare particolare attenzione nella costruzione delle query e nel profiling, per garantire l'uso dell'indice appropriato dove necessario.<\/p>\n<h4>Che ne dici delle viste?<\/h4>\n<p>\nLe viste sono oggetti molto popolari e utili nel database. Possono essere vantaggiose per un gran numero di casi d'uso; due dei miei preferiti sono il livello di astrazione logica e il livello di sicurezza. Sfortunatamente, Cloud Spanner NON supporta le viste. Tuttavia, questo ci limita solo parzialmente, poich\u00e9 non ci sono dettagli a livello di colonna per le autorizzazioni di accesso, dove le viste potrebbero essere una soluzione accettabile.<\/p>\n<p>Nella documentazione di Cloud Spanner, nella sezione che descrive in dettaglio le quote e i limiti (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/quotas\">spanner\/quotas<\/a><\/noindex>), c'\u00e8, in particolare, una che potrebbe essere problematica per alcune applicazioni: Cloud Spanner ha, di default, un limite massimo di 100 database per istanza. \u00c8 evidente che questo pu\u00f2 rappresentare un serio ostacolo per un database progettato per scalare oltre i 100 database. Fortunatamente, dopo aver parlato con il nostro rappresentante tecnico di Google, abbiamo scoperto che questo limite pu\u00f2 essere aumentato praticamente a qualsiasi valore attraverso il supporto di Google.<\/p>\n<h4>Supporto per lo sviluppo?<\/h4>\n<p>\nCloud Spanner offre un supporto piuttosto buono per i linguaggi di programmazione che lavorano con la sua API. Le librerie ufficialmente supportate sono in C#, Go, Java, node.js, PHP, Python e Ruby. La documentazione \u00e8 abbastanza dettagliata, ma, come nel caso di altre tecnologie all'avanguardia, la comunit\u00e0 \u00e8 piuttosto piccola rispetto alle tecnologie di database pi\u00f9 popolari, il che pu\u00f2 portare a un aumento del tempo necessario per risolvere casi d'uso o problemi meno comuni.<\/p>\n<h4>E quindi, che dire del supporto allo sviluppo locale?<\/h4>\n<p>\nNon siamo riusciti a trovare un modo per creare un'istanza di Cloud Spanner in un ambiente locale. L'approccio pi\u00f9 simile che abbiamo ottenuto \u00e8 un'immagine Docker <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/cockroachdb\/cockroach\">CockroachDB<\/a><\/noindex>, che in linea di principio \u00e8 simile, ma nella pratica \u00e8 molto diversa. Ad esempio, CockroachDB pu\u00f2 utilizzare PostgreSQL JDBC. Poich\u00e9 l'ambiente di sviluppo deve essere il pi\u00f9 vicino possibile all'ambiente di produzione, Cloud Spanner non \u00e8 ideale, poich\u00e9 \u00e8 necessario fare affidamento su un'istanza completa di Spanner. Per risparmiare costi, puoi optare per un'istanza per una sola regione.<\/p>\n<h4>Supporto per l'amministrazione?<\/h4>\n<p>\nCreare un'istanza di Cloud Spanner \u00e8 molto semplice. \u00c8 sufficiente scegliere tra la creazione di un'istanza multiregionale o di un'istanza per una sola regione, specificare la regione(e) e il numero di nodi. In meno di un minuto, l'istanza sar\u00e0 avviata e pronta all'uso.<\/p>\n<p>Diverse metriche di base sono direttamente disponibili sulla pagina di Spanner nella console di Google. Viste pi\u00f9 dettagliate sono disponibili tramite Stackdriver, dove puoi anche impostare soglie per le metriche e le politiche di notifica.<\/p>\n<h4>Accesso alle risorse?<\/h4>\n<p>\nMySQL offre impostazioni di autorizzazione\/ruoli utente ampie e molto dettagliate. \u00c8 possibile configurare facilmente l'accesso a una tabella specifica o anche solo a un sottoinsieme delle sue colonne. Cloud Spanner utilizza lo strumento Google Identity &amp; Access Management (IAM), che consente di stabilire politiche e autorizzazioni solo a livello molto elevato. L'opzione pi\u00f9 dettagliata \u00e8 l'autorizzazione a livello di database, che non si adatta alla maggior parte dei casi d'uso in produzione. Questa limitazione costringe ad aggiungere ulteriori misure di sicurezza nel proprio codice, infrastruttura o entrambi per prevenire l'uso non autorizzato delle risorse Spanner.<\/p>\n<h4>Backup?<\/h4>\n<p>\nIn parole semplici, non ci sono backup in Cloud Spanner. Sebbene i rigorosi requisiti di SLA di Google possano garantire che non perderai dati a causa di guasti hardware o del database, ci sono comunque rischi dovuti a errori umani, difetti delle applicazioni, ecc. Sappiamo tutti che la regola \u00e8: un'alta disponibilit\u00e0 non sostituisce una strategia di backup adeguata. Attualmente, l'unico modo per eseguire il backup dei dati \u00e8 attraverso la trasmissione in streaming delle informazioni dal database a un ambiente di archiviazione separato.<\/p>\n<h4>Prestazioni delle query?<\/h4>\n<p>\nPer caricare i dati e testare le query, abbiamo utilizzato Yahoo! Cloud Serving Benchmark. La tabella qui sotto mostra il carico di lavoro B di YCSB con un rapporto di lettura del 95% e scrittura del 5%.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: buono, cattivo, brutto\" src=\"\/wp-content\/uploads\/2020\/02\/8fca14875af33c8ed3cd04b602c52b78.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Il test di carico \u00e8 stato eseguito su un motore di calcolo (CE) n1-standard-32 (32 vCPU, 120 GB di memoria), e l'istanza di test non \u00e8 mai stata un collo di bottiglia nei test.<\/i><br \/>\n<i>** Il numero massimo di thread in un singolo esempio di YCSB \u00e8 400. \u00c8 stato necessario avviare sei istanze parallele dei test YCSB per un totale di 2400 thread.<\/i><\/p>\n<p>Osservando i risultati dei test, in particolare la combinazione del carico sulla CPU e TPS, vediamo chiaramente che Cloud Spanner scala abbastanza bene. L'elevato carico generato da un numero elevato di thread \u00e8 compensato da un numero maggiore di nodi nel cluster di Cloud Spanner. Anche se la latenza appare piuttosto alta, soprattutto con 2400 thread, potrebbero essere necessari nuovi test con sei istanze inferiore del motore di calcolo per ottenere numeri pi\u00f9 precisi. Ogni istanza eseguir\u00e0 un test YCSB invece di un'unica grande istanza CE con sei test paralleli. In questo modo, sar\u00e0 pi\u00f9 facile distinguere tra la latenza delle richieste di Cloud Spanner e quella aggiunta dalla connessione di rete tra Cloud Spanner e l'istanza CE su cui viene eseguito il test.<\/p>\n<h3>Come si comporta Cloud Spanner come OLAP?<\/h3>\n<p><\/p>\n<h4>Partizionamento?<\/h4>\n<p>\nLa suddivisione dei dati in segmenti fisicamente e\/o logicamente indipendenti, noti come partizioni, \u00e8 un concetto molto popolare presente nella maggior parte dei meccanismi OLAP. Le partizioni possono migliorare notevolmente le prestazioni delle query e la manutenibilit\u00e0 del database. Un approfondimento sulle partizioni meriterebbe un articolo a parte, quindi limitiamoci a menzionare l'importanza di avere uno schema di partizionamento e sub-partizionamento. La possibilit\u00e0 di suddividere i dati in partizioni e addirittura in sottopartizioni \u00e8 fondamentale per le prestazioni delle query analitiche.<\/p>\n<p>Cloud Spanner non supporta le partizioni come tali. Divide i dati al suo interno in quelli cos\u00ec detti <i>split<\/i>-i basati su intervalli di chiavi primarie. La suddivisione avviene automaticamente per bilanciare il carico nel cluster di Cloud Spanner. Una funzionalit\u00e0 molto utile di Cloud Spanner \u00e8 la suddivisione del carico di base della tabella genitore (tabella che non interseca con un'altra). Spanner determina automaticamente se <i>split <\/i>i dati vengono letti pi\u00f9 frequentemente rispetto ai dati in altri <i>split<\/i>-ha, e pu\u00f2 prendere decisioni su ulteriori suddivisioni. In questo modo, possono essere coinvolti pi\u00f9 nodi nella richiesta, il che aumenta anche efficacemente la larghezza di banda.<\/p>\n<h4>Caricamento dati?<\/h4>\n<p>\nIl metodo Cloud Spanner per il caricamento massivo dei dati \u00e8 lo stesso del caricamento normale. Per ottenere le massime prestazioni, \u00e8 necessario seguire alcune raccomandazioni, tra cui:<\/p>\n<ul>\n<li>Ordina i tuoi dati per chiave primaria.<\/li>\n<li>Dividili in 10*<i>numero di nodi<\/i> sezioni separate.<\/li>\n<li>Crea un insieme di attivit\u00e0 lavorative che caricano i dati in parallelo.<\/li>\n<\/ul>\n<p>\nCon questo tipo di caricamento dati, tutti i nodi di Cloud Spanner sono utilizzati.<\/p>\n<p>Abbiamo utilizzato il carico di lavoro A YCSB per generare un set di dati di 10M righe.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: buono, cattivo, brutto\" src=\"\/wp-content\/uploads\/2020\/02\/89b9c0353716be2d389b3e8da82781ad.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Il test di carico \u00e8 stato eseguito sul motore di calcolo n1-standard-32 (32 vCPU, 120 GB di memoria), e l'istanza di test non \u00e8 mai stata un collo di bottiglia nei test.<br \/>\n** La configurazione con 1 nodo non \u00e8 consigliata per nessun carico di lavoro produttivo.<\/i><\/p>\n<p>Come accennato in precedenza, Cloud Spanner gestisce automaticamente gli split in base al loro carico, quindi i risultati migliorano dopo diversi passaggi consecutivi del test. I risultati presentati qui sono i migliori che abbiamo ottenuto. Guardando ai numeri sopra, possiamo vedere come Cloud Spanner scala (bene) con l'aumento del numero di nodi nel cluster. I numeri che spiccano rappresentano latenze medie estremamente basse, che contrastano con i risultati dei carichi di lavoro misti (95% lettura e 5% scrittura), come descritto nella sezione sopra.<\/p>\n<h4>Scalabilit\u00e0?<\/h4>\n<p>\nAumentare e diminuire il numero di nodi in Cloud Spanner \u00e8 un compito che si svolge con un solo clic. Se desideri caricare rapidamente i dati, puoi considerare di aumentare l'istanza al massimo (nel nostro caso erano 25 nodi nella regione US-EAST), per poi ridurre il numero di nodi a quello pi\u00f9 adatto al tuo carico abituale, tenendo presente il limite di 2 TB per nodo.<\/p>\n<p>Ci \u00e8 stato ricordato di questo limite anche con un database molto pi\u00f9 piccolo. Dopo diverse esecuzioni di test di carico, il nostro database aveva una dimensione di circa 155 GB e riducendo a un'istanza singola abbiamo ricevuto il seguente errore:<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: buono, cattivo, brutto\" src=\"\/wp-content\/uploads\/2020\/02\/4a46c97e7943b5105bf178316dc67433.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiamo riusciti a ridurre la scalabilit\u00e0 da 25 a 2 istanze, ma siamo rimasti bloccati su due nodi.<\/p>\n<p>L'aumento e la diminuzione del numero di nodi nel cluster Cloud Spanner possono essere automatizzati tramite REST API. Questo pu\u00f2 essere particolarmente utile per ridurre il carico elevato sul sistema durante le ore di punta.<\/p>\n<h4>Qual \u00e8 la performance delle query OLAP?<\/h4>\n<p>\nInizialmente, avevamo pianificato di dedicare un tempo significativo alla nostra valutazione di Spanner in questa parte. Dopo diverse SELECT COUNT, ci siamo subito resi conto che il test sarebbe stato breve e che Spanner NON sarebbe stato adatto come motore OLAP. Indipendentemente dal numero di nodi nel cluster, la semplice selezione del numero di righe in una tabella di 10M righe ha impiegato da 55 a 60 secondi. Inoltre, qualsiasi query che richiedeva una maggiore quantit\u00e0 di memoria per memorizzare i risultati intermedi \u00e8 terminata con un errore OOM.<\/p>\n<p><code>SELECT COUNT(DISTINCT(field0)) FROM usertable; \u2014 (10M valori distinti) -&gt; SpoolingHashAggregateIterator esaurito durante la creazione della nuova riga.<\/code><\/p>\n<p>Alcuni numeri per le query TPC-H possono essere trovati nell'articolo di Todd Lipcon <noindex><a rel=\"nofollow\" href=\"https:\/\/kudu.apache.org\/2017\/10\/23\/nosql-kudu-spanner-slides.html\">Nosql-kudu-spanner-slides.html<\/a><\/noindex>, diapositive 42 e 43. Questi numeri sono in linea con i nostri risultati (sfortunatamente).<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: buono, cattivo, brutto\" src=\"\/wp-content\/uploads\/2020\/02\/d070c839bbc62b1ba1bebbaf64127e93.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>4. Le nostre conclusioni<\/h4>\n<p>\nDate le attuali funzionalit\u00e0 di Cloud Spanner, \u00e8 difficile immaginare una semplice sostituzione per le soluzioni OLTP esistenti, specialmente quando le vostre esigenze supereranno le sue capacit\u00e0. Sarebbe necessario investire un tempo considerevole per costruire una soluzione tenendo conto delle limitazioni di Cloud Spanner.<\/p>\n<p>Quando abbiamo iniziato a valutare Cloud Spanner, ci aspettavamo che le sue funzionalit\u00e0 di gestione fossero a livello, o comunque non molto distanti da altre soluzioni Google SQL. Ma siamo rimasti sorpresi dalla completa mancanza di backup e dal controllo degli accessi ai risorse molto limitato. Per non parlare dell'assenza di viste, della mancanza di un ambiente di sviluppo locale, di sequenze non supportate, JDBC senza supporto per DML e DDL e cos\u00ec via.<\/p>\n<p>Quindi, dove pu\u00f2 andare chi deve scalare un database transazionale? Sembra che attualmente sul mercato non ci sia una soluzione unica adatta a tutti gli use case. Ci sono molte soluzioni sia open che closed source (alcune delle quali menzionate in questo articolo), ognuna con i propri punti di forza e di debolezza, ma nessuna di esse offre un SaaS con SLA del 99,999% e un alto grado di coerenza. Se un alto livello di SLA \u00e8 il tuo obiettivo principale e non sei inclino a costruire una soluzione personalizzata per diversi ambienti cloud, Cloud Spanner potrebbe essere la risposta che cerchi. Ma devi essere consapevole di tutte le sue limitazioni.<\/p>\n<p>A scopo di giustizia, \u00e8 importante notare che Cloud Spanner \u00e8 stato reso disponibile al pubblico solo nella primavera del 2017, quindi \u00e8 ragionevole aspettarsi che alcuni dei suoi attuali difetti possano eventualmente scomparire (si spera), e quando ci\u00f2 accadr\u00e0, potrebbe cambiare il gioco. Dopotutto, Cloud Spanner non \u00e8 solo un progetto esterno per Google. Google lo utilizza come base per altri prodotti Google. E quando Google ha recentemente sostituito Megastore in Google Cloud Storage con Cloud Spanner, ci\u00f2 ha reso Google Cloud Storage rigorosamente coerente per gli elenchi di oggetti a livello globale (cosa che non si applica ancora a <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<\/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>Quindi, c'\u00e8 ancora speranza\u2026 noi speriamo.<\/p>\n<p>Questo \u00e8 tutto. Proprio come l'autore dell'articolo, noi continuiamo a sperare, e cosa ne pensi tu? Scrivi nei commenti<\/p>\n<p><b>Tutti coloro che sono interessati sono invitati a visitare il nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">un webinar gratuito<\/a><\/noindex> nel quale parleremo in dettaglio del corso<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\"> \u00abAWS per sviluppatori\u00bb<\/a><\/noindex> di OTUS.<\/b><br \/>\n<br \/>Fonte: <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 4.9.10 - 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. \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\" \/>\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\/it\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47 Google Cloud Spanner: buono, cattivo, brutto | ProHoster","description":"Ciao, amici di Habr. Come di consueto, continuiamo a condividere contenuti interessanti in vista dell'inizio di nuovi corsi. Oggi, specialmente per voi, abbiamo tradotto un articolo su Google Cloud Spanner, in concomitanza con il lancio del corso \"AWS per sviluppatori\". Pubblicato originariamente nel blog di Lightspeed HQ. Come azienda che offre numerose soluzioni POS cloud per rivenditori, ristoratori e venditori online in tutto il mondo, Lightspeed utilizza","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/69568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=69568"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/69568\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/69569"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=69568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=69568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=69568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}