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.
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
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). –