wie Hbase Schema zu entwerfen?
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
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;
}