caching - Janusgraph 缓存

标签 caching transactions guava tinkerpop janusgraph

我在 Janusgraph 文档中阅读了有关 Janusgraph Cache 的内容。 关于事务缓存,我几乎没有怀疑。我在我的应用程序中使用嵌入式 janusgrah 服务器。

  1. 如果我只对例如进行读取查询。 - G。 V().has("name","ABC") 使用 gremlin HTTP 端点,那么这个值将缓存在事务缓存或数据库级缓存中吗?因为在这里我没有开启任何交易。
  2. 如果它存储在事务缓存中,如果我有多节点部署,将如何为该顶点获取更新值?

最佳答案

关于问题1:
如果没有明确创建,交易会自动创建。来自JanusGraph reference docs :

Every graph operation in JanusGraph occurs within the context of a transaction. According to the TinkerPop’s transactional specification, each thread opens its own transaction against the graph database with the first operation (i.e. retrieval or mutation) on the graph.

事务期间检索到的顶点存储在事务缓存和数据库缓存中。关闭事务后,顶点仍在数据库缓存中(但请注意,自 janusgraph-0.5.x 起,数据库缓存默认处于禁用状态)。

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

其他评论(9 月 12 日添加):

顶点缓存是 JanusGraph 的私有(private)成员,无处向用户公开(甚至不在调试日志中)。遍历中的缓存命中仅在 fast (sub-millisecond) return time 中可见.

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

关于caching - Janusgraph 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69040069/

相关文章:

ios - SDWebImage 没有缓存到磁盘

javascript - JavaScript 会缓存 DOM 元素吗?

java - Guava 缓存api中的RemovalListener回调是否确保没有人在使用该对象

java - 事务教程-测试回滚

php - MySQL 事务时序

sql - 如果成功提交嵌套事务,父事务是否有可能失败

java - LoadingCache expireAfterWrite 未按预期工作

java - 将集合转换为 map

mysql - 尽管 DBMS 有自己的缓存,为什么我需要使用缓存服务器?

guava - Datastax Cassandra 驱动程序抛出 CodecNotFoundException