Gremlin janusgraph中增加顶点计数器性质的有效方法

Gremlin janusgraph中增加顶点计数器性质的有效方法,gremlin,janusgraph,Gremlin,Janusgraph,我正在使用janusGraph-0.2.0和Cassandra后端以及ES 我想在Vertex属性中存储视图数,需要一种高效且可扩展的方法来增加/存储视图数,而不影响读取性能 获取顶点时,从图形中读取视图属性,并在另一个查询中更新新的视图计数。(不会影响读取性能,但计数器不同步) 使用sack存储值1,并将其添加到视图属性 g.withSack(0).V().has("key","keyId"). sack(assign).by("views").sack(sum).by(constan

我正在使用janusGraph-0.2.0和Cassandra后端以及ES

我想在Vertex属性中存储视图数,需要一种高效且可扩展的方法来增加/存储视图数,而不影响读取性能

  • 获取顶点时,从图形中读取
    视图
    属性,并在另一个查询中更新新的
    视图
    计数。(不会影响读取性能,但计数器不同步)

  • 使用
    sack
    存储值1,并将其添加到视图属性

    g.withSack(0).V().has("key","keyId").
       sack(assign).by("views").sack(sum).by(constant(1)).
       property("views", sack())
    
  • 使用内存存储(Redis)增加计数器,并定期将更新保存在图形中
  • 还有其他更好的方法吗
  • 有没有办法在janusGraph中使用cassendra的功能


    无法将Cassandra计数器与JanusGraph一起使用。更重要的是,无法将Cassandra计数器与常规Cassandra表一起使用。卡桑德拉计数器的逻辑是这样发展的:更新计数器不需要锁。这就是为什么为了获得出色的性能,您会受到很多限制

    计数
    视图
    并不是那么容易的任务。简言之,我的建议是选择方案3

    我会使用Redis并定期更新JanusGraph,以防我们在一个数据中心,您的单一主服务器可以处理所有请求(当然,您可以使用一些哈希环在不同的Redis服务器之间拆分计数器,但这会增加维护的复杂性成本)

    如果您有多个数据中心,您的单个主Redis服务器无法处理所有请求,我将使用Cassandra计数器

    如果您有大量的
    查看
    事件,因此即使是Cassandra计数器(及其缓存)也无法处理所有请求,因为磁盘被访问次数太多,并且由于成本高,您无法进行更大的扩展,那么逻辑将更加困难。我从来没有遇到过这种情况,所以这只是理论上的。在这种情况下,我将开发应用服务器来缓存和分组
    视图
    ,并定期将缓存的数据发送给RabbitMQ工作者,以便他们可以更新Cassandra计数器,然后使用JanusGraph中的总视图量更新必要的顶点。在这种情况下,顶点
    视图
    通常会分组,这样我们就不需要每次用+1更新计数器,而是在一次更新中用+100或+1000视图更新计数器。这将大大降低磁盘使用率,最终您将拥有一致且快速的计数器。同样,这个解决方案只是理论上的,应该进行测试。我相信还有其他解决办法

    g.withSack(0).V().has("key","keyId").
       sack(assign).by("views").sack(sum).by(constant(1)).
       property("views", sack())