【发布时间】:2017-01-19 06:57:01
【问题描述】:
我一直在使用 arangodb 开发一个配置管理系统,它收集一些常见软件的配置数据并流式传输到一个程序,该程序将根据一些预定义的规则生成这些软件之间的关系,然后将关系保存到 arangodb .建立关系后,我提供API来查询数据。一个重要的查询是生成这些软件的拓扑。我使用图遍历来生成具有以下 AQL 的拓扑:
for n in nginx for v,e,p in 0..4 outbound n forward, dispatch, route,INBOUND deployto, referto,monitoron filter @domain in p.edges[0].server_name return {id: v._id, type: v.ci_type}
可以生成以下拓扑: software relation topology
看起来不错。但是,完成查询大约需要 10 秒,这是不可接受的,因为卷不是很大。我检查了所有集合和最大的集合,“前向”边缘集合只有大约 28000 个文档。所以我做了一些测试: 我将深度从 0..4 更改为 0..2,完成查询只需要 0.3 秒 我将深度从 0..4 更改为 0..3,大约需要 3 秒 对于 0..4,大约需要 10 秒 由于“转发”边缘有一个 server_name 属性,所以我添加了一个哈希索引(server_name [*]),但似乎 arangodb 没有使用解释执行计划中的索引 我可以优化查询的任何提示?以及为什么在这种情况下不能使用索引?
希望有人可以帮助我解决这个问题。提前致谢,
【问题讨论】:
-
我也见过这样的查询速度变慢,但速度变慢的原因有时可能只是返回的数据量。您是否尝试在返回 0..2 与 0..4 的数据时测量响应的大小?想知道响应的大小是否有任何惊喜。
-
其实返回数据是在一个小集合里。它是一个包含大约 400 个元素的向量,具有 0..4 的两字段哈希图。
标签: arangodb