1

我在 OrientDB 中有一个图(使用 Tinkerpop 堆栈),并且需要启用非常快速的边缘值/属性/字段和边缘输入/输出顶点查找。

所以,基本上用户需要如下查找:

从 myEdges 中选择 inVertex = {VertexIdentity},outVertex = {VertexIdentity},property1 = 'xyz'

本质上,它是边缘类的复合索引,具有 3 个属性:inVertex、outVertex 和 property1

基本上 - 如果用户已经有 2 个顶点的 VertexIdentity(也许,形式为:#CLUSTER_ID:RECORD_ID) - 以及属性值(在这种情况下,xyz) - 它将允许非常快速的查找以查看组合是否已经存在在图中(如果 2 个顶点与 property1 链接) - 不进行遍历。

到目前为止,我找到了以下代码来帮助处理复合索引,但我看不出是否可以在其中包含输入/输出顶点(对于图形边缘)。

https://github.com/orientechnologies/orientdb/blob/master/tests/src/test/java/com/orientechnologies/orient/test/database/auto/SQLSelectCompositeIndexDirectSearchTest.java

可能吗??

4

2 回答 2

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 类,然后在索引中

于 2013-11-09T11:29:42.157 回答
1

您可以使用 OrientDB 来做到这一点,只需针对 in 和 out 属性创建复合索引(之前在 E 类中声明它们)。

这也用作约束以避免多条边连接相同的顶点。

于 2013-10-14T13:32:23.767 回答