spaltenbasiert oder zeilenbasiert für HBase

8

Ich frage mich, ob HBase spaltenbasierten Speicher oder zeilenbasierten Speicher verwendet?

  • Ich habe einige technische Dokumente gelesen und erwähnt, dass HBase spaltenbasierte Speicher verwendet, um ähnliche Daten zu speichern, um die Komprimierung zu unterstützen. Das bedeutet, dass dieselben Spalten verschiedener Zeilen zusammen gespeichert werden;
  • Aber ich habe auch gelernt, HBase ist eine sortierte Schlüssel-Wert-Karte. Er verwendet den Schlüssel, um alle verwandten Spalten für diesen Schlüssel (Zeile) zu adressieren, so dass es sich anscheinend um einen zeilenbasierten Speicher handelt.

Es wird geschätzt, wenn jemand meine Verwirrungen klären könnte.

danke im voraus, George

    
George2 05.08.2012, 12:55
quelle

2 Antworten

21

George, hier ist eine Präsentation, die ich zum Verständnis der HBase-Schemata von HBaseCon 2012 gehalten habe:

Ссылка

Kurz gesagt, jede Zeile in HBase ist eigentlich eine Schlüssel / Wert-Tabelle, in der Sie eine beliebige Anzahl von Spalten (Schlüsseln) haben können, von denen jede einen Wert hat. (Und technisch kann jeder mehrere Werte mit unterschiedlichen Zeitstempeln haben).

Außerdem können Sie in "Spaltenfamilien" mehrere Schlüssel / Wert-Maps in derselben Zeile in verschiedenen physischen (auf der Festplatte) Dateien hosten. Dies hilft bei der Optimierung in Situationen, in denen Sie Gruppen von Werten haben, auf die normalerweise disjunkt von anderen Sätzen zugegriffen wird (so dass Sie weniger Daten von der Festplatte lesen müssen). Der Nachteil ist, dass es natürlich more funktioniert, alle Werte in einer Zeile zu lesen, wenn Sie Spalten in zwei Spaltenfamilien trennen, da die Anzahl der erforderlichen Plattenzugriffe doppelt so groß ist.

Im Gegensatz zu mehr standardmäßigen "spaltenorientierten" Datenbanken habe ich noch nie von jemandem gehört, der eine HBase-Tabelle mit einer Spaltenfamilie für jede logische Spalte erstellt hat. Es gibt Gemeinkosten, die mit den Spaltenfamilien verbunden sind, und der allgemeine Rat lautet normalerweise, nicht mehr als 3 oder 4 von ihnen zu haben. Spaltenfamilien sind Informationen zur Entwurfszeit, dh Sie müssen sie zu dem Zeitpunkt angeben, an dem Sie die Tabelle erstellen (oder ändern).

Im Allgemeinen finde ich Spaltenfamilien als eine erweiterte Designoption, die Sie nur verwenden würden, wenn Sie ein tiefgreifendes Verständnis der HBase-Architektur haben und zeigen können, dass dies ein Nettovorteil wäre.

Obwohl HBase in der Tat "spaltenorientiert" agieren kann, ist es zwar nicht das Standard- oder das am häufigsten verwendete Designmuster in HBase. Es ist besser, es als einen Zeilenspeicher mit Schlüssel / Wert-Karten zu betrachten.

    
Ian Varley 05.08.2012, 13:58
quelle
2

Zusätzlich zu Ians ausgezeichneter Antwort würde ich sagen, dass HBase sowohl ein zeilenbasierter Schlüsselwert als auch ein spaltenbasierter Schlüssel / Wert-Speicher ist (wenn Sie die Zeile kennen). Schlüssel).

Wenn Sie es in Bezug auf Datenstrukturen vorziehen, könnte eine einfache HBase-Tabelle wie folgt aussehen:

%Vor%

Natürlich können Sie auch noch kompliziertere Datenstrukturen darin speichern, wie Sie in Ians Präsentation sehen können.

    
Suman 06.08.2012 20:38
quelle

Tags und Links