【发布时间】:2021-05-20 20:11:27
【问题描述】:
我在 ArangoDB 中将基本的分层游戏树存储为图形。每棵博弈树都有一个起始节点,每个节点(包括起始节点)有2-5条边(动作)。我有 2 个集合,顶点的节点和边的动作。
我正在使用 Node JS SDK,并试图找到查询所有起始节点的最佳方法?我应该向节点添加 isRoot 属性并使用它查询节点集合吗?或者我应该使用操作集合查询所有执行过滤器的节点以查找没有入站边缘的节点?还是单独的起始节点集合?
【问题讨论】:
我在 ArangoDB 中将基本的分层游戏树存储为图形。每棵博弈树都有一个起始节点,每个节点(包括起始节点)有2-5条边(动作)。我有 2 个集合,顶点的节点和边的动作。
我正在使用 Node JS SDK,并试图找到查询所有起始节点的最佳方法?我应该向节点添加 isRoot 属性并使用它查询节点集合吗?或者我应该使用操作集合查询所有执行过滤器的节点以查找没有入站边缘的节点?还是单独的起始节点集合?
【问题讨论】:
查找根节点的遍历或基于聚合的方法效率不高。最快的选择可能是添加一个isRoot 属性,您可以对其进行查询和索引。
您还可以创建一个额外的顶点,该顶点具有到每个根节点的出边,以便您可以从该节点执行 1 跳遍历到所有根节点。但是,如果您想沿相反方向遍历,并且该节点将是人们通常试图避免的超级节点,这可能会妨碍您。
【讨论】: