I want to store the Property Graph in HBase. The property graph is the nodes of the graph, and the edges have properties, and multiple edges can connect the same set of nodes if the edges are of different types.
My query template will either request properties and surroundings, or move around the schedule. For example: Vertex [name = claudio] => OutgoingEdge [knows] => Vertex [gender = female], which will give me all the women who like Claudio.
I know that the graph database does just that, but they usually don't scale across multiple nodes in the case of a huge dataset. Therefore, I am ready to implement this in NoSQL ColumnStore (HBase, Cassandra ...)
Following is my datamodel.
Vertex table : key: vertexid (uuid)
Family "Properties:": <property name> => <property value>, ... Family "Outgoing registers:": <edge key> => <other vertexid>, ...
Family "IncomingEdges:": same as outgoing edges ...
In this table, I can quickly get the properties of the vertex and its adjacency list. I cannot use a vertex as another endpoint because several edges (with different types) can connect the same two Vertices.
Edge table :
key: edge key (composite (<source vertex>, <destination vertex>,; <edge typename>)) (that is, vertexid1_vertexid2_knows)
Family "Properties:": <property name> => <property value> ,. ..
In this table, I can quickly get edge properties.
Edge types :
key: composite (<source vertex>, "out | in", <edge typename>) (i.e. vertexid1_out_knows)
Neighbor: family: <target vertex> => null, ...
/ ,
,
API ( , ,
- (RPC), ().
"" ,
,
, ,
.
vertexid1
: claudio vertexid1_out_knows
.
": " ,
"" .
:
1) : ?
2) ,
(.. "":
)? , ,
uuid-,
.
3) , .
guess regexp .
, ?