Der Übergang von einem RDBMS-Modell HBase

Wenn Sie die Entwurfsphase für Ihre Anwendung konfrontiert sind und Sie glauben, dass HBase gut passen würde, dann der Gestaltung Ihrer Reihe Tasten und das Schema der HBase Datenmodell passen und Architektur ist der richtige Ansatz. Aber manchmal ist es sinnvoll, eine Datenbank zu bewegen ursprünglich für ein RDBMS HBase entworfen.

Ein gemeinsames Szenario, in dem dieser Ansatz sinnvoll ist, ist eine MySQL-Datenbank-Instanz, die die Grenzen der Skalierbarkeit erreicht hat. Es gibt Techniken für horizontal eine MySQL-Instanz Skalierung (sharding, mit anderen Worten), jedoch ist dieses Verfahren in der Regel umständlich und problematisch, da MySQL einfach nicht ursprünglich für sharding entworfen wurde.

Der Übergang aus dem relationalen Modell zum HBase Modell ist eine relativ neue Disziplin. Allerdings sind bestimmte etablierte Denkmuster entstehen und haben in drei Schlüsselprinzipien verschmolz zu folgen, wenn ein Übergang nähert. Diese Grundsätze sind Denormalisierung,Vervielfältigung, und intelligente Schlüssel (DDI).

  • Denormalisierung: Das relationale Datenbankmodell ist abhängig von a) einer normalisierten Datenbank-Schema und b) Verknüpfungen zwischen Tabellen zu SQL-Operationen zu reagieren. Datenbank Normalisierung ist eine Technik, die vor Datenverlust schützt, Redundanz und andere Anomalien wie Daten aktualisiert und abgerufen werden.

    Es gibt eine Reihe von Regeln, die Experten folgen in einem normalisierten Datenbankschema zu gelangen (und Datenbank-Normalisierung ist eine ganze Studie selbst), aber der Prozess beinhaltet in der Regel größere Tabellen in kleinere Tabellen zu teilen und zu definieren Beziehungen zwischen ihnen. Datenbank Denormalisierung ist das Gegenteil der Normalisierung, in dem kleinere, spezifischere Tabellen verbunden sind, in größeren, allgemeine Tabellen.

    Dies ist ein gemeinsames Muster, wenn zu HBase Übergang, da schließt sich nicht über Tabellen zur Verfügung gestellt, und schließt sich langsam sein können, da sie teure Plattenoperationen einzubeziehen. Schutz vor dem Update und Retrieval-Anomalien ist nun die Aufgabe Ihres HBase-Client-Anwendung, da die Schutz Sie gewährt durch Normalisierung sind null und nichtig.

  • Vervielfältigung: Wie Sie Ihre Datenbank-Schema denormalize, werden Sie wahrscheinlich die Daten dupliziert am Ende, weil es Ihnen teure Leseoperationen über mehrere Tabellen vermeiden helfen können. Nicht über die zusätzlichen Speicher (innerhalb Grund natürlich) betroffen sein - können Sie die automatische Skalierbarkeit von HBase zu Ihrem Vorteil nutzen.

    Beachten Sie aber, dass zusätzliche Arbeit wird von der Client-Anwendung benötigt werden, um die Daten zu kopieren und daran erinnern, dass nativ HBase nur auf Zeilenebene atomare Operationen nicht Querreihe (mit Ausnahme in der hbase-5229 JIRA beschrieben) oder Kreuztisch zur Verfügung stellt.

  • Intelligente Schlüssel: Da die in HBase gespeicherten Daten durch Zeilenschlüssel bestellt wird, und die Zeilenschlüssel ist das einzige vom System, vorsichtig intelligente Design der Zeilenschlüssel versehen nativen Index kann einen großen Unterschied machen. Zum Beispiel könnte Ihre Zeilenschlüssel eine Kombination aus einer Serviceauftragsnummer und die ID-Nummer des Kunden, die den Serviceauftrag gestellt.

    Diese Zeile Schlüssel-Design erlaubt es dir, Daten zu suchen bis zum Serviceauftrag im Zusammenhang mit oder Daten an den Kunden in der gleichen Tabelle mit der gleichen Zeilenschlüssel im Zusammenhang mit nachschlagen. Diese Technik wird schneller sein für einige Abfragen und vermeiden teure Tabelle verbindet.

