了解Titan Traversals

时间:2016-02-04 11:00:25

标签: traversal titan tinkerpop

我正在尝试用titandb编写一个高度可扩展的系统。我有一些节点高度连接的情况。 想象一下更大规模的以下例子。

Example Graph

现在我遇到以下情况:

  1. 我想找到节点 X 的所有提示。
  2. 我想找一个节点 X 的特定朋友,例如 5
  3. 对于方案1,我执行:g.V(X).out(friend).toList()。对于方案2,我执行:g.V(X).out(friend).hasId(5).next()。这两个遍历都可以正常工作,但随着 X 吸引更多朋友而缩小规模。我可以通过在边缘标签上添加更多信息来优化这种情况吗?例如,如果在 X 5 之间的边缘,我将标签更改为freind_with_5,则以下内容会更快:

    `g.V(X).out(freind_with_5).next()`
    

    根据我的理解,这将更快,因为只有1个边缘将被遍历。但是,如果我对边缘标签进行了这样的更改,我将如何找到 X 的所有朋友?

1 个答案:

答案 0 :(得分:1)

您可以将数据编码到您的边缘标签中,但我会说这样做会以图形架构复杂化为代价而且,正如您所注意到的那样,很难做出简单的事情,例如"找到我所有的朋友和#34 ;.我不认为你应该采取这种方法。

处理此问题的首选方法是使用vertex-centric indices。如果将任何数据归一化到边缘,则应该考虑这些索引(而不是将该数据编码到边缘标签中)。在"朋友"上为朋友添加一些唯一标识符。边缘和索引。

如果您的超级节点特别大(数百万+边缘),您还应该考虑Titan的vertex partitioning功能。