首页 > 解决方案 > Grakn 匹配查询的性能在几乎为空的图形上非常慢

问题描述

(使用最新版本的 Grakn 社区)

我有一个包含一些规则和实体的图表,其中一种实体类型大多是孤立的(不是任何关系的一部分,但确实起作用)。

我在下面定义了这个实体类型,用户:

containment sub relation,
  relates container,
  relates containee;

uuid sub attribute, value string;
last-seen sub attribute, value datetime;

user sub entity,
  has uuid,
  has last-seen,
  plays containee;

属性仅由用户拥有。我目前在我的图表中有 5 个用户实例用于测试,当我运行匹配查询时,性能会严重下降。

例如,考虑以下查询:

match $u isa user, has uuid "test"; get; offset 0; limit 1;

此查询在 30 秒内以约 100 次调用计入时钟,考虑到我们希望从数据库中获取非常特定用户的频率,IMO 非常慢。涉及使用关系查询用户的更复杂的查询会成倍地变慢。

计时,即使图表几乎是空的,在 Mongo 中运行 find-populate 仍然更快。使用包含 100 个关系的较大图表,这甚至不是一场竞赛,因为 Grakn 查询可能需要几分钟才能返回。

但是,完成 2000 个插入查询(没有匹配子句)只需不到一秒钟的时间。

这对我来说似乎没有任何意义,因为 Grakn 是一个针对图进行了优化的图数据库,并且还应该更快地解决传递闭包,但即使是浅空图,它似乎也很难处理查询。我认为我的架构或查询有问题。

这使我相信我的实体定义或语法的某些方面导致匹配查询非常慢。我想知道从哪里开始寻找(或者这实际上是预期的速度)?

标签: vaticle-typedb

解决方案


不知道是什么原因导致缓慢,但请随意测试 Grakn 2.0(完全从头重写,以提高性能) - alpha 版本现已发布(缺少规则等一些内容),完整版将发布很快!


推荐阅读