Bigtable
Bigtable ist eine dünnbesetzte Tabelle, die auf Milliarden von Zeilen und Tausende von Spalten, sodass Sie Terabyte oder sogar Petabyte von Daten. Ein einzelner Wert in jeder Zeile ist indexiert. Dieser Wert wird als Zeilenschlüssel bezeichnet. Bigtable eignet sich ideal zum Speichern großer Mengen an Single-Key-Schlüsseln mit niedriger Latenz. Es unterstützt einen hohen Lese- und Schreibdurchsatz bei niedrigem Latenz und ist eine ideale Datenquelle für MapReduce-Vorgänge.
Anwendungen können über mehrere Clientbibliotheken, darunter eine unterstützte Erweiterung der Apache HBase-Bibliothek für Java, auf Bigtable zugreifen. Daher fügt es sich in das bestehende Apache-System der Open-Source-Software für Big Data ein.
Die leistungsstarken Backend-Server von Bigtable bieten einige entscheidende Vorteile gegenüber einer selbstverwalteten HBase-Installation:
- Unglaublich hohe Skalierbarkeit. Bigtable skaliert direkt hoch proportional zur Anzahl der Maschinen in Ihrem Cluster. Selbstverwaltete HBase einen Engpass im Design hat, der die Leistung einschränkt, wird ein bestimmter Grenzwert erreicht. In Bigtable gibt es das nicht sodass Sie Ihren Cluster skalieren können, um mehr Lesevorgänge und schreibt.
- Einfache Verwaltung. Bigtable verarbeitet Aktualisierungen und Neustarts transparent und sorgt automatisch für die Langlebigkeit der Daten. Fügen Sie zum Replizieren Ihrer Daten ein zweites zu Ihrer Instanz hinzu und die Replikation wird automatisch gestartet. Nicht mehr Verwalten von Replikaten oder Regionen entwerfen Sie einfach Ihre Tabellenschemas. Bigtable erledigt den Rest für Sie.
- Größenänderung des Clusters ohne Ausfallzeiten. Sie können die Größe eines Elements um eine große Last zu bewältigen, und dann um die Größe des Clusters wieder zu reduzieren – ohne Ausfallzeiten. Nach der Änderung nicht so groß ist, dauert es unter Last normalerweise nur wenige Minuten, Bigtable die Leistung auf allen Knoten in Ihrem Cluster.
Einsatzmöglichkeit
Bigtable eignet sich ideal für Anwendungen, die einen hohen Durchsatz und Skalierbarkeit für Schlüssel/Wert-Paare, wobei jeder Wert in der Regel nicht größer als 10 ist MB Bigtable eignet sich auch hervorragend als Speicher-Engine für Batch-MapReduce. Abläufe, Streamverarbeitung/-analysen und ML-Anwendungen.
Sie können Bigtable verwenden, um die folgenden Datentypen zu speichern und abzufragen:
- Zeitachsendaten wie CPU- und Speicherauslastung im Zeitablauf für mehrere Server
- Marketingdaten wie Einkaufsverlauf und Kundenpräferenzen
- Finanzdaten wie Transaktionsverlauf, Aktienkurse und Wechselkurse.
- Daten des Internets der Dinge wie Nutzungsberichte von Energiezählern und Haushaltsgeräte.
- Grafikdaten wie Informationen darüber, wie Nutzer miteinander verbunden sind
Bigtable-Speichermodell
Bigtable speichert Daten in äußerst skalierbaren Tabellen, von denen jede ist eine sortierte Schlüssel/Wert-Zuordnung. Die Tabelle besteht aus Zeilen, von denen jede typischerweise eine einzelne Entität beschreibt, und Spalten, die für jede Zeile individuelle Werte beinhalten. Jede Zeile wird von einem einzelnen Zeilenschlüssel indexiert, und Spalten, die die miteinander in Zusammenhang stehen, werden normalerweise in einer Spaltenfamilie gruppiert. Jedes Spalte wird durch eine Kombination aus der Spaltenfamilie und einer Spalte Qualifier: Dies ist ein eindeutiger Name innerhalb der Spaltenfamilie.
Jeder Schnittpunkt einer Zeile und Spalte kann mehrere Zellen enthalten. Jede Zelle enthält eine eindeutige, mit Zeitstempel versehene Version der Daten für diese Zeile und Spalte. Durch das Speichern mehrerer Zellen in einer Spalte wird erfasst, wie die gespeicherten Daten für dass sich diese Zeile und Spalte im Laufe der Zeit geändert hat. Bigtable-Tabellen sind sparse; Wird eine Spalte in einer bestimmten Zeile nicht verwendet, verbraucht sie keine Leerzeichen.
In dieser Abbildung gibt es ein paar Dinge zu beachten:
- Spalten können in einer Zeile unbenutzt sein.
- Jede Zelle in einer bestimmten Zeile und Spalte hat einen eindeutigen Zeitstempel (t).
Bigtable-Architektur
Das folgende Diagramm zeigt eine vereinfachte Version der Gesamtarchitektur von Bigtable:
Wie im Diagramm gezeigt, laufen alle Clientanfragen durch einen Frontend-Server, bevor sie an einen Knoten in Bigtable gesendet werden. Im ursprünglichen Bigtable-Artikel werden diese Knoten als "Tablet-Server" (Tabellenreihenserver) bezeichnet. Die werden zu einem Bigtable-Cluster zusammengefasst, der zu einer Bigtable-Instanz, einem Container für den Cluster.
Jeder Knoten im Cluster verarbeitet einen Teil der Anfragen an den Cluster. Von Durch Hinzufügen von Knoten zu einem Cluster können Sie die Anzahl gleichzeitiger Anfragen erhöhen. die der Cluster verarbeiten kann. Durch das Hinzufügen von Knoten wird auch der maximale Durchsatz erhöht für den Cluster. Wenn Sie die Replikation durch Hinzufügen zusätzlicher Cluster aktivieren, verschiedene Arten von Traffic an verschiedene Cluster senden. Wenn dann eine nicht mehr verfügbar ist, können Sie ein Failover auf einen anderen Cluster durchführen.
Eine Bigtable-Tabelle ist in Blöcke von fortlaufenden Zeilen unterteilt, die Tabellenreihen genannt werden. (Tabellenreihen sind HBase-Regionen ähnlich.) Tabellenreihen werden in Colossus, dem Dateisystem von Google, im SSTable-Format gespeichert. Eine SSTable stellt eine dauerhafte, geordnete unveränderliche Map von Schlüsseln und Karten dar, in der sowohl Schlüssel als auch Werte aus beliebigen Byte-Strings bestehen. Jedes Tablet ist die mit einem bestimmten Bigtable-Knoten verknüpft sind. Zusätzlich zu den SSTable-Dateien werden alle Schreibvorgänge im gemeinsamen Log von Colossus gespeichert, sobald sie werden von Bigtable anerkannt, was für eine erhöhte Langlebigkeit sorgt.
Wichtig: Daten werden nie in Knoten von Bigtable selbst gespeichert. Jeder Knoten enthält Verweise auf einen in Colossus gespeicherten Satz von Tabellenreihen. Deshalb gilt:
- Tabellenreihen von einem Knoten auf einen anderen werden schnell ausgeglichen, werden die Daten nicht kopiert. Bigtable aktualisiert die Zeiger für jeden Knoten.
- Die Wiederherstellung nach dem Ausfall eines Bigtable-Knotens ist schnell, Es müssen nur Metadaten zum Ersatzknoten migriert werden.
- Wenn ein Knoten in Bigtable fehlschlägt, gehen keine Daten verloren.
Weitere Informationen zum Arbeiten mit diesen grundlegenden Bausteinen finden Sie unter Instanzen, Cluster und Knoten.
Load-Balancing
Jede Zone in Bigtable wird von einem Primärvorgang verwaltet, der die Arbeitslast und das Datenvolumen im Cluster ausgleicht. Durch diesen Vorgang wird eine geschäftsreichere oder größere in der Hälfte und führt weniger zugängliche/kleinere Tablets zusammen. und bei Bedarf auf die Knoten umverteilen. Wenn eine bestimmte Tabellenreihe Trafficspitzen erfährt, halbiert Bigtable die Tabellenreihe und verschiebt eine der neuen Tabellenreihen auf einen anderen Knoten. Bigtable verwaltet die Aufteilung, automatisch zusammenführen und ausgleichen. Dadurch sparen Sie sich die Mühe, der Verabreichung Ihrer Tablets. Leistung verstehen bietet mehr Details zu diesem Prozess.
Für die beste Schreibleistung von Bigtable ist es wichtig, Schreibvorgänge so gleichmäßig wie möglich auf Knoten zu verteilen. Eine Möglichkeit, das zu erreichen, Zeilenschlüssel verwenden, die keiner vorhersehbaren Reihenfolge folgen. Nutzernamen sind beispielsweise mehr oder weniger gleichmäßig im Alphabet verteilt, sodass ein Nutzername am Anfang des Zeilenschlüssels normalerweise für eine gleichmäßige Verteilung der Schreibvorgänge sorgt.
Gleichzeitig ist es sinnvoll, zusammengehörige Zeilen so zu gruppieren, dass sie nebeneinander liegen, wodurch es viel effizienter ist, mehrere Zeilen gleichzeitig zu lesen. Wenn Sie beispielsweise verschiedene Arten von Wetterdaten über einen Zeitraum speichern, könnte der Zeilenschlüssel aus dem Ort, an dem die Daten gesammelt wurden, und aus einem Zeitstempel bestehen (Beispiel: WashingtonDC#201803061617
). Dieser Zeilenschlüsseltyp würde alle Daten von einem Ort in einen zusammenhängenden Bereich von Zeilen gruppieren. Für andere Orte würde der Zeilenschlüssel mit einer anderen Kennzeichnung beginnen. Wenn an vielen Orten Daten im gleichen Rhythmus gesammelt werden, wären sie immer noch gleichmäßig über alle Tabellenreihen verteilt.
Weitere Information über die Auswahl eines passenden Zeilenschlüssels für Ihre Daten finden Sie unter Zeilenschlüssel wählen.
Unterstützte Datentypen
Bigtable behandelt alle Daten für die meisten Anwendungen als unverarbeitete Bytestrings. Die einzige Situation, in der Bigtable versucht, den Typ zu ermitteln, ist bei Inkrementierungsvorgängen, bei denen das Ziel eine als 8-Byte-Big-Endian-Wert codierte 64-Bit-Ganzzahl sein muss.
Speicher- und Laufwerksauslastung
In den folgenden Abschnitten wird dargestellt, wie mehrere Komponenten von Bigtable die Speicher- und Laufwerksauslastung Ihrer Instanz beeinflussen.
Nicht verwendete Spalten:
Spalten, die nicht in einer Bigtable-Zeile verwendet werden, Zeilenabstand. Jede Zeile ist im Wesentlichen eine Sammlung von Schlüssel/Wert-Paaren, wobei der Schlüssel eine Kombination aus Spaltenfamilie, Spaltenqualifizierer und Zeitstempel. Wenn eine Zeile keinen Wert für eine bestimmte Spalte enthält, wird der Der Schlüsselwert-Eintrag ist nicht vorhanden.
Spaltenqualifizierer
Spaltenqualifizierer belegen Platz in einer Zeile, da jeder Spaltenqualifizierer, der in einer Zeile genutzt wird, in dieser Zeile gespeichert ist. Daher ist es oft effizient, Spalten zu verwenden, Kennzeichner als Daten.
Weitere Informationen zu Spaltenqualifizierern finden Sie unter Spalten.
Verdichtungen
Bigtable schreibt Ihre Tabellen in regelmäßigen Abständen neu, um gelöschte Einträge zu entfernen und die Daten neu anzuordnen, damit die Lese- und Schreibvorgänge effizienter werden. Dieser Prozess wird als Verdichtung bezeichnet. Es gibt keine Konfigurationseinstellungen für Verdichtungen. Bigtable verdichtet Ihre Daten automatisch.
Mutationen und Löschungen
Mutationen oder Änderungen beanspruchen mehr Speicherplatz, da Mutationen von Bigtable sequenziell gespeichert und nur von Zeit zu Zeit verdichtet werden. Wenn Bigtable eine Tabelle verdichtet, werden alle Werte entfernt, die nicht mehr benötigt werden. Wenn Sie den Wert in einer Zelle aktualisieren, sind für einen gewissen Zeitraum sowohl der alte als auch der neue Wert auf dem Laufwerk gespeichert, bis die Daten verdichtet werden.
Löschungen erfordern ebenfalls zusätzlichen Speicherplatz, zumindest für eine kurze Zeit, da Löschungen genau genommen ein spezieller Mutationstyp sind. Bis die Tabelle verdichtet wird, benötigt das Löschen also mehr Platz, nicht weniger.
Datenkompression
Bigtable komprimiert Ihre Daten automatisch mithilfe eines intelligenten Algorithmus. Sie können keine Einstellungen für die Kompression Ihrer Daten festlegen. Es ist jedoch nützlich zu wissen, wie Daten gespeichert werden müssen, damit sie effizient komprimiert werden können.
- Zufällige Daten können nicht so effizient komprimiert werden wie Daten, die einem Muster folgen. Unter Daten, die einem Muster folgen, fallen Texte wie die Seite, die Sie gerade lesen.
- Die Komprimierung funktioniert am besten, wenn identische Werte nah beieinander liegen, entweder oder in aneinandergrenzenden Zeilen. Wenn Sie Ihre Zeilenschlüssel so anordnen, mit identischen Datenblöcken nebeneinander stehen, können die Daten effizient komprimiert.
- Bigtable komprimiert Werte von bis zu 1 MiB. Wenn Sie Werte speichern, die größer als 1 MiB sind, komprimieren Sie sie vor dem in Bigtable schreiben, damit Sie CPU-Zyklen sparen, Arbeitsspeicher und Netzwerkbandbreite.
Datenhaltbarkeit
Wenn Sie Bigtable verwenden, werden Ihre Daten in Colossus, dem internen, äußerst langlebigen Datensystem von Google, gespeichert. Dabei werden Speichergeräte in Googles Datenzentren verwendet. Sie müssen keinen HDFS-Cluster oder ein anderes Dateisystem ausführen, Bigtable. Hinter den Kulissen nutzt Google proprietäre Speichermethoden, um eine Datenlanglebigkeit zu erreichen, die über den Werten liegt, die eine standardmäßige dreifache HDFS-Replikation bietet.
Die Langlebigkeit wird bei der Verwendung der Replikation weiter verbessert. Bigtable verwaltet eine separate Kopie Ihrer Daten an dem Standort, den Sie für jeden Cluster einer replizierten Instanz auswählen.
Konsistenzmodell
Single-Cluster-Bigtable-Instanzen bieten strikte Konsistenz. Standardmäßig bieten Instanzen mit mehr als einem Cluster Eventual Consistency. Sie können jedoch für einige Anwendungsfälle eine Read-Your-Writes-Konsistenz oder strikte Konsistenz konfigurieren, je nach den Einstellungen für Arbeitslast und Anwendungsprofil.
Sicherheit
Der Zugriff auf Ihre Bigtable-Tabellen wird von Ihrem Google Cloud-Projekt und den IAM-Rollen (Identitäts- und Zugriffsverwaltung) gesteuert, die Sie Nutzern zuweisen. Sie können beispielsweise IAM-Rollen zuweisen, die verhindern, dass einzelne Nutzer Tabellen lesen, in Tabellen schreiben oder neue Instanzen erstellen. Wenn jemand keinen Zugriff auf Ihr Projekt hat oder keine IAM-Rolle mit den entsprechenden Berechtigungen für Bigtable besitzt, kann er auf keine Ihrer Tabellen zugreifen.
Sie können den Zugriff auf Tabellendaten auch steuern, indem Sie eine autorisierte Ansicht erstellen einer Tabelle, die eine Teilmenge der Tabellendaten darstellt. Anschließend können Sie Berechtigungen auf Datenansichtsebene für einige Nutzer mit Berechtigungen auf Tabellenebene.
Sie können die Sicherheit im Projekt, auf der Instanz, in der Tabelle oder autorisierten Ansichtsebenen. Bigtable unterstützt nicht Sicherheitsbeschränkungen auf Zeilen-, Spalten- oder Zellenebene.
Verschlüsselung
Standardmäßig werden alle in Google Cloud gespeicherten Daten, einschließlich der Daten in Bigtable-Tabellen, inaktiv verschlüsselt. Dies geschieht mit dens gleichen gehärteten Schlüsselverwaltungssystemen, die wir für unsere eigenen verschlüsselten Daten verwenden.
Wenn Sie mehr Kontrolle über die Schlüssel haben möchten, die zur Verschlüsselung Ihres Bigtable-Daten im Ruhezustand, können Sie die vom Kunden verwaltete Verschlüsselung verwenden Schlüssel (CMEK).
Sicherungen
Mit Bigtable-Sicherungen können Sie die Kopie eines das Schema und die Daten der Tabelle erstellen und zu einem späteren Zeitpunkt in einer neuen Tabelle wiederherzustellen. Mit Sicherungen und Back-up-Kopien erstellen, können Sie Daten in einer neuen Tabelle in einer beliebigen Region oder in dem Sie eine Bigtable-Instanz haben, unabhängig davon, wo die Quelltabelle ist.
Change Data Capture
Bigtable bietet Change Data Capture (CDC) in Form von Änderungen Streams Mit Änderungsstreams können Sie Datenänderungen erfassen und in eine Tabelle streamen wenn die Änderungen eintreten. Sie können einen Änderungsstream mit einem Dienst wie z. B. lesen Dataflow unterstützt Anwendungsfälle wie Datenanalysen, Audits, Archivierungsanforderungen und das Auslösen der nachgelagerten Anwendungslogik. Weitere Informationen finden Sie im Überblick über die Änderung Streams
Routing mit Anwendungsprofilen anfordern
Mit den Routingrichtlinien von Anwendungsprofilen steuern Sie, welche Cluster um eingehende Anfragen von Anwendungen zu verarbeiten. Zu den Optionen für Routingrichtlinien gehören:
- Single-Cluster-Routing: Sendet alle Anfragen an einen einzigen Cluster.
- Multi-Cluster-Routing an einen beliebigen Cluster: sendet Anfragen an den nächsten
verfügbaren Cluster in einer Instanz, einschließlich der folgenden Optionen:
<ph type="x-smartling-placeholder">
- </ph>
- Beliebiger Cluster: Jeder Cluster in der Instanz kann Anfragen erhalten.
- Clustergruppen-Routing: Eine angegebene Gruppe von Clustern in der Instanz kann Anfragen empfangen.
Andere Speicherungs- und Datenbankoptionen
Bigtable ist keine relationale Datenbank. SQL-Abfragen, Joins oder mehrzeilige Transaktionen werden nicht unterstützt.
- Sie benötigen vollständigen SQL-Support für die Verarbeitung von Onlinetransaktionen (OLTP) können Sie Spanner oder Cloud SQL
- Wenn Sie interaktive Abfragen in einem System für die analytische Onlineverarbeitung (OLAP) benötigen, ist BigQuery möglicherweise das Richtige für Sie.
- Wenn Sie stark strukturierte Objekte in einer Dokumentendatenbank mit Unterstützung von ACID-Transaktionen und SQL-ähnlichen Abfragen sollten Sie Firestore
- Für eine In-Memory-Datenspeicherung mit niedriger Latenz empfiehlt sich Memorystore:
- Wenn Sie Daten zwischen Nutzern in Echtzeit synchronisieren möchten, verwenden Sie Firebase Realtime Datenbank.
Weitere Informationen zu anderen Datenbankoptionen finden Sie in der Übersicht der Datenbankdienste. Google Cloud bietet auch verschiedene Speicheroptionen.
Nächste Schritte
- Probieren Sie einen Bigtable-Schnellstart mithilfe des
cbt
-Befehlszeile , dem Befehlszeilentool für Bigtable. - Bigtable-Codelab durcharbeiten.
- Mehr über Bigtable-Instanzen, -Cluster und -Knoten lesen.
- Mehr zum Erstellen einer Bigtable-Instanz.
- Mehr über die Clientbibliotheken für Cloud Bigtable lesen
- Ursprüngliches OSDI-Whitepaper zu Bigtable