我正在尝试用titandb编写一个高度可扩展的系统。我有一些节点高度连接的情况。 想象一下更大规模的以下例子。
现在我遇到以下情况:
对于方案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 的所有朋友?
答案 0 :(得分:1)
您可以将数据编码到您的边缘标签中,但我会说这样做会以图形架构复杂化为代价而且,正如您所注意到的那样,很难做出简单的事情,例如"找到我所有的朋友和#34 ;.我不认为你应该采取这种方法。
处理此问题的首选方法是使用vertex-centric indices。如果将任何数据归一化到边缘,则应该考虑这些索引(而不是将该数据编码到边缘标签中)。在"朋友"上为朋友添加一些唯一标识符。边缘和索引。
如果您的超级节点特别大(数百万+边缘),您还应该考虑Titan的vertex partitioning功能。