我在OrientDB中有一个图形(使用Tinkerpop堆栈),需要能够非常快速地查找边缘值/属性/字段和边缘输入/输出顶点。
因此,基本上用户需要查找如下:
SELECT from myEdges WHERE inVertex = {VertexIdentity},outVertex = {VertexIdentity},property1 ='xyz'
本质上,它是边缘类的复合索引,具有3个属性:inVertex,outVertex& property1
基本上 - 如果用户已经有2个顶点的VertexIdentity(可能,形式为:#CLUSTER_ID:RECORD_ID) - 以及属性值(在这种情况下,xyz
) - 它将允许非常快查找组合中是否已存在组合(如果2个顶点与property1链接) - 不进行遍历。
到目前为止,我找到了以下代码来帮助处理复合索引,但我不知道是否可以在此处包含in / out顶点(对于图形边缘)。
有可能吗?
答案 0 :(得分:3)
这适用于定义边缘唯一性:
OCommandSQL declareIn= new OCommandSQL();
declareIn.setText("CREATE PROPERTY E.in LINK");
OCommandSQL declareOut= new OCommandSQL();
declareOut.setText("CREATE PROPERTY E.out LINK");
OCommandSQL createIndexUniqueEdge= new OCommandSQL();
createIndexUniqueEdge.setText("CREATE INDEX unique_edge ON E (in, out) UNIQUE");
graph.command(declareIn).execute();
graph.command(declareOut).execute();
graph.command(createIndexUniqueEdge).execute();
在这种情况下,只需将另一个属性添加到Edge类,然后添加到索引
中答案 1 :(得分:1)
您可以使用OrientDB执行此操作,只需针对输入和输出属性创建复合索引(在之前的E类中声明它们)。
这也用作约束,以避免多个边连接相同的顶点。