2013-03-14 12 views
5

Ich komme aus einem RDBMS Hintergrund und haben damit begonnen, HBase vor kurzem zu lesen. Ich verstehe, dass es keine Sekundärindizes und wir sollten nicht versuchen, so etwas wie zu tun:HBase: Row Schlüsselgröße

SELECT * FROM tbl_photo WHERE album_id = 1969 

ich mich gefragt, ob alle Infos verwendet werden kann, eine Reihe-Schlüssel selbst zu erstellen.

Für z. Es gibt einen Benutzer mit seinen E-Mail-Registern bei einem Foto-Sharing-Dienstanbieter. Der Benutzer kann ein Album erstellen (mehrere Alben können erstellt werden) und Fotos hochladen. Ein anderer Nutzer kommentiert die Fotos und einige Nutzer stimmen den Kommentar ab.

Ein Schlüssel zu identifizieren, die eine solche Abstimmung wie email:album:ts:photo:ts:comment:ts:vote:ts aussehen. Macht dieser Schlüssel Sinn? Ist es länger als empfohlen? (ts stands timestamp)

Antwort

7

In gewisser Weise dieser Sinn macht, aber was würden Sie speichern in Ihren Spalten, wenn alle Ihre Informationen in Ihren Schlüssel ist? Und werden Sie immer in der Lage sein, diesen Schlüssel aus Sicht der Client-Anwendung zu bilden? HBase Schemadesign ist ein ziemlich schwieriges Thema und Sie sollten dieses Video aus der letztjährigen HBaseCon unbedingt anschauen, wenn Sie etwas Freizeit haben: HBase Schema Design by Ian Varley.

Soweit es mich betrifft, ist die wichtigste Sache im Auge zu behalten, wenn eine HBase Zeilenschlüssel entwerfen, ist: „Wie werde ich an meine Daten?“.

Wenn Sie (wie in Ihrem Beispiel), um die Bilder von einem bestimmten Album abrufen möchten, warum nicht die Zeilenschlüssel so etwas wie email:album machen und die lassen andere Spalte Familien speichern Sie Ihre Bilder, Kommentare, ...

Wenn Sie es jetzt so machen und ein bestimmtes Bild abrufen möchten, müssen Sie alle Alben durchsuchen. Um dies zu verhindern, könnten Sie stattdessen email:picture als Schlüssel verwenden, aber das erzeugt genau das gleiche Problem andersherum. Sie können auch email:album:picture verwenden, aber wenn Sie alle Bilder von einem bestimmten Album erhalten möchten, sollten Sie die Bezeichner der Bilder kennen oder Sie werden nicht in der Lage sein, Ihre Schlüssel zu bilden.

Auf der anderen Seite, wenn ein Benutzer kann beispielsweise nur 2000 Bilder verwenden, dann email:picture oder email:album als Schlüssel und einen Spaltenfilter für album oder picture wird kein Problem dort HBase seine Angabe in einer Schleife durch maximal 2000 Zeilen Das dauert nicht so lange.

aber sagen, dass je nachdem, welche Version von HBase Sie verwenden Sie irgendeine Art von Sekundärindex implementieren können eine FuzzyRowFilter verwenden.