Welche Datenbank verwendet Google?

370

Ist es Oracle oder MySQL oder etwas, das sie selbst erstellt haben?

solrevdev
quelle
187
Er wird Google verwenden, wenn er herausfinden möchte, welchen Datenbankstapelüberlauf verwendet wird
flybywire
340
Hey, schlag ihn nicht, ich bin hier von einer Google-Suche gelandet lol.
Shawn Mclean
141
Ist es eine weitere Ironie, dass das Top-Ergebnis für die Suche in "Googles Datenbank" bei Google jetzt diese Seite ist, auf der der erste Kommentar die Verwendung von Google ist?
Patrick Szalapski
89
@Patrick Szalapski klingt wie eine Stapelüberlaufsituation.
Thomas
5
Vor der Suche habe ich mich gefragt, ob Google mir die richtige Antwort geben wird, aber jetzt geht es los: P
Abdul Saboor

Antworten:

581

Großer Tisch

Ein verteiltes Speichersystem für strukturierte Daten

Bigtable ist ein verteiltes Speichersystem (von Google entwickelt) zur Verwaltung strukturierter Daten, das auf eine sehr große Größe skaliert werden kann: Petabyte Daten auf Tausenden von Commodity-Servern.

Viele Projekte bei Google speichern Daten in Bigtable, einschließlich Webindizierung, Google Earth und Google Finance. Diese Anwendungen stellen sehr unterschiedliche Anforderungen an Bigtable, sowohl hinsichtlich der Datengröße (von URLs über Webseiten bis hin zu Satellitenbildern) als auch hinsichtlich der Latenzanforderungen (von der Backend-Massenverarbeitung bis zur Echtzeit-Datenbereitstellung).

Trotz dieser unterschiedlichen Anforderungen hat Bigtable erfolgreich eine flexible, leistungsstarke Lösung für alle diese Google-Produkte bereitgestellt.

Einige Eigenschaften

  • schnelles und extrem umfangreiches DBMS
  • Eine spärliche, verteilte mehrdimensionale sortierte Karte, die Merkmale sowohl zeilenorientierter als auch spaltenorientierter Datenbanken aufweist.
  • Entwickelt, um in den Petabyte-Bereich zu skalieren
  • Es funktioniert auf Hunderten oder Tausenden von Maschinen
  • Es ist einfach, dem System weitere Maschinen hinzuzufügen und diese Ressourcen automatisch ohne Neukonfiguration zu nutzen
  • Jede Tabelle hat mehrere Dimensionen (von denen eine ein Zeitfeld ist, das die Versionierung ermöglicht).
  • Tabellen werden für GFS (Google File System) optimiert, indem sie in mehrere Tablets aufgeteilt werden - Segmente der Tabelle, die entlang einer Zeile aufgeteilt werden, die so ausgewählt ist, dass das Tablet eine Größe von ~ 200 Megabyte hat.

Die Architektur

BigTable ist keine relationale Datenbank. Es werden weder Joins noch umfangreiche SQL-ähnliche Abfragen unterstützt. Jede Tabelle ist eine mehrdimensionale Karte mit geringer Dichte. Tabellen bestehen aus Zeilen und Spalten, und jede Zelle hat einen Zeitstempel. Es kann mehrere Versionen einer Zelle mit unterschiedlichen Zeitstempeln geben. Der Zeitstempel ermöglicht Vorgänge wie "Wählen Sie 'n' Versionen dieser Webseite aus" oder "Zellen löschen, die älter als ein bestimmtes Datum / eine bestimmte Uhrzeit sind".

Um die riesigen Tabellen zu verwalten, teilt Bigtable Tabellen an Zeilengrenzen auf und speichert sie als Tablets. Ein Tablet ist ungefähr 200 MB groß, und jeder Computer spart ungefähr 100 Tablets. Mit diesem Setup können Tablets aus einer einzelnen Tabelle auf viele Server verteilt werden. Es ermöglicht auch einen feinkörnigen Lastausgleich. Wenn eine Tabelle viele Abfragen empfängt, kann sie andere Tablets ablegen oder die ausgelastete Tabelle auf einen anderen Computer verschieben, der nicht so ausgelastet ist. Wenn ein Computer ausfällt, kann ein Tablet auf viele andere Server verteilt sein, sodass die Auswirkungen auf die Leistung eines bestimmten Computers minimal sind.

