JanusGraph 缓存

3

我在读关于Janusgraph文档中的Janusgraph Cache部分。对于事务缓存,我有几个疑问。 我正在我的应用程序中使用一个嵌入式的janusgrah服务器。

  1. 如果我只是进行一个读取查询,例如 - g.V().has("name","ABC") 使用gremlin HTTP端点,那么这个值会被缓存在事务缓存还是数据库级别的缓存中?因为我这里没有开启任何事务。
  2. 如果它被存储在事务缓存中,如果我有多节点部署,如何获取此顶点的更新值?
1个回答

4

关于问题1:

如果没有明确创建,事务将自动创建。这是从JanusGraph参考文档中得出的结论:

JanusGraph中的每个图操作都发生在事务的上下文中。根据TinkerPop的事务规范,每个线程在图数据库上打开自己的事务,并执行第一次操作(即检索或变异)。

在事务期间检索的顶点存储在事务缓存和数据库缓存中。关闭事务后,顶点仍然存在于数据库缓存中(但请注意,自janusgraph-0.5.x以来,默认情况下禁用数据库缓存)。

关于问题2:

确实,JanusGraph实例无法知道其他实例事务缓存中顶点的修改。只有在这些事务关闭并持久化到存储和索引后端之后,其他实例才能从后端读取修改后的顶点。这也意味着其他JanusGraph实例中的缓存可能已经过时,因此,如果您希望确保从后端获取最新数据,则应启动一个新的事务并禁用数据库缓存(默认设置)。

附加评论(添加于9月12日):

顶点缓存是JanusGraph的私有成员,没有任何地方向用户公开(甚至不在调试日志中)。遍历中的缓存命中只能从快速(亚毫秒级别)的返回时间中看到。

如果数据一致性对您的事务或JanusGraph实例很重要,则可以查看:


有没有一种方法可以检查查询是否命中了后端存储或事务/数据库级缓存? - Harshit Sharma
JanusGraph是否直接在后端存储中更新值?我想了解他们用什么策略来更新后端存储和缓存中的值。我尝试从一个节点更新顶点的属性,然后从另一个节点访问它,我能够读取更新后的属性。 - Harshit Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接