如何减少Titan中两个Vertex之间相同边缘标签的数量

时间:2016-09-01 05:41:45

标签: graph titan gremlin

假设我们有两种类型的顶点:LOGIN_USER(属性:user_id)和IP(属性:ip),它们之间的EDGE是:LOGIN(属性:session_id,login_time)。

这个模型的问题是一个USER和IP之间有两个边缘(可以是几千个)。 有没有减少两个顶点的边数,同时可以保持属性:sessionId和login_time?我们想要为某些查询过滤这两个属性。 Edge属性不支持基数:列出哪个顶点属性支持。

如果将所有edge属性放入Vertex,它是否会影响获取Vertex的性能? 当Vertex的titan加载属性?当遍历到顶点时,让我们使用g.V(1).next(),Titan是否加载顶点的所有属性?

1 个答案:

答案 0 :(得分:1)

当你说"千"在USER和IP之间的边缘,你认为它实际上可能是"数百万"或者"数千万"或者更多?如果没有,那么"数千"对{4}}的泰坦来说不应该是个问题。索引边缘属性,您应该快速排序和遍历。

当你开始深入了解数百万"时,你可能会开始遇到一些问题 - 对于我来说,一直处理全局查询,使用titan-hadoop作为顶点并且必须保持其边缘在记忆中。当您进行全局分析时,这可能会导致一些麻烦。从操作角度来看,Titan总是很乐意在顶点上保持数百万的边缘,但我倾向于避免它。当然,我在Titan 1.0中的vertex centric indices之前就已经有了很多这方面的经验:

  

剪切顶点意味着存储该顶点邻接的子集   列表中的每个分区。换句话说,顶点和   它的邻接列表被分割,从而有效地分发   在集群中的所有实例上加载该单个顶点   并删除热点。

当您开始将超级节点发展为数百万时,您可能会尝试使用

我认为数百万边缘的超级节点的另一个选择是围绕它建模。也许您在USER和IP之间引入了一些结构。将单个LOGIN边缘转换为可能在它们之间引入时间概念的某些顶点/边缘,如:

USER - > LOGIN_YEAR - > LOGIN_MONTH - > IP

现在,不是在USER和IP之间只创建一条边,而是创建一个LOGIN_YEAR顶点和一个LOGIN_MONTH顶点。