Frage

nehmen an, dass ich diesen RDBM Tisch ( Entity-Attribut-value_model ):

col1: entityID
col2: attributeName
col3: value

und ich möchte HBase aufgrund Skalierungsfragen verwenden.

Ich weiß, dass der einzige Weg, Hbase Tabelle zuzugreifen einen Primärschlüssel (Cursor) verwendet. Sie können einen Cursor für einen bestimmten Schlüssel erhalten, und die Reihen one-by-one iterieren.

Das Problem ist, dass in meinem Fall, ich will auf alle 3 Spalten zu durchlaufen können. zum Beispiel:

  • für eine entityID I bekommen alle ihre attriutes und Werte
  • für ein give attribute und Wert ich auf alle entitiIDS wollen ...

so eine Idee, die ich hatte, ist eine Hbase-Tabelle zu erstellen, die die Daten (Tabelle DATA, mit entityID als Primärindex) und 2 „index“ Tabellen eines mit attribute als Primärschlüssel, und den anderen mit dem Wert halten werden

jede Indextabelle eine Liste von Zeigern (entityIDs) für die DATA-Tabelle halten.

Ist es ein sinnvoller Ansatz? oder ist ein ‚Missbrauch‘ von Hbase Konzepten?

In diesem Blog die Autor sagen:

  

HBase ermöglicht Operationen, die von primären erhalten   Schlüssel und Scans (man denke: cursor) über Zeilen   reicht. (Wenn Sie beiden Skalen haben und   müssen von Sekundärindizes, keine Sorge   - Lucene zur Rettung! Aber das ist ein anderer Beitrag.)

Wissen Sie, wie Lucene helfen kann?

- Yonatan

War es hilfreich?

Lösung

Sekundärindizes wäre in der Tat für viele potentielle Anwendungen von HBase nützlich sein, und ich glaube, dass die Entwickler in der Tat sind es zu betrachten. Kasse http://www.mail-archive.com /hbase-dev@hadoop.apache.org/msg04801.html .

In der Zwischenzeit aber, wenn Ihre Anwendung der Datenspeicherung als Sternschema modelliert werden kann (siehe http : //en.wikipedia.org/wiki/Star_schema ) Sie können gerne die Lösung zur Kasse, die Hypertable für Sekundärindex-Typ Bedürfnisse schlägt http://markmail.org/message/rphm4q6cbar2ycgp

Andere Tipps

Ich empfehle, mit zwei verschiedenen flachen Tabellen: eine für Attribute Nachschlagen + Werte entityID gegeben, und eine für die Suche entityID gegebenen Attribute + Werte bis

.

Tabelle 1 würde wie folgt aussehen:

entityID1 {
  attribute1: value1;
  attribute2: value2;
  ...
}

und Tabelle 2:

attribute1_value1 {
  entityID1;
}
attribute2_value2 {
  entityID1;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top