{"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\/de\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","title":{"rendered":"Google Cloud Spanner: gut, schlecht, b\u00f6se","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>Hallo, Habr-Nutzer. Traditionell teilen wir interessantes Material im Vorfeld des Starts neuer Kurse. Heute haben wir speziell f\u00fcr euch einen Artikel \u00fcber Google Cloud Spanner vorbereitet, der an den Start des Kurses gebunden ist. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">\u201eAWS f\u00fcr Entwickler\u201c<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: gut, schlecht, b\u00f6se\" src=\"\/wp-content\/uploads\/2020\/02\/b27b8a09543d10b078480c317553ca46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Urspr\u00fcnglich ver\u00f6ffentlicht auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.lightspeedhq.com\/blog\/\">dem Blog von Lightspeed HQ<\/a><\/noindex>.<\/i><\/p>\n<p>Als Unternehmen, das zahlreiche cloudbasierte POS-L\u00f6sungen f\u00fcr Einzelh\u00e4ndler, Gastronomen und Online-Verk\u00e4ufer weltweit anbietet, nutzt Lightspeed verschiedene Arten von Datenbankplattformen f\u00fcr zahlreiche transaktionale, analytische und Suchanwendungen. Jede dieser Datenbankplattformen hat ihre eigenen St\u00e4rken und Schw\u00e4chen. Daher konnten wir es uns nicht entgehen lassen, Cloud Spanner \u2014 mit vielversprechenden Funktionen, die in der Welt der relationalen Datenbanken bisher unbekannt waren, wie nahezu unbegrenzte horizontale Skalierbarkeit und ein SLA von 99,999 % \u2014 in die H\u00e4nde zu bekommen!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nUm einen umfassenden \u00dcberblick \u00fcber unsere Erfahrungen mit Cloud Spanner sowie die Bewertungsma\u00dfst\u00e4be, die wir verwendet haben, zu geben, behandeln wir die folgenden Themen:<\/p>\n<ol>\n<li>Unsere Bewertungskriterien<\/li>\n<li>Cloud Spanner in K\u00fcrze<\/li>\n<li>Unsere Bewertung<\/li>\n<li>Unsere Erkenntnisse<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Google Cloud Spanner: gut, schlecht, b\u00f6se\" src=\"\/wp-content\/uploads\/2020\/02\/29ed599362fb189283faa9215c18297a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>1. Unsere Bewertungskriterien<\/h2>\n<p>\nBevor wir auf die Eigenschaften von Cloud Spanner, ihre \u00c4hnlichkeiten und Unterschiede zu anderen L\u00f6sungen auf dem Markt eingehen, lassen Sie uns zun\u00e4chst \u00fcber die Hauptanwendungsf\u00e4lle sprechen, die wir in Betracht gezogen haben, als es darum ging, wo wir Cloud Spanner in unserer Infrastruktur implementieren m\u00f6chten:<\/p>\n<ul>\n<li>Als Ersatz f\u00fcr die (dominante) traditionelle SQL-Datenbankl\u00f6sung<\/li>\n<li>Als OLTP-L\u00f6sung mit OLAP-Unterst\u00fctzung<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i><b>Hinweis:<\/b> Zur Vereinfachung und zum besseren Vergleich vergleicht dieser Artikel Cloud Spanner mit MySQL-Varianten der GCP Cloud SQL und Amazon AWS RDS.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h4>Einsatz von Cloud Spanner als Ersatz f\u00fcr traditionelle SQL-Datenbankl\u00f6sungen<\/h4>\n<p>\nIn einer Umgebung <i>traditioneller <\/i>Datenbanken, wenn die Reaktionszeit auf Datenbankanfragen nahe an oder sogar \u00fcber die vorgegebenen Schwellenwerte der Anwendung hinausgeht (haupts\u00e4chlich aufgrund einer steigenden Anzahl von Benutzern und\/oder Anfragen), gibt es mehrere M\u00f6glichkeiten, die Reaktionszeit auf ein acceptables Niveau zu senken. Viele dieser L\u00f6sungen erfordern jedoch manuelles Eingreifen.<\/p>\n<p>Zum Beispiel ist der erste Schritt, den man unternehmen sollte, einen Blick auf die verschiedenen Leistungsparameter der Datenbank zu werfen und diese so zu konfigurieren, dass sie optimal zu den Nutzungsmustern der Anwendungen passen. Wenn das nicht ausreicht, kann man vertikale oder horizontale skalierung der Datenbank in Betracht ziehen.<\/p>\n<p>Die vertikale Skalierung einer Anwendung umfasst die Aktualisierung der Serverinstanz, normalerweise durch Hinzuf\u00fcgen von mehr Prozessoren\/Kernen, mehr RAM, schnelleren Speicher usw. Das Hinzuf\u00fcgen zus\u00e4tzlicher Hardware-Ressourcen f\u00fchrt zu einer erh\u00f6hten Datenbankleistung, die haupts\u00e4chlich in Transaktionen pro Sekunde und Transaktionslatenz f\u00fcr OLTP-Systeme gemessen wird. Relationale Datenbanksysteme (die einen Multithreading-Ansatz verwenden), wie MySQL, skalieren gut vertikal.<\/p>\n<p>Dieser Ansatz hat einige Nachteile, aber der offensichtlichste ist die maximale Servergr\u00f6\u00dfe auf dem Markt. Sobald die Grenze der gr\u00f6\u00dften Serverinstanz erreicht ist, bleibt nur noch der Weg zur horizontalen Skalierung.<\/p>\n<p>Die horizontale Skalierung ist ein Ansatz, bei dem dem Cluster weitere Server hinzugef\u00fcgt werden, um idealerweise die Leistung linear mit der Anzahl der hinzugef\u00fcgten Server zu steigern. Die meisten <i>traditioneller <\/i>Datenbanksysteme skalieren schlecht horizontal oder gar nicht. Zum Beispiel kann MySQL f\u00fcr Lesevorg\u00e4nge horizontal skalieren, indem Slave-Reader hinzugef\u00fcgt werden, aber nicht f\u00fcr Schreibvorg\u00e4nge.<\/p>\n<p>Cloud Spanner hingegen kann aufgrund seiner Natur horizontal skalieren mit minimalem Eingreifen.<\/p>\n<p>Eine voll funktionsf\u00e4hige<i> Datenbank als Dienstleistung<\/i> sollte aus verschiedenen Perspektiven bewertet werden. Als Grundlage haben wir die beliebteste Cloud-Datenbank genommen \u2013 f\u00fcr Google, GCP Cloud SQL und f\u00fcr Amazon, AWS RDS. In unserer Bewertung haben wir uns auf folgende Kategorien konzentriert:<\/p>\n<ul>\n<li>Funktionsvergleich: SQL-Umfang, DDL, DML; Verbindungslibraries\/Connectoren, Transaktionsunterst\u00fctzung usw.<\/li>\n<li>Entwicklungsunterst\u00fctzung: Einfachheit der Entwicklung und des Testens.<\/li>\n<li>Administrationsunterst\u00fctzung: Verwaltung von Instanzen \u2013 beispielsweise Skalierung nach oben\/unten und Upgrade von Instanzen; SLA, Backup und Wiederherstellung; Sicherheit\/Zugriffskontrolle.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Einsatz von Cloud Spanner als OLTP-L\u00f6sung mit OLAP-Unterst\u00fctzung.<\/h4>\n<p>\nObwohl Google nicht ausdr\u00fccklich behauptet, dass Cloud Spanner f\u00fcr die analytische Verarbeitung konzipiert ist, teilt es einige Attribute mit anderen Mechanismen wie Apache Impala &amp; Kudu und YugaByte, die f\u00fcr OLAP-Workloads gedacht sind.<\/p>\n<p>Selbst wenn die Wahrscheinlichkeit gering w\u00e4re, dass Cloud Spanner eine konsistente horizontal skalierbare HTAP (hybride transaktionale\/analytische Verarbeitung) mit einem (mehr oder weniger) benutzbaren Funktionssatz f\u00fcr OLAP integriert hat, denken wir, dass dies unsere Aufmerksamkeit verdient.<\/p>\n<p>Vor diesem Hintergrund haben wir die folgenden Kategorien betrachtet:<\/p>\n<ul>\n<li>Datenladen, Indizes und Unterst\u00fctzung f\u00fcr Partitionierung.<\/li>\n<li>Abfrageleistung und DML.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Cloud Spanner in K\u00fcrze.<\/h2>\n<p>\nGoogle Spanner ist ein clusterbasiertes relationales Datenbankmanagementsystem (RDBMS), das Google f\u00fcr mehrere eigene Dienste verwendet. Google hat es Anfang 2017 f\u00fcr die Benutzer der Google Cloud Platform \u00f6ffentlich zug\u00e4nglich gemacht.<\/p>\n<p>Hier sind einige der Attribute von Cloud Spanner:<\/p>\n<ul>\n<li>Stark konsistentes skalierbares RDBMS-Cluster: nutzt Hardware-Zeit-Synchronisation, um die Konsistenz von Daten zu gew\u00e4hrleisten.<\/li>\n<li>Unterst\u00fctzung f\u00fcr transaktionale Quer-Tabellen-Transaktionen: Transaktionen k\u00f6nnen mehrere Tabellen umfassen \u2013 sie m\u00fcssen nicht auf eine Tabelle beschr\u00e4nkt sein (im Gegensatz zu Apache HBase oder Apache Kudu).<\/li>\n<li>Tabellen basierend auf dem Prim\u00e4rschl\u00fcssel: Alle Tabellen m\u00fcssen einen deklarierten Prim\u00e4rschl\u00fcssel (PK) haben, der aus mehreren Tabellen-Spalten bestehen kann. Tabellendaten werden in der Reihenfolge des PK gespeichert, was sie sehr effizient und schnell f\u00fcr die Suche nach PK macht. Wie bei anderen PK-basierten Systemen muss die Implementierung mit Bedacht auf vordefinierte Nutzungsszenarien modelliert werden, um <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/schema-and-data-model\">die beste Leistung zu erzielen.<\/a><\/noindex>.<\/li>\n<li>Wechselnde Tabellen: Tabellen k\u00f6nnen physische Abh\u00e4ngigkeiten zueinander haben. Die Zeilen der untergeordneten Tabelle k\u00f6nnen den Zeilen der \u00fcbergeordneten Tabelle zugeordnet werden. Dieser Ansatz beschleunigt die Suche nach Beziehungen, die in der Phase der Datenmodellierung definiert werden k\u00f6nnen, z. B. bei der gemeinsamen Platzierung von Kunden und deren Rechnungen.<\/li>\n<li>Indizes: Cloud Spanner unterst\u00fctzt sekund\u00e4re Indizes. Ein Index besteht aus indizierten Spalten und allen PK-Spalten. Auf Wunsch kann der Index auch andere nicht indizierte Spalten enthalten. Der Index kann mit der \u00fcbergeordneten Tabelle gewechselt werden, um Abfragen zu beschleunigen. Auf Indizes gelten verschiedene Einschr\u00e4nkungen, z. B. die maximale Anzahl zus\u00e4tzlicher Spalten, die im Index gespeichert werden k\u00f6nnen. Auch Abfragen \u00fcber Indizes k\u00f6nnen weniger geradlinig sein als in anderen RDBMS.<\/li>\n<\/ul>\n<p>\n<i>Cloud Spanner w\u00e4hlt Indizes nur selten automatisch aus. Insbesondere w\u00e4hlt Cloud Spanner keinen sekund\u00e4ren Index automatisch aus, wenn die Abfrage nach Spalten fragt, die nicht im <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/docs\/secondary-indexes\">Index <\/a><\/noindex>\u00bb.<\/i><\/p>\n<ul>\n<li>Service Level Agreement (SLA): Bereitstellung in einer Region mit SLA von 99,99 %; mehrregionale Bereitstellungen mit 99,999 % SLA. Obwohl das SLA selbst nur ein Vertrag und keine Garantie ist, glaube ich, dass die Mitarbeiter von Google einige pr\u00e4zise Daten haben, um eine solche schwerwiegende Behauptung zu machen. (Zur Information, 99,999 % entspricht 26,3 Sekunden Ausfallzeit pro Monat.)<\/li>\n<li>Mehr: <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>Hinweis:<\/b> Das Apache Tephra-Projekt erweitert die Unterst\u00fctzung f\u00fcr Transaktionen in Apache HBase (jetzt auch in Apache Phoenix als Beta-Version implementiert).<\/i><\/p><\/blockquote>\n<p><\/p>\n<h2>3. Unsere Einsch\u00e4tzung<\/h2>\n<p>\nWir haben alle die Aussagen von Google \u00fcber die Vorteile von Cloud Spanner gelesen \u2013 nahezu unbegrenztes horizontales Skalieren bei gleichbleibend hoher Konsistenz und sehr hohem SLA. Obwohl diese Anforderungen in jedem Fall extrem schwer zu erreichen sind, war es nicht unser Ziel, sie zu widerlegen. Lassen Sie uns stattdessen auf andere Dinge konzentrieren, die den meisten Datenbankbenutzern wichtig sind: Klarheit und Benutzerfreundlichkeit.<\/p>\n<h4>Wir haben Cloud Spanner als Ersatz f\u00fcr Sharded MySQL bewertet.<\/h4>\n<p>\nGoogle Cloud SQL und Amazon AWS RDS sind zwei der beliebtesten OLTP-Datenbanken auf dem Cloud-Markt und bieten eine sehr umfangreiche Funktionalit\u00e4t. Um diese Datenbanken jedoch \u00fcber die Gr\u00f6\u00dfe eines einzelnen Knotens hinweg zu skalieren, m\u00fcssen Sie Anwendungen partitionieren. Dieser Ansatz bringt zus\u00e4tzliche Komplexit\u00e4t sowohl f\u00fcr Anwendungen als auch f\u00fcr die Verwaltung mit sich. Wir haben untersucht, wie Spanner in das Szenario passt, mehrere Segmente in einer Instanz zu vereinen und welche Funktionen (falls vorhanden), m\u00f6glicherweise geopfert werden m\u00fcssen.<\/p>\n<h4>Unterst\u00fctzung f\u00fcr SQL, DML und DDL sowie Connector und Bibliotheken?<\/h4>\n<p>\nZun\u00e4chst muss beim Einsatz mit einer Datenbank ein Datenmodell erstellt werden. Wenn Sie denken, dass Sie JDBC Spanner an Ihr bevorzugtes SQL-Tool anschlie\u00dfen k\u00f6nnen, werden Sie feststellen, dass Sie Ihre Daten damit abfragen k\u00f6nnen, aber es nicht f\u00fcr die Erstellung von Tabellen oder \u00c4nderungen (DDL) oder f\u00fcr jegliche Insert-\/Update-\/Delete-Operationen (DML) nutzen k\u00f6nnen. Das offizielle JDBC von Google unterst\u00fctzt weder das eine noch das andere.<\/p>\n<blockquote><p><i>\u201eAktuell unterst\u00fctzen die Treiber keine DML- oder DDL-Befehle.\u201c<\/i><br \/>\nSpanner-Dokumentation<\/p><\/blockquote>\n<p>\nDie Situation mit der GCP-Konsole ist nicht besser \u2013 Sie k\u00f6nnen nur SELECT-Abfragen senden. Gl\u00fccklicherweise gibt es einen Community-JDBC-Treiber mit Unterst\u00fctzung f\u00fcr DML und DDL, einschlie\u00dflich Transaktionen. <noindex><a rel=\"nofollow\" href=\"http:\/\/github.com\/olavloite\/spanner-jdbc\">github.com\/olavloite\/spanner-jdbc<\/a><\/noindex>. Obwohl dieser Treiber \u00e4u\u00dferst n\u00fctzlich ist, \u00fcberrascht das Fehlen eines eigenen JDBC-Treibers von Google. Gl\u00fccklicherweise bietet Google eine recht umfassende Unterst\u00fctzung f\u00fcr Client-Bibliotheken (basierend auf gRPC): C#, Go, Java, node.js, PHP, Python und Ruby.<\/p>\n<p>Die nahezu zwingende Nutzung benutzerdefinierter APIs von Cloud Spanner (aufgrund des Fehlens von DDL und DML im JDBC) f\u00fchrt zu einigen Einschr\u00e4nkungen bei den zugeh\u00f6rigen Codebereichen, wie z. B. Verbindungspools oder Datenbankbindung-Frameworks (z. B. Spring MVC). Im Allgemeinen k\u00f6nnen Sie bei der Verwendung von JDBC freies einen bevorzugten Verbindungspool (z. B. HikariCP, DBCP, C3PO usw.) ausw\u00e4hlen, der getestet und gut funktioniert. Bei benutzerdefinierten APIs von Spanner m\u00fcssen wir uns auf die Frameworks\/Pools f\u00fcr Bindungen\/Sitzungen verlassen, die wir selbst erstellt haben.<\/p>\n<p>Die auf den Prim\u00e4rschl\u00fcssel (PK) ausgerichtete Struktur erm\u00f6glicht es Cloud Spanner, beim Zugriff auf Daten \u00fcber PK sehr schnell zu sein, f\u00fchrt jedoch auch zu einigen Problemen mit Abfragen.<\/p>\n<ul>\n<li>Sie k\u00f6nnen den Wert des Prim\u00e4rschl\u00fcssels nicht aktualisieren; Sie m\u00fcssen zun\u00e4chst den Datensatz mit dem urspr\u00fcnglichen PK l\u00f6schen und dann mit dem neuen Wert neu einf\u00fcgen. (Das \u00e4hnelt anderen PK-orientierten Datenbanken\/speichersystemen.)<\/li>\n<li>Alle UPDATE- und DELETE-Anweisungen m\u00fcssen den PK in WHERE angeben, daher kann es keine leeren DELETE all-Anweisungen geben \u2013 es muss immer eine Unterabfrage vorhanden sein, z. B.: UPDATE xxx WHERE id IN (SELECT id FROM table1)<\/li>\n<li>Fehlende Autoinkrement-Option oder etwas \u00c4hnliches, das eine Sequenz f\u00fcr das PK-Feld festlegt. Damit dies funktioniert, muss der entsprechende Wert auf der Anwendungsebene erstellt werden.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Sekund\u00e4re Indizes?<\/h4>\n<p>\nGoogle Cloud Spanner hat eine integrierte Unterst\u00fctzung f\u00fcr sekund\u00e4re Indizes. Das ist eine sehr angenehme Funktion, die nicht immer in anderen Technologien vorhanden ist. Apache Kudu unterst\u00fctzt derzeit \u00fcberhaupt keine sekund\u00e4ren Indizes, und Apache HBase unterst\u00fctzt Indizes nicht direkt, kann sie jedoch \u00fcber Apache Phoenix hinzuf\u00fcgen.<\/p>\n<p>Indizes in Kudu und HBase k\u00f6nnen als separate Tabellen mit unterschiedlicher Zusammensetzung der Prim\u00e4rschl\u00fcssel modelliert werden, aber die Atomarit\u00e4t der Operationen, die mit der \u00fcbergeordneten Tabelle und den zugeh\u00f6rigen Indextabellen ausgef\u00fchrt werden, muss auf Anwendungsebene gew\u00e4hrleistet werden und ist in der richtigen Implementierung nicht trivial.<\/p>\n<p>Wie im \u00dcberblick zu Cloud Spanner erw\u00e4hnt, k\u00f6nnen seine Indizes von MySQL-Indizes abweichen. Daher sollte beim Erstellen von Abfragen und der Profilierung besondere Vorsicht geboten sein, um sicherzustellen, dass der richtige Index dort verwendet wird, wo er erforderlich ist.<\/p>\n<h4>Sichten?<\/h4>\n<p>\nEin sehr beliebtes und n\u00fctzliches Objekt in Datenbanken sind Sichten. Sie k\u00f6nnen f\u00fcr eine Vielzahl von Anwendungsf\u00e4llen n\u00fctzlich sein; zwei meiner Favoriten sind die Ebene der logischen Abstraktion und die Sicherheitsebene. Leider unterst\u00fctzt Cloud Spanner keine Sichten. Das schr\u00e4nkt uns nur teilweise ein, da es auf Spaltenebene keine Detailgenauigkeit f\u00fcr Zugriffsberechtigungen gibt, wo Sichten eine akzeptable L\u00f6sung sein k\u00f6nnten.<\/p>\n<p>In der Cloud Spanner-Dokumentation im Abschnitt, der die Quoten und Beschr\u00e4nkungen detailliert beschreibt (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/spanner\/quotas\">spanner\/quotas<\/a><\/noindex>), es gibt insbesondere eine, die f\u00fcr einige Anwendungen problematisch sein kann: Cloud Spanner hat standardm\u00e4\u00dfig eine Einschr\u00e4nkung von maximal 100 Datenbanken pro Instanz. Offensichtlich kann dies ein ernsthaftes Hindernis f\u00fcr eine Datenbank darstellen, die daf\u00fcr gedacht ist, auf mehr als 100 Datenbanken zu skalieren. Gl\u00fccklicherweise haben wir nach einem Gespr\u00e4ch mit unserem technischen Vertreter bei Google herausgefunden, dass dieses Limit praktisch auf jeden Wert \u00fcber den Google-Support erh\u00f6ht werden kann.<\/p>\n<h4>Unterst\u00fctzung bei der Entwicklung?<\/h4>\n<p>\nCloud Spanner bietet recht anst\u00e4ndige Unterst\u00fctzung f\u00fcr Programmiersprachen zur Nutzung seiner API. Offiziell unterst\u00fctzte Bibliotheken sind f\u00fcr C#, Go, Java, node.js, PHP, Python und Ruby verf\u00fcgbar. Die Dokumentation ist detailliert, aber wie bei anderen modernen Technologien ist die Community im Vergleich zu den popul\u00e4rsten Datenbanktechnologien recht klein, was die Zeit f\u00fcr die L\u00f6sung weniger verbreiteter Anwendungsf\u00e4lle oder Probleme verl\u00e4ngern kann.<\/p>\n<h4>Wie sieht es also mit der Unterst\u00fctzung f\u00fcr lokale Entwicklungen aus?<\/h4>\n<p>\nWir haben keinen Weg gefunden, eine Cloud Spanner-Instanz in einer lokalen Umgebung zu erstellen. Das N\u00e4chste, was wir erhalten haben, ist ein Docker-Image. <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/cockroachdb\/cockroach\">CockroachDB<\/a><\/noindex>, was im Prinzip \u00e4hnlich ist, in der Praxis jedoch deutlich abweicht. Zum Beispiel kann CockroachDB PostgreSQL JDBC verwenden. Da die Entwicklungsumgebung so nah wie m\u00f6glich an der Produktionsumgebung sein sollte, ist Cloud Spanner nicht ideal, da man auf eine vollst\u00e4ndige Spanner-Instanz angewiesen ist. Zum Kostenersparen kann man eine Instanz f\u00fcr eine Region w\u00e4hlen.<\/p>\n<h4>Unterst\u00fctzung f\u00fcr die Verwaltung?<\/h4>\n<p>\nEs ist sehr einfach, eine Cloud Spanner-Instanz zu erstellen. Man muss nur zwischen der Erstellung einer multiregionalen oder einer Instanz f\u00fcr eine Region w\u00e4hlen, die Region(en) und die Anzahl der Knoten angeben. In weniger als einer Minute wird die Instanz hochgefahren und ist betriebsbereit.<\/p>\n<p>Einige grundlegende Metriken sind direkt auf der Spanner-Seite in der Google-Konsole verf\u00fcgbar. Detailliertere Ansichten sind \u00fcber Stackdriver erh\u00e4ltlich, wo man auch Schwellenwerte f\u00fcr Metriken und Benachrichtigungsrichtlinien festlegen kann.<\/p>\n<h4>Zugriff auf Ressourcen?<\/h4>\n<p>\nMySQL bietet umfangreiche und sehr detaillierte Einstellungen f\u00fcr Benutzerberechtigungen und -rollen. Der Zugriff auf eine bestimmte Tabelle oder sogar nur auf einen Teil ihrer Spalten kann leicht eingerichtet werden. Cloud Spanner verwendet das Google Identity &amp; Access Management (IAM) Tool, das es erm\u00f6glicht, Richtlinien und Berechtigungen nur auf sehr hohem Niveau festzulegen. Die detaillierteste Variante ist die Datenbankberechtigung, die in den meisten Produktionsf\u00e4llen nicht anwendbar ist. Diese Einschr\u00e4nkung zwingt Sie dazu, zus\u00e4tzliche Sicherheitsma\u00dfnahmen in Ihren Code, Ihre Infrastruktur oder beides einzuf\u00fcgen, um die unbefugte Nutzung der Spanner-Ressourcen zu verhindern.<\/p>\n<h4>Backups?<\/h4>\n<p>\nEinfach gesagt, Backup-Optionen gibt es in Cloud Spanner nicht. Obwohl die hohen Anforderungen des Google SLAs garantieren k\u00f6nnen, dass Sie aufgrund von Hardware- oder Datenbankausf\u00e4llen keine Daten verlieren, sind menschliche Fehler, Anwendungsfehler usw. nicht abgedeckt. Wir alle kennen die Regel: hohe Verf\u00fcgbarkeit ersetzt keine durchdachte Backup-Strategie. Derzeit besteht der einzige Weg, um Daten zu sichern, darin, sie \u00fcber eine softwareseitige Streaming-\u00dcbertragung aus der Datenbank in eine separate Speichermedium zu \u00fcbertragen.<\/p>\n<h4>Abfrageleistung?<\/h4>\n<p>\nF\u00fcr das Laden von Daten und das Testen von Abfragen haben wir den Yahoo! Cloud Serving Benchmark verwendet. In der folgenden Tabelle wird die Arbeitslast B YCSB mit einem Leseverh\u00e4ltnis von 95 % und einem Schreibverh\u00e4ltnis von 5 % gezeigt.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: gut, schlecht, b\u00f6se\" src=\"\/wp-content\/uploads\/2020\/02\/8fca14875af33c8ed3cd04b602c52b78.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Der Lasttest wurde auf dem Compute Engine (CE) n1-standard-32 (32 vCPU, 120 GB RAM) durchgef\u00fchrt, und der Testinstanz war niemals der Engpass in den Tests.<\/i><br \/>\n<i>** Die maximale Anzahl von Threads in einer YCSB-Instanz betr\u00e4gt 400. Insgesamt mussten sechs parallele Instanzen von YCSB-Tests gestartet werden, um insgesamt 2400 Threads zu erreichen.<\/i><\/p>\n<p>Anhand der Testergebnisse, insbesondere der Kombination von CPU-Last und TPS, sehen wir deutlich, dass Cloud Spanner gut skalierbar ist. Die hohe Last, die durch die gro\u00dfe Anzahl an Threads erzeugt wird, wird durch die gro\u00dfe Anzahl an Knoten im Cloud Spanner-Cluster ausgeglichen. Obwohl die Latenz ziemlich hoch erscheint, insbesondere bei der Verarbeitung von 2400 Threads, k\u00f6nnte f\u00fcr genauere Zahlen ein erneuter Test mit 6 kleineren Instanzen des Berechnungs-Engines erforderlich sein. Jede Instanz w\u00fcrde einen YCSB-Test im Gegensatz zu einer gro\u00dfen CE-Instanz mit 6 parallelen Tests durchf\u00fchren. Dadurch w\u00e4re es einfacher, die Latenzzeiten von Cloud Spanner und die durch die Netzwerkverbindung zwischen Cloud Spanner und der CE-Instanz, auf der der Test durchgef\u00fchrt wird, hinzugef\u00fcgten Latenzzeiten zu unterscheiden.<\/p>\n<h3>Wie schl\u00e4gt sich Cloud Spanner als OLAP?<\/h3>\n<p><\/p>\n<h4>Partitionierung?<\/h4>\n<p>\nDie Aufteilung von Daten in physisch und\/oder logisch unabh\u00e4ngige Segmente, die Partitionen genannt werden, ist ein sehr beliebtes Konzept, das den meisten OLAP-Mechanismen eigen ist. Partitionen k\u00f6nnen die Abfrageleistung und die Wartbarkeit der Datenbank erheblich verbessern. Eine detailliertere Betrachtung von Partitionen w\u00fcrde in einen separaten Artikel f\u00fchren, daher wollen wir nur die Bedeutung eines Partitionierungs- und Sub-Partitionierungsschemas erw\u00e4hnen. Die M\u00f6glichkeit, Daten in Partitionen und sogar weiter in Subpartitionen zu unterteilen, ist der Schl\u00fcssel zur Leistung analytischer Abfragen.<\/p>\n<p>Cloud Spanner unterst\u00fctzt Partitionen nicht im klassischen Sinne. Es unterteilt die Daten intern in sogenannte <i>Splits<\/i>- auf Basis von Prim\u00e4rschl\u00fcsselbereichen. Die Teilung erfolgt automatisch, um die Last im Cloud Spanner-Cluster auszugleichen. Eine sehr n\u00fctzliche Funktion von Cloud Spanner besteht darin, die Grundlast der \u00fcbergeordneten Tabelle (einer Tabelle, die nicht mit einer anderen abwechselt) zu partitionieren. Spanner erkennt automatisch, ob <i>Splits <\/i>Daten, die h\u00e4ufiger gelesen werden, als Daten in anderen <i>Splits<\/i>- enthalten sind, und kann die Entscheidung \u00fcber eine weitere Aufteilung treffen. Dadurch k\u00f6nnen mehr Knoten in der Abfrage genutzt werden, was ebenfalls die Durchsatzleistung erh\u00f6ht.<\/p>\n<h4>Daten laden?<\/h4>\n<p>\nDie Cloud Spanner-Methode f\u00fcr gro\u00dfe Daten ist die gleiche wie beim normalen Laden. Um die maximale Leistung zu erreichen, sollten Sie einige Empfehlungen befolgen, darunter:<\/p>\n<ul>\n<li>Sortieren Sie Ihre Daten nach dem Prim\u00e4rschl\u00fcssel.<\/li>\n<li>Teilen Sie sie in 10*<i>Anzahl der Knoten<\/i> separaten Sektionen.<\/li>\n<li>Erstellen Sie eine Reihe von Arbeitsaufgaben, die die Daten parallel laden.<\/li>\n<\/ul>\n<p>\nBei einem solchen Datensatz werden alle Knoten von Cloud Spanner genutzt.<\/p>\n<p>Wir haben die Arbeitslast A YCSB verwendet, um einen Datensatz aus 10 Millionen Zeilen zu generieren.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: gut, schlecht, b\u00f6se\" src=\"\/wp-content\/uploads\/2020\/02\/89b9c0353716be2d389b3e8da82781ad.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>* Der Lasttest wurde auf der Compute Engine n1-standard-32 (32 vCPU, 120 GB RAM) durchgef\u00fchrt, und die Testinstanz war w\u00e4hrend der Tests niemals ein Engpass.<br \/>\n** Eine Konfiguration mit 1 Knoten wird f\u00fcr jede Produktionslast nicht empfohlen.<\/i><\/p>\n<p>Wie oben erw\u00e4hnt, verarbeitet Cloud Spanner automatisch die Splits je nach ihrer Last, weshalb sich die Ergebnisse nach mehreren aufeinanderfolgenden Testwiederholungen verbessern. Die hier pr\u00e4sentierten Ergebnisse sind die besten, die wir erzielt haben. Wenn wir auf die oben genannten Zahlen schauen, k\u00f6nnen wir sehen, wie Cloud Spanner (gut) mit der Anzahl der Knoten im Cluster skalierbar ist. Die herausragenden Zahlen sind extrem niedrige Durchschnittslatenzen, die mit den Ergebnissen gemischter Arbeitslasten (95 % Lesen und 5 % Schreiben) kontrastieren, wie im obigen Abschnitt beschrieben.<\/p>\n<h4>Skalierung?<\/h4>\n<p>\nDas Erh\u00f6hen und Verringern der Anzahl der Cloud Spanner-Knoten erfolgt mit einem Klick. Wenn Sie Daten schnell laden m\u00f6chten, k\u00f6nnen Sie in Erw\u00e4gung ziehen, die Instanz auf maximal zu erh\u00f6hen (in unserem Fall waren es 25 Knoten in der Region US-EAST), und dann die Anzahl der Knoten zu reduzieren, die f\u00fcr Ihre normale Last geeignet sind, nachdem alle Daten in der Datenbank sind, wobei Sie das Limit von 2 TB\/Knoten im Auge behalten.<\/p>\n<p>Wir wurden auf dieses Limit aufmerksam gemacht, selbst mit einer viel kleineren Datenbank. Nach mehreren Durchl\u00e4ufen von Lasttests hatte unsere Datenbank eine Gr\u00f6\u00dfe von etwa 155 GB, und beim Verringern auf eine Instanz mit 1 Knoten erhielten wir den folgenden Fehler:<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: gut, schlecht, b\u00f6se\" src=\"\/wp-content\/uploads\/2020\/02\/4a46c97e7943b5105bf178316dc67433.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir konnten die Skalierung von 25 auf 2 Instanzen reduzieren, aber wir blieben bei zwei Knoten stecken.<\/p>\n<p>Die Erh\u00f6hung und Verringerung der Anzahl der Knoten im Cloud Spanner-Cluster kann \u00fcber die REST-API automatisiert werden. Dies kann besonders hilfreich sein, um die erh\u00f6hte Last auf das System w\u00e4hrend der stark frequentierten Zeiten zu reduzieren.<\/p>\n<h4>Leistung von OLAP-Abfragen?<\/h4>\n<p>\nUrspr\u00fcnglich hatten wir geplant, einen erheblichen Teil unserer Bewertung von Spanner auf diesen Aspekt zu konzentrieren. Nach mehreren SELECT COUNT war uns sofort klar, dass die Tests kurz ausfallen w\u00fcrden und dass Spanner NICHT als OLAP-Engine geeignet sein w\u00fcrde. Unabh\u00e4ngig von der Knotenanzahl im Cluster dauerte eine einfache Abfrage der Anzahl der Zeilen in einer Tabelle mit 10 Mio. Zeilen zwischen 55 und 60 Sekunden. Dar\u00fcber hinaus schlug jede Abfrage, die mehr Speicher zur Speicherung von Zwischenergebnissen erforderte, mit einem OOM-Fehler fehl.<\/p>\n<p><code>SELECT COUNT(DISTINCT(field0)) FROM usertable; \u2014 (10M verschiedene Werte) \u2192 SpoolingHashAggregateIterator hat w\u00e4hrend der neuen Zeile den Speicher \u00fcberschritten.<\/code><\/p>\n<p>Einige Zahlen zu TPC-H-Abfragen sind im Artikel von Todd Lipkon zu finden, <noindex><a rel=\"nofollow\" href=\"https:\/\/kudu.apache.org\/2017\/10\/23\/nosql-kudu-spanner-slides.html\">Nosql-kudu-spanner-slides.html<\/a><\/noindex>, Folien 42 und 43. Diese Zahlen stimmen (leider) mit unseren eigenen Ergebnissen \u00fcberein.<\/p>\n<p><img decoding=\"async\" alt=\"Google Cloud Spanner: gut, schlecht, b\u00f6se\" src=\"\/wp-content\/uploads\/2020\/02\/d070c839bbc62b1ba1bebbaf64127e93.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>4. Unsere Erkenntnisse<\/h4>\n<p>\nAngesichts des aktuellen Stands der Funktionen von Cloud Spanner ist es schwer vorstellbar, dass es eine einfache L\u00f6sung f\u00fcr bestehende OLTP-Anforderungen bieten kann, insbesondere wenn Ihre Bed\u00fcrfnisse dar\u00fcber hinausgehen. Es w\u00e4re erforderlich, erheblich Zeit in den Aufbau einer L\u00f6sung zu investieren, die die Schw\u00e4chen von Cloud Spanner ber\u00fccksichtigt.<\/p>\n<p>Als wir mit der Bewertung von Cloud Spanner begannen, erwarteten wir, dass die Verwaltungsfunktionen auf dem Niveau oder zumindest nicht weit entfernt von anderen Google SQL-L\u00f6sungen sein w\u00fcrden. Doch wir waren \u00fcberrascht \u00fcber das vollst\u00e4ndige Fehlen von Backups und die sehr eingeschr\u00e4nkte Zugriffskontrolle auf Ressourcen. Ganz zu schweigen von dem Fehlen von Sichten, dem Fehlen einer lokalen Entwicklungsumgebung, nicht unterst\u00fctzten Sequenzen, JDBC ohne Unterst\u00fctzung f\u00fcr DML und DDL usw.<\/p>\n<p>Wo soll man also hin, wenn man eine transaktionale Datenbank skalieren muss? Anscheinend gibt es derzeit auf dem Markt keine universelle L\u00f6sung, die f\u00fcr alle Anwendungsf\u00e4lle geeignet ist. Es gibt zahlreiche L\u00f6sungen mit geschlossenen und offenen Quellcodes (von denen einige in diesem Artikel erw\u00e4hnt werden), jede mit ihren eigenen St\u00e4rken und Schw\u00e4chen, aber keine bietet ein SaaS mit einer SLA von 99,999 % und einem hohen Ma\u00df an Konsistenz. Wenn ein hohes SLA-Niveau Ihr Hauptziel ist und Sie nicht geneigt sind, eine eigene L\u00f6sung f\u00fcr mehrere Cloud-Umgebungen zu entwickeln, k\u00f6nnte Cloud Spanner die L\u00f6sung sein, nach der Sie suchen. Aber Sie sollten sich \u00fcber alle seine Einschr\u00e4nkungen im Klaren sein.<\/p>\n<p>Fairerweise sollte man erw\u00e4hnen, dass Cloud Spanner erst im Fr\u00fchjahr 2017 f\u00fcr die Allgemeinheit freigegeben wurde, daher ist es vern\u00fcnftig zu erwarten, dass einige seiner aktuellen M\u00e4ngel letztendlich behoben werden (hoffentlich), und wenn das geschieht, k\u00f6nnte es das Spiel \u00e4ndern. Schlie\u00dflich ist Cloud Spanner nicht nur ein Nebenprojekt von Google. Google verwendet es als Basis f\u00fcr andere Google-Produkte. Und als Google k\u00fcrzlich Megastore in Google Cloud Storage durch Cloud Spanner ersetzt hat, erm\u00f6glichte dies Google Cloud Storage, eine strikt konsistente Liste von Objekten weltweit bereitzustellen (was nach wie vor nicht f\u00fcr <noindex><a rel=\"nofollow\" href=\"https:\/\/cloudplatform.googleblog.com\/2018\/02\/how-Google-Cloud-Storage-offers-strongly-consistent-object-listing-thanks-to-Spanner.html\">Amazon\u2019s<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/cloudplatform.googleblog.com\/2018\/02\/how-Google-Cloud-Storage-offers-strongly-consistent-object-listing-thanks-to-Spanner.html\">S3<\/a><\/noindex>).<\/p>\n<p>Die Hoffnung ist also noch da\u2026 wir hoffen.<\/p>\n<p>Das war's. Wie der Autor des Artikels hoffen auch wir weiter, was denken Sie dar\u00fcber? Schreiben Sie Ihre Meinung in die Kommentare.<\/p>\n<p><b>Alle Interessierten laden wir ein, an unserem <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\">kostenlosen Webinar<\/a><\/noindex> teilzunehmen, in dem wir ausf\u00fchrlich \u00fcber den Kurs<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/eoP2\/\"> \u201eAWS f\u00fcr Entwickler\u201c<\/a><\/noindex> von OTUS berichten werden.<\/b><br \/>\n<br \/>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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: gut, schlecht, h\u00e4sslich | ProHoster","description":"Hallo, Habr-Anh\u00e4nger. Traditionell teilen wir weiterhin interessante Materialien im Vorfeld der bevorstehenden neuen Kurse.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/google-cloud-spanner-horoshij-plohoj-zloj","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/69568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=69568"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/69568\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/69569"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=69568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=69568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=69568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}