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