【发布时间】:2019-04-13 16:19:46
【问题描述】:
我有一个表示游戏关卡的图表。我拥有的节点类型的一些示例是“Level”、“Room”、“Chair”。这些类型由 VertexCollections 表示,其中一个集合称为“Level”等。它们由来自不同 EdgeCollections 的边连接,例如“Level”-roomEdge->“Room”-chairEdge->“Chair”。房间也可以包含房间等,所以深度是未知的。
我想从任意的“关卡”-顶点开始,遍历整个子树,找到属于该关卡的所有椅子。
我正在尝试看看 ArangoDB 对我来说是否比 OrientDB 更好,在 OrientDB 中我使用查询:
SELECT FROM (TRAVERSE out() FROM startNode) WHERE @class = 'Chair'
我已经尝试过 AQL 查询:
FOR v IN 1..6 OUTBOUND @startVertex GRAPH 'testDb' FILTER IS_SAME_COLLECTION('Chair', v) == true RETURN v;
然而,与 OrientDB 查询相比,它的执行速度似乎要慢得多(~1 秒 vs ~0.1 秒)。
我用于查询的代码如下:
String statement = "FOR v IN 1..6 OUTBOUND @startVertex GRAPH 'testDb' FILTER IS_SAME_COLLECTION('Chair', v) == true RETURN v";
timer.start();
ArangoCursor<BaseDocument> cursor = db.query(statement, new MapBuilder().put("startVertex", "Level/"+startNode.getKey()).get(), BaseDocument.class);
timer.saveTime();
两个解决方案都在相同的硬件上运行,没有进行任何优化,两个数据库都是“开箱即用”的。两种情况都使用相同的数据(约 100 万个顶点)并返回相同的结果。
所以我的问题是我是否在 AQL 查询中正确地做事,或者有更好的方法吗?我是否误解了 VertexCollections 的概念以及它们的使用方式?
【问题讨论】:
标签: arangodb