vaticle-typedb - 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 是一个针对图进行了优化的图数据库,并且还应该更快地解决传递闭包,但即使是浅空图,它似乎也很难处理查询。我认为我的架构或查询有问题。
这使我相信我的实体定义或语法的某些方面导致匹配查询非常慢。我想知道从哪里开始寻找(或者这实际上是预期的速度)?
解决方案
不知道是什么原因导致缓慢,但请随意测试 Grakn 2.0(完全从头重写,以提高性能) - alpha 版本现已发布(缺少规则等一些内容),完整版将发布很快!
推荐阅读
- javascript - 为什么当我向下滚动时画布下方有空白
- python - 想知道 PIL liarary 中 Image.resize 操作的详细情况
- mysql - MySQL 返回列中每个值的总 COUNT
- java - java @Autowired 返回空值。不能让弹簧工作
- java - 提取素数
- android - 调用使用 PHP 开发的本地 rest api 时出现 null 的 VolleyError
- python - 在 altair 中向分层图表添加图例
- php - 如何在 PHP 页面重新加载中获取选定的选项值
- x86 - 中断服务程序和 IRQ
- javascript - 从具有相似键的 JSON 对象中检索数据