在GraphEngine

时间:2017-03-07 01:44:07

标签: graphengine

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

1 个答案:

答案 0 :(得分:3)

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

  1. 对于一个非常常见的无标签图,我只是使用邻居' cell id(邻接列表)作为字段。我发现它对大多数图形操作非常有效;
  2. 对于边缘具有属性的有向图,有两种选择:使用自定义struct的值列表,或为边设置单个单元格并将边连接到源/目标节点单元。对于大多数图形操作,前者实际上比后者快。但是成本是它不允许在不访问节点单元的情况下访问边缘,这是后者的好处;
  3. 对于没有边缘属性的无向图,对于每条边(u,v),我将它们的单元ID放在彼此的邻接列表中;
  4. 对于边缘属性的无向图,为每条边设置一个单独的边缘单元,存储其中的所有信息,包括相关的节点和属性;
  5. 对于边缘可能连接多个节点的超图,我的选择与4相同。
  6. 引入的概念[GraphEdge]用于通过语言集成知识查询(LIKQ)识别边缘,但是,如果我们的应用程序不是建立在LIKQ之上,它将不会影响我们的用法。