【发布时间】:2015-11-19 14:36:26
【问题描述】:
我正在使用 Neo4j 和 OrientDB,我将比较它们在遍历方面的性能和功能(Neo4j 中的 Java Traversal API 和 OrientDB 中的 Native Fluent API)。
对于 OrientDB,应该可以从特定顶点开始并获取所有可到达的顶点,并且每个单独步骤上的属性 access 的交集也存在。例如,如果您有图 A --> B --> C --> D,其中 A、B 和 C 具有 access = www em> 和 D 的值为 access = https,应返回顶点 A、B 和 C。
我最近问了一个问题,然后我发布了我的解决方案,如何在 Neo4j 上进行属性比较。
Neo4j node property comparison during traversal
在 Neo4j 中,可以创建一个 TraversalDescription,它描述了遍历的规则和行为。例如以下:AccesListEvaluator 将比较两个连接节点的属性,正如您在上面提到的 Neo4j 比较发布的解决方案中看到的那样。
TraversalDescription td = db.traversalDescription().depthFirst()
.relationships(RelationshipLabel.REFERENCED_BY, Direction.OUTGOING)
.evaluator(new AccessListEvaluator());
如果您执行以下代码示例,您将从 startNode 取回所有可到达的节点,您可以遍历它们并提取它们的所有属性。
td.traverse(startNode).nodes();
我需要所有节点,因为我必须提取它们的属性并将其存储在自己的数据结构中。
是否可以使用 OrientDB Native Fluent API 提供类似的解决方案?我检查了手册Java Traverse,但我无法从给定的示例中偏离可行的解决方案。如果我执行以下代码示例,我只会获取目标的属性以及 IN 和 OUT 连接。
for (OIdentifiable oi : new OTraverse().field("in").field("out").target(new ORecordId("#24:0"))) {
System.out.println(oi);
}
在我看来,您只能取回与其他节点的可能连接。 有没有机会,用 Native API 来获取每个顶点和每个顶点的属性?
希望我的问题可以理解。 提前致谢
【问题讨论】:
标签: properties comparison traversal orientdb vertex