我在读关于Janusgraph文档中的Janusgraph Cache部分。对于事务缓存,我有几个疑问。 我正在我的应用程序中使用一个嵌入式的janusgrah服务器。
- 如果我只是进行一个读取查询,例如 - g.V().has("name","ABC") 使用gremlin HTTP端点,那么这个值会被缓存在事务缓存还是数据库级别的缓存中?因为我这里没有开启任何事务。
- 如果它被存储在事务缓存中,如果我有多节点部署,如何获取此顶点的更新值?
我在读关于Janusgraph文档中的Janusgraph Cache部分。对于事务缓存,我有几个疑问。 我正在我的应用程序中使用一个嵌入式的janusgrah服务器。
关于问题1:
如果没有明确创建,事务将自动创建。这是从JanusGraph参考文档中得出的结论:
JanusGraph中的每个图操作都发生在事务的上下文中。根据TinkerPop的事务规范,每个线程在图数据库上打开自己的事务,并执行第一次操作(即检索或变异)。
在事务期间检索的顶点存储在事务缓存和数据库缓存中。关闭事务后,顶点仍然存在于数据库缓存中(但请注意,自janusgraph-0.5.x以来,默认情况下禁用数据库缓存)。
关于问题2:
确实,JanusGraph实例无法知道其他实例事务缓存中顶点的修改。只有在这些事务关闭并持久化到存储和索引后端之后,其他实例才能从后端读取修改后的顶点。这也意味着其他JanusGraph实例中的缓存可能已经过时,因此,如果您希望确保从后端获取最新数据,则应启动一个新的事务并禁用数据库缓存(默认设置)。
顶点缓存是JanusGraph的私有成员,没有任何地方向用户公开(甚至不在调试日志中)。遍历中的缓存命中只能从快速(亚毫秒级别)的返回时间中看到。
如果数据一致性对您的事务或JanusGraph实例很重要,则可以查看: