如何增加 Titan 图形数据库边缘标签中的访问次数?
How to increment Number of Visit count in Titan graph database Edge Label?
我的顶点是 User1 和 User2。当 User1 访问 User2 配置文件时,我添加了一个带有计数变量的边(即已访问)。
当 User1 再次访问 User2 配置文件时,我如何增加计数变量。
使用 Titan 时,根据用例,不建议改变边缘,因为它会在内部导致删除和重新创建该边缘(请注意边缘 ID 会发生变化)。如果使用 Cassandra 后端,这可能会导致您必须自己处理 creation of tombstones。如果可以的话,避免改变边缘。实际上,边应该被视为 "facts" 不会改变(因此具有不变性):"visit fact" 发生了,所以 "visited 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();
但是,正如@jbmusso 指出的那样,这是非常不明智的。墓碑很快就会成为一个问题,您的系统根本无法扩展。
我的顶点是 User1 和 User2。当 User1 访问 User2 配置文件时,我添加了一个带有计数变量的边(即已访问)。
当 User1 再次访问 User2 配置文件时,我如何增加计数变量。
使用 Titan 时,根据用例,不建议改变边缘,因为它会在内部导致删除和重新创建该边缘(请注意边缘 ID 会发生变化)。如果使用 Cassandra 后端,这可能会导致您必须自己处理 creation of tombstones。如果可以的话,避免改变边缘。实际上,边应该被视为 "facts" 不会改变(因此具有不变性):"visit fact" 发生了,所以 "visited 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();
但是,正如@jbmusso 指出的那样,这是非常不明智的。墓碑很快就会成为一个问题,您的系统根本无法扩展。