Tabellen werden als unveränderliche SSTables und ein Ende von Protokollen gespeichert (ein Protokoll pro Maschine). Wenn einem Computer der Systemspeicher ausgeht, werden einige Tablets mithilfe von Google-eigenen Komprimierungstechniken (BMDiff und Zippy) komprimiert. Kleinere Komprimierungen betreffen nur wenige Tablets, während größere Komprimierungen das gesamte Tabellensystem betreffen und Festplattenspeicher wiederherstellen.

Die Positionen der Bigtable-Tabletten werden in Zellen gespeichert. Die Suche nach einem bestimmten Tablet wird von einem dreistufigen System durchgeführt. Die Clients erhalten einen Punkt auf eine META0-Tabelle, von der es nur eine gibt. In der META0-Tabelle werden viele META1-Tabletten erfasst, die die Positionen der nachgeschlagenen Tabletten enthalten. Sowohl META0 als auch META1 nutzen das Vorabrufen und Zwischenspeichern stark, um Engpässe im System zu minimieren.

Implementierung

BigTable basiert auf dem Google File System (GFS), das als Sicherungsspeicher für Protokoll- und Datendateien verwendet wird. GFS bietet zuverlässigen Speicher für SSTables, ein von Google entwickeltes Dateiformat zum Speichern von Tabellendaten.

Ein weiterer Dienst, den BigTable stark nutzt, ist Chubby , ein hochverfügbarer, zuverlässiger verteilter Sperrdienst. Mit Chubby können Clients eine Sperre aufheben und sie möglicherweise mit einigen Metadaten verknüpfen, die sie erneuern können, indem sie Keep-Alive-Nachrichten an Chubby zurücksenden. Die Sperren werden in einer dateisystemähnlichen hierarchischen Namensstruktur gespeichert.

Es gibt drei primäre Servertypen, die für das Bigtable-System von Interesse sind:

  1. Master-Server: Weisen Sie Tablet-Servern Tablets zu, verfolgen Sie, wo sich Tablets befinden, und verteilen Sie die Aufgaben nach Bedarf neu.
  2. Tablet-Server: Bearbeiten Sie Lese- / Schreibanforderungen für Tablets und Split-Tablets, wenn diese die Größenbeschränkungen überschreiten (normalerweise 100 MB - 200 MB). Wenn ein Tablet-Server ausfällt, nehmen 100 Tablet-Server jeweils 1 neues Tablet auf und das System wird wiederhergestellt.
  3. Sperrserver: Instanzen des verteilten Chubby-Sperrdienstes. Viele Aktionen in BigTable erfordern den Erwerb von Sperren, einschließlich des Öffnens von Tablets zum Schreiben, um sicherzustellen, dass nicht mehr als ein aktiver Master gleichzeitig vorhanden ist, und die Überprüfung der Zugriffskontrolle.

Beispiel aus Googles Forschungsbericht:

Alt-Text

Ein Ausschnitt aus einer Beispieltabelle, in der Webseiten gespeichert sind. Der Zeilenname ist eine umgekehrte URL . Die Inhaltsspaltenfamilie enthält den Seiteninhalt , und die Ankerspaltenfamilie enthält den Text aller Anker , die auf die Seite verweisen. Die Startseite von CNN wird sowohl von der Sports Illustrated- als auch von der MY-Look-Startseite referenziert, sodass die Zeile Spalten mit den Namen anchor:cnnsi.comund enthält anchor:my.look.ca. Jede Ankerzelle hat eine Version ; der Inhalt Spalte hat drei Versionen , bei Zeitstempel t3, t5und t6.

API

