2012-03-26 4 views
5

Ich habe mit der Verwendung von Graphen gespielt, um große Datenmengen zu analysieren. Es funktioniert großartig und macht wirklich Spaß, aber ich frage mich, was zu tun ist, wenn die Daten größer und größer werden?Ist es möglich, Graphen HBase zu speichern? Wenn ja, wie modelliert man die Datenbank, um eine Graphenstruktur zu unterstützen?

Lassen Sie mich wissen, ob es eine andere Lösung gibt, aber ich dachte daran, Hbase auszuprobieren, weil es horizontal skaliert und ich kann Analysen in der Grafik ausführen (der meiste Code ist bereits in Java geschrieben), aber ich bin unsicher Wie strukturiert man ein Diagramm in einer Nosql-Datenbank? Ich weiß, dass jeder Knoten ein Eintrag in der Datenbank sein kann, aber ich bin mir nicht sicher, wie man Kanten modelliert und Eigenschaften hinzufügt (wie Namen von Knoten, Attribute, Pagerank, Gewichte an Kanten, etc ..).

Sehen, wie hbase/hadoop ist nach großen Tabellen und Karte reduziert Ich vermute, es gibt eine Möglichkeit, dies zu tun, aber nicht sicher, wie. Irgendwelche Vorschläge?

Macht das auch Sinn, was ich versuche zu tun? Oder gibt es bessere Lösungen für Big-Data-Graphen?

+0

Auf den Punkt - Sie können Graphen in Hbase speichern. Aber es ist nicht die beste Lösung, um verknüpfte Daten zu behandeln. Traversieren wäre problemanfällig. Sie müssen Filter zum Abrufen auf der Grundlage von Werten (Eigenschaftswerten) verwenden, falls die Knoten-ID (src-Knoten) als Zeilenschlüssel verwendet wird. Besser wäre es, die verfügbaren Graph-Datenbanken zu verwenden, die BigData unterstützen. Dies ist nur ein Vorschlag, keine Antwort, daher füge ich das über den Kommentarblock hinzu. –

Antwort

6

Sie können eine Adjazenzliste in HBase/Accumulo in a speichern spaltenorientierte Mode. Ich bin mehr vertraut mit Accumulo (HBase Terminologie könnte etwas anders sein), so dass Sie vielleicht ein Schema ähnlich verwenden:

SrcNode(RowKey) EdgeType(CF):DestNode(CFQ) Edge/Node Properties(Value) 

Wo CF = ColumnFamily und CFQ = ColumnFamilyQualifier

Das könnte dir auch Speicher-Knoten/Vertex Eigenschaften als separate Zeilen mit so etwas wie:

Node(RowKey) PropertyType(CF):PropertyValue(CFQ) PropertyValue(Value) 

der Property könnte entweder in den CFQ oder den Wert

aus einem Diagramm Prozess Perspektive wie von @ Arnon Rotem-Gal-Oz erwähnt, könnten Sie Apache Giraph betrachten, die eine Implementierung von Google Pregel ist. Pregel ist die Methode, die Google für die Verarbeitung großer Graphen verwendet.

Mit HBase/Accumulo als Eingabe für Giraph kürzlich vorgelegt wurde (7. März 2012) als neues Feature Anfrage Giraph: HBase/Accumulo Input and Output formats (Giraph-153)

2

Sie können den Graphen in HBase als Adjazenzliste speichern, so dass zum Beispiel jeder rohe Spalten für allgemeine Eigenschaften (Name, Pagerank usw.) und eine Liste von Schlüsseln benachbarter Knoten (wenn es ein gerichteter Graph als nur der Knoten, die Sie von diesem Knoten oder eine zusätzliche Spalte mit der Richtung von jedem)

Werfen Sie einen Blick auf apache Giraph (Sie können auch ein wenig mehr über sie here) lesen bekommen können, während dies nicht etwa HBase ist, ist es zur Handhabung Diagramme in Hadoop. Sie können auch Hadoop 0.23 (und höher) betrachten, da die YARN-Engine (alias map/reduce2) offen für Nicht-Map/Reduce-Algorithmen ist.

1

Ich würde nicht HBase verwenden im Weg „Binary-Nerd "empfahl es as HBase does not perform very well when handling multiple column families.

beste Leistung wird mit einer einzigen Spalte Familie erreicht (ein zweiter sollte nur verwendet werden, wenn man sehr oft nur den Inhalt einer Spalte Familie zugreifen und die in der anderen Spalte Familie gespeicherten Daten sind sehr groß)

+0

müssen Sie nicht mehrere Spaltenfamilien verwenden. Ein einziger, wäre ausreichend. Ein zweiter, der auf Edges spezialisiert ist, würde immer noch richtig funktionieren. Die Empfehlung ist bis zu zwei. Dennoch können Sie Kanten in einer eigenen Spalte unter einer einzelnen Spaltenfamilie speichern. – gextra

1

Es gibt Graph-Datenbanken, die auf HBase aufgebaut sind, die Sie ausprobieren und/oder studieren könnten.

Apache S2Graph bietet REST-API zum Speichern und Abfragen der durch Kante und Scheitelpunkte dargestellten Grafikdaten.Dort finden Sie eine Präsentation, in der die Konstruktion von Zeilen-/Spaltenschlüsseln erläutert wird. Eine Analyse der Betriebsleistung, die von der Konstruktion beeinflusst oder beeinflusst wird, wird ebenfalls gegeben.

Titan kann neben HBase auch andere Speicher-Backends verwenden und hat eine Integration in Analytics-Frameworks. Es ist auch mit großen Datensätzen konzipiert.

Verwandte Themen