Um diese besonderen Denkmuster zu verdeutlichen, nehmen Sie einen Kundenkontaktinformationen Tabelle und legen Sie sie im Rahmen eines typischen Serviceauftrag Datenbank. Die Abbildung zeigt Ihnen, was eine normalisierte Serviceauftrag Datenbankschema aussehen könnte.

bild0.jpg

Nach den Regeln der RDBMS Normalisierung, stellen Sie die Probe Kontaktinformationen des Kunden Tabelle, so dass es aus dem Serviceauftrag Tisch, um Kundendaten zu vermeiden, getrennt zu verlieren, wenn Serviceaufträge geschlossen werden und möglicherweise gelöscht. Nehmen Sie den gleichen Ansatz für die Tabelle Produkte, was bedeutet, dass neue Produkte auf die fiktive Firma Datenbank unabhängig von Serviceaufträgen hinzugefügt werden können.

Indem sie sich auf RDBMS Join-Operationen, dieses Schema unterstützt Abfragen, die die Anzahl der Serviceaufträge zeigen, die gegen ein bestimmtes Produkt geöffnet werden zusammen mit dem Standort des Kunden, wo das Produkt in Gebrauch ist.

Das ist alles schön und gut, aber es ist ein Schema, das Sie mit RDBM verwenden würde. Wie über Sie dieses Schema in ein HBase Schema? Die nächste Abbildung zeigt ein mögliches HBase Schema - eine, die das DDI-Entwurfsmuster folgt.

image1.jpg

Die Kontaktinformationen des Kunden Tabelle hat, indem der Name des Kunden und Kontaktinformationen anstelle der Fremdschlüssel bisher verwendeten denormalized worden. Außerdem werden die Daten, indem die Kontaktinformationen des Kunden Tabelle dupliziert, wie ist. Nun schließt sich über den Service Order Tisch und Kontaktinformationen des Kunden Tabelle sind nicht erforderlich.

Zusätzlich wurde eine intelligente Zeilenschlüssel Design verwendet, das die Produktnummer mit der Kundennummer kombiniert die Serviceauftragsnummer zu bilden (A100 | 00001, zum Beispiel). Mit dieser intelligenten Schlüssel kann der Serviceauftrag Tabelle vital Berichte über Produktmängel bieten und Kunden, die derzeit Produktprobleme erleben.

All diese Abfragen können alle durch HBase in einer Reihe Ebene Atom Mode für die Anwendung unterstützt werden. Weil Sie wissen, dass HBase Aufträge Reihe Tasten und sortiert sie in einer lexikographischen Weise können Sie Ihre Anwendung bestimmte Vermutungen über Daten Ort, wenn Scans für die Berichterstattung Ausgabe. (Alle A * Serie Produktnummern werden zusammen gespeichert werden, zum Beispiel.)

Der Serviceauftrag Datenbank durch das HBase Schema dargestellt wird, ist ein relativ einfaches Beispiel, aber es zeigt, wie HBase kann in bestimmten Fällen mit dem RDBMS Welt schneiden und signifikanten Wert bieten. Wenn die fiktive Firma Terabytes oder sogar Petabyte Diensteabrufdaten hat zu speichern, HBase würde einen großen Unterschied in Bezug auf Kosten, Zuverlässigkeit, Leistung und Skalierbarkeit machen.

Sie können natürlich, entwerfen sie ihre Serviceauftrag HBase Schema auf verschiedene Weise. Zugegeben, die ganze Konstruktion ist abhängig von den Anfragen, die unterstützt werden müssen, aber Sie haben die Möglichkeit, einige relationale Datenbanken, um den Übergang Nutzung zu sehr leistungsfähige HBase Anwendungen für die Produktion so lange wie Sie es von einem soliden Verständnis der HBase Architektur und der DDI-Entwurfsmuster arbeiten.

In diesem Beispiel wurde angenommen, dass Abfragen, die von einer Java-Anwendung ausgeführt wurden, um die HBase-Client-APIs nutzen, oder vielleicht über eine andere Sprache mit Apache Thrift. Das Anwendungsmodell können die Anforderungen passen einfach gut und nützlich Leistung und Anpassungsoptionen für den fiktiven Dienstleistungsunternehmen bieten.

Menü