Typische Vorgänge für BigTable sind das Erstellen und Löschen von Tabellen und Spaltenfamilien, das Schreiben von Daten und das Löschen von Spalten aus einer Zeile. BigTable bietet diese Funktionen Anwendungsentwicklern in einer API. Transaktionen werden auf Zeilenebene unterstützt, jedoch nicht über mehrere Zeilenschlüssel hinweg.


Hier ist der Link zum PDF des Forschungspapiers .

Und hier finden Sie ein Video, das Jeff Dean von Google in einem Vortrag an der University of Washington zeigt , in dem das im Backend von Google verwendete Bigtable-Content-Storage-System erläutert wird.

splattne
quelle
4
Weiß jemand, ob es von Grund auf neu gebaut wurde oder auf einem Produkt basiert? Ich habe irgendwo gehört, wo ich mich nicht erinnere, wo Google Oracle einmal verwendet hat, aber sie lassen es fallen, weil sie einige Änderungen benötigen, die Oracle weder tun noch zulassen wird. Ich werde versuchen, den Link zu bekommen.
OscarRyz
5
Es ist von Grund auf neu, wie die meisten ihrer anderen Kernkompetenzen (Webserver, GFS, ...).
Matt J
5
Ich suchte nach Informationen über die Komprimierungsalgorithmen (BMDiff und Zippy) und stellte fest, dass Zippy jetzt Snappy heißt und in Google Code veröffentlicht wird: code.google.com/p/snappy
helios
7
Jetzt benutzen sie Spanner, den Nachfolger von BigTable
deltonio2
Es sieht also ähnlich aus wie in einer nosql-Datenbank wie Mongodb oder Marklogic.
Stuckedoverflow
32

Spanner ist Googles global verteiltes relationales Datenbankverwaltungssystem (RDBMS), der Nachfolger von BigTable . Google behauptet, es sei kein reines relationales System, da jede Tabelle einen Primärschlüssel haben muss.

Hier ist der Link des Papiers.

Spanner ist Googles skalierbare, global verteilte und synchron replizierte Datenbank mit mehreren Versionen. Es ist das erste System, das Daten auf globaler Ebene verteilt und extern konsistente verteilte Transaktionen unterstützt. In diesem Dokument werden die Struktur von Spanner, sein Funktionsumfang, die verschiedenen Entwurfsentscheidungen zugrunde liegenden Gründe und eine neuartige Zeit-API beschrieben, die die Unsicherheit der Uhr aufdeckt. Diese API und ihre Implementierung sind für die Unterstützung der externen Konsistenz und einer Vielzahl leistungsstarker Funktionen von entscheidender Bedeutung: Nicht blockierende Lesevorgänge in der Vergangenheit, sperrfreie schreibgeschützte Transaktionen und Änderungen des atomaren Schemas in ganz Spanner.

Eine weitere von Google erfundene Datenbank ist Megastore . Hier ist die Zusammenfassung:

Megastore ist ein Speichersystem, das entwickelt wurde, um die Anforderungen der heutigen interaktiven Onlinedienste zu erfüllen. Megastore kombiniert auf neuartige Weise die Skalierbarkeit eines NoSQL-Datenspeichers mit dem Komfort eines herkömmlichen RDBMS und bietet sowohl starke Konsistenzgarantien als auch hohe Verfügbarkeit. Wir bieten eine vollständig serialisierbare ACID-Semantik in feinkörnigen Partitionen von Daten. Diese Partitionierung ermöglicht es uns, jeden Schreibvorgang synchron über ein Weitverkehrsnetzwerk mit angemessener Latenz zu replizieren und ein nahtloses Failover zwischen Rechenzentren zu unterstützen. In diesem Dokument wird die Semantik und der Replikationsalgorithmus von Megastore beschrieben. Es beschreibt auch unsere Erfahrung mit der Unterstützung einer Vielzahl von Google-Produktionsdiensten, die mit Megastore erstellt wurden.

Benutzer
quelle
Es ist eine Schande, dass Spanner ein Closed-Source-Projekt ist. Der Beschreibung zufolge würde ich das gerne auch für meine Projekte verwenden.
Mikko Rantalainen
2
@ MikkoRantalainen Vielleicht möchten Sie das Apache Hadoop-Ökosystem oder CockroachDB (obwohl Cockroach Alpha ist)
dualed
Danke, CockroachDB sieht interessant aus. Ich muss es testen, um zu sehen, welche Leistung es hat. Features sehen aus wie das Zeug, das ich gerne hätte.
Mikko Rantalainen
1
Spanner ist seit 2017 für alle in Google Cloud verfügbar: cloud.google.com/spanner
Miscreant
19

Wie andere bereits erwähnt haben, verwendet Google eine selbst entwickelte Lösung namens BigTable und hat einige Artikel veröffentlicht, in denen dies in der realen Welt beschrieben wird.

Die Apache-Leute haben eine Umsetzung der in diesen Papieren vorgestellten Ideen namens HBase . HBase ist Teil des größeren Hadoop-Projekts, das laut seiner Website "eine Softwareplattform ist, mit der man einfach Anwendungen schreiben und ausführen kann, die große Datenmengen verarbeiten". Einige der Benchmarks sind ziemlich beeindruckend. Ihre Website ist unter http://hadoop.apache.org .

EvilRyry
quelle
Link ist 404 nicht gefunden
Shivam Jha
9

Und es ist vielleicht auch praktisch zu wissen, dass BigTable keine relationale Datenbank (wie MySQL) ist, sondern eine riesige (verteilte) Hash-Tabelle mit sehr unterschiedlichen Eigenschaften. Sie können mit BigTable (einer eingeschränkten Version) selbst auf der Google AppEngine- Plattform herumspielen .

Neben dem oben erwähnten Hadoop gibt es viele andere Implementierungen, die versuchen, die gleichen Probleme wie BigTable zu lösen (Skalierbarkeit, Verfügbarkeit). Ich habe gestern einen schönen Blog-Beitrag gesehen, in dem die meisten hier aufgelistet sind .

Koen Bok
quelle
6

Google verwendet hauptsächlich Bigtable.

Bigtable ist ein verteiltes Speichersystem zur Verwaltung strukturierter Daten, das auf eine sehr große Größe skaliert werden kann.

Für weitere Informationen laden Sie das Dokument hier herunter .

Google verwendet für einige seiner Anwendungen auch Oracle- und MySQL-Datenbanken.

Alle weiteren Informationen, die Sie hinzufügen können, werden sehr geschätzt.

Suresh Kumar Amrani
quelle
17
Google also use Oracle- Referenz erforderlich.
Benutzer
@user cloud.google.com/sql/docs ? Wenn Entwickler MySQL verwenden können, muss Google zumindest einen "Datenbankübersetzer" mit MySQL und Bigtable erstellt haben.
1

Google-Dienste verfügen über eine polyglotte Persistenzarchitektur. BigTable wird von den meisten seiner Dienste wie YouTube, Google Search, Google Analytics usw. genutzt. Der Suchdienst verwendete MapReduce zunächst für seine Indexierungsinfrastruktur, wechselte jedoch später während der Caffeine-Version zu BigTable.

Im Google Cloud-Datenspeicher sind über 100 Anwendungen bei Google in Produktion, sowohl für interne als auch für externe Nutzer. Anwendungen wie Google Mail, Picasa, Google Kalender, Android Market und AppEngine verwenden Cloud Datastore und Megastore.

Google Trends verwendet MillWheel für die Stream-Verarbeitung. Google Ads verwendete ursprünglich MySQL und wurde später auf F1 DB migriert - eine benutzerdefinierte geschriebene verteilte relationale Datenbank. Youtube verwendet MySQL mit Vitess. Google speichert mithilfe des Google-Dateisystems Exabytes an Daten auf den Commodity-Servern.

Quelle: Google-Datenbanken: Wie speichern Google Services Petabyte-Exabyte-Skalendaten?

YouTube-Datenbank - Wie werden so viele Videos gespeichert, ohne dass der Speicherplatz knapp wird?

Geben Sie hier die Bildbeschreibung ein

Außenseiter
quelle