2

我试图弄清楚如何在我的 TSL 中最好地建模我的数据。在Friends 示例中,通过在相关节点中存储单元格 ID(或单元格 ID 列表)来暗示关系。不过,在Freebase 示例中,引入了 [GraphEdge] 的概念。我希望文档(也许在这里),我们可以清楚地了解如何使用 GraphEngine 正确建模关系/边缘。

4

1 回答 1

4

据我所知,文档中没有这样的标准方法,最佳实践也取决于我们自己的要求,例如性能或便利性。以下是我在不同情况下的选择:

  1. 对于非常常见的有向无标签图,我只使用邻居的单元格 ID(邻接列表)作为字段。而且我发现它对于大多数图形操作都非常有效;
  2. 对于边上有属性的有向图,有两种选择:使用自定义值的列表struct,或为边设置单独的单元格并将边连接到源/目标节点单元格。对于大多数图形操作,前者实际上比后者快。但代价是它不允许在不访问节点单元的情况下访问一条边,这是后者的好处;
  3. 对于边上没有属性的无向图,对于每条边 (u, v),我将它们的单元格 ID 放在彼此的邻接列表中;
  4. 对于边上具有属性的无向图,为每条边设置一个单独的边单元,存储其上的所有信息,包括关联的节点和属性;
  5. 对于一条边可能连接多个节点的超图,我的选择与 4 相同。

引入的概念 [GraphEdge] 用于通过语言集成知识查询(LIKQ)来识别边缘,但是,如果我们的应用程序不是建立在 LIKQ 之上,它不会影响我们的使用。

于 2017-04-01T03:07:30.303 回答