2009-03-25 6 views
10

Die Hbase-Dokumentation macht deutlich, dass Sie ähnliche Spalten in Spaltenfamilien gruppieren sollten, da der physische Speicher nach Spaltenfamilie erfolgt.Hadoop Hbase: Spreading Spalte Familien über Tabellen oder nicht

Aber was bedeutet es, zwei Spaltenfamilien in die gleiche Tabelle zu setzen, im Gegensatz zu separaten Tabellen pro Spaltengruppe? Gibt es spezielle Fälle, in denen das "Partitionieren" von Tabellen sinnvoller ist und Fälle, in denen eine "breite" Tabelle besser funktioniert?

Separate Tabellen sollten separate "Zeilenregionen" ergeben, was von Vorteil sein kann, wenn einige Spaltenfamilien (als Ganzes) sehr spärlich sind. Umgekehrt, wann wäre es vorteilhaft, Kolonnenfamilien zusammenzuballen?

Antwort

8

Sie haben die Idee von Spaltenfamilien direkt: im Grunde ist es nur ein Hinweis auf HBase, diese Elemente für einen schnelleren Zugriff zu speichern und zu replizieren.

Wenn Sie zwei Spaltenfamilien in die gleiche Tabelle setzen und immer unterschiedliche Schlüssel haben, um darauf zuzugreifen, dann ist es wirklich dasselbe, sie in zwei separaten Tabellen zu haben. Sie profitieren nur, wenn Sie zwei Spaltenfamilien in derselben Tabelle haben, auf die über die gleichen Schlüssel zugegriffen wird.

Zum Beispiel: wenn ich Spalten für die Gesamtzahl der Seitenaufrufe für eine bestimmte Website, die Anzahl der eindeutigen Ansichten für die gleiche Website, den Browser zum Anzeigen der Website und ihre Internetverbindung, kann ich beschließe, dass die ersten beiden eine Spaltenfamilie und die letzten beiden eine weitere Spaltenfamilie sein sollen. Hier wird auf alle vier mit dem gleichen Schlüssel zugegriffen, nämlich auf die fragliche Website, so dass ich Gewinne erziele, indem ich sie in derselben Tabelle habe.

Wenn sie in verschiedenen Tabellen sind, würde ich am Ende eine Join-ähnliche Operation an den beiden Tabellen durchführen müssen. Ich kenne die Zahlen nicht wirklich, also kann ich dir nicht wirklich sagen, wie langsam die Join-ähnliche Operation ist (da ich mich nicht daran erinnere, dass HBase eine Verbindung hat, da sie nicht relational ist) und wo der Kipppunkt ist sie in separate Tabellen überwiegen sie in der gleichen Tabelle (oder umgekehrt).

Natürlich hängt das alles von den Daten ab, die Sie speichern möchten. Wenn Sie also nie über die Tabellen hinweg arbeiten müssten, würden Sie sie in separaten Tabellen aufbewahren, da Sie argumentieren könnten, dass sie das nicht sind miteinander in Beziehung stehen.

+0

Sie sagen "Join ist teuer". Dies scheint zu implizieren, dass ein "Join" zwischen Spaltengruppen innerhalb derselben Tabelle billiger ist als ein Join von Spaltengruppen über Tabellen hinweg. Ist das der Fall? Die HBase-Dokumente machen das nicht klar, denke ich. – Thilo

+1

Ich würde denken, dass es viel billiger ist, einen 'Join' zwischen den Spalten in der gleichen Tabelle zu machen, da es nur eine 'get'-Operation mit den beiden angegebenen Spalten ist und ein Primitiv in der Abfragesprache ist. 'Join' ist jedoch kein primitives Element und Sie müssen es selbst implementieren (was mehr Operationen erfordert). –

8

Spaltenfamilien sind ein Kompromiss zwischen zeilenorientiertem vs. spaltenorientiertem Zugriff. Um das Beispiel der Webseite von Chris zu erweitern, würde ein Zeilenzugriff alle Daten (Spalten) für eine einzelne Website abrufen. Ein Beispiel für eine spaltenorientierte Operation wäre, die Anzahl der Seitenaufrufe über alle Standorte zu summieren.

Für die letztere Operation sind keine Browser- und Verbindungsdetails erforderlich, die viel größer als die numerischen Werte für die Anzahl der Aufrufe sind und die Abfrageleistung erheblich beeinträchtigen würden. Daher stellt HBase Spaltenfamilien als eine Optimierung bereit, die Spaltenoperationen unterstützt.

Ob die Spalten in der gleichen Tabelle sein sollten oder nicht ... Ich würde einfach normalen Datenmodellierungsrichtlinien folgen und alle Spalten in derselben Tabelle platzieren, wenn sie Attribute derselben Entität sind. Bei Spaltenfamilien geht es um Leistung, nicht um Schema.

+1

"Säulenfamilien sind Leistung nicht Schema." Das war mir nicht klar, bis Sie es nur gesagt haben. Vielen Dank. –

Verwandte Themen