Janusgraph Cache



我正在Janusgraph文档中阅读有关Janusgraph缓存的内容。关于事务缓存,我有一些疑问。我在我的应用程序中使用嵌入式janusgrah服务器。

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

关于问题1:
如果没有显式创建,事务将自动创建。来自JanusGraph参考文档:

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

在事务中检索到的顶点同时存储在事务缓存和数据库缓存中。关闭事务后,顶点仍在数据库缓存中(但注意,自janusgraph-0.5以来)。

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

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

顶点缓存是JanusGraph的私有成员,不会暴露给用户(甚至在调试日志中也不会)。遍历中的缓存命中仅在快速(亚毫秒)返回时间内可见。

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

  • https://docs.janusgraph.org/v0.4/advanced-topics/eventual-consistency/数据一致性
  • janusgraph-0.6.0中新的CacheVertex::refresh特性(仍然没有文档)。

相关内容

  • 没有找到相关文章

最新更新