在 GraphEngine 中表示关系的最规范的方式是什么

What is the most canonical way to represent relationships in GraphEngine

我正在尝试弄清楚如何在我的 TSL 中最好地建模我的数据。不过,在 Friends example, relationships are implied by storing the cell id (or a List of cell ids) in the related nodes. In the Freebase example 中,引入了 [GraphEdge] 的概念。我希望文档(也许在这里),我们可以清楚地了解如何使用 GraphEngine 正确建模 relationships/edges。

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

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

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