如何在Titan graph数据库边缘标签中增加访问次数?

如何在Titan graph数据库边缘标签中增加访问次数?,graph,graph-databases,gremlin,titan,Graph,Graph Databases,Gremlin,Titan,我的顶点是User1和User2。当User1访问User2配置文件时,我添加了一条边,即使用count变量访问 当User1再次访问User2配置文件时,如何增加count变量。使用Titan时,根据使用情况,不建议对边进行变异,因为它会在内部导致删除和重新创建该边。请注意,边id将更改。如果使用Cassandra后端,这可能会导致您必须自己处理的问题。如果可以,请避免变异边。实际上,边应该被视为不会改变的事实,因此具有不变性:发生了访问事实,因此创建了访问的边。事实不会改变,但它们可能会被新

我的顶点是User1和User2。当User1访问User2配置文件时,我添加了一条边,即使用count变量访问


当User1再次访问User2配置文件时,如何增加count变量。

使用Titan时,根据使用情况,不建议对边进行变异,因为它会在内部导致删除和重新创建该边。请注意,边id将更改。如果使用Cassandra后端,这可能会导致您必须自己处理的问题。如果可以,请避免变异边。实际上,边应该被视为不会改变的事实,因此具有不变性:发生了访问事实,因此创建了访问的边。事实不会改变,但它们可能会被新的事实和新的优势所否定


如果您希望用户访问次数很少,则可以修改edge并增加count属性,尽管您可能会失去使用图形数据库的一些好处,我认为这是一种反模式。如果您希望有大量的访问,您可能希望每次访问都添加一条新的边,我会选择这条路线,这对于图形数据库来说是一个完美的用例。为了获得更高的访问量和更快地检索总访问次数,您可能还希望通过在访问顶点上存储计数器属性来跟踪访问计数边缘计数。

使用Titan时,根据使用情况,不建议对边进行变异,因为它会在内部导致该边的删除和重新创建。请注意,边id将更改。如果使用Cassandra后端,这可能会导致您必须自己处理的问题。如果可以,请避免变异边。实际上,边应该被视为不会改变的事实,因此具有不变性:发生了访问事实,因此创建了访问的边。事实不会改变,但它们可能会被新的事实和新的优势所否定


如果您希望用户访问次数很少,则可以修改edge并增加count属性,尽管您可能会失去使用图形数据库的一些好处,我认为这是一种反模式。如果您希望有大量的访问,您可能希望每次访问都添加一条新的边,我会选择这条路线,这对于图形数据库来说是一个完美的用例。为了获得更高的访问量和更快地检索总访问次数,您可能还希望通过在访问顶点上存储计数器属性来跟踪访问计数边缘计数。

因此,如果要执行变异,您可以执行类似于假设已创建属性的操作:

Edge edge = g.traversal().V(user1.id).outE("Label").as("found_edge").otherV().hasId(user2.id).select("found_edge").next();
int newValue = egde.value("count") + 1;
edge.property("count", newValue);
g.commit();

但是,正如@jbmuso所指出的,这是非常不明智的。墓碑很快成为一个问题,你的系统根本无法扩展

因此,如果你想执行变异,你可以做一些事情,比如假设属性已经创建:

Edge edge = g.traversal().V(user1.id).outE("Label").as("found_edge").otherV().hasId(user2.id).select("found_edge").next();
int newValue = egde.value("count") + 1;
edge.property("count", newValue);
g.commit();

但是,正如@jbmuso所指出的,这是非常不明智的。墓碑很快成为一个问题,你的系统根本无法扩展

我认为这将是更好的方法。我应该在每次新的访问时添加带有时间戳的边缘本身,而不是增加计数。我认为这将是更好的方法。我应该在每次新访问时添加带有时间戳的边缘本身,而不是增加计数。