Gremlin返回结果异常与JanusGraph实际数据不一致如何同步?
解决方法
- 每次Gremlin查询前手动重置当前会话事务:默认情况下Gremlin控制台连接JanusGraph时会自动开启长期存活的只读事务,且内置事务级缓存,所有查询会优先读取缓存中的历史数据,不会拉取后端已提交的最新变更。每次执行查询前先运行
g.tx().rollback()终止当前旧事务,新发起的查询会自动开启新事务拉取最新数据。 - 关闭测试环境的实例级缓存:JanusGraph默认开启全局实例缓存,已读取的数据会被缓存到实例内存中供所有会话共享,导致已提交的变更无法立刻被其他会话查询到。测试场景下可修改JanusGraph配置项
cache.db-cache = false,关闭全局缓存即可实现多会话数据实时一致,性能要求高的生产环境可在测试完成后重新开启该配置。 - 调整事务隔离级别:将JanusGraph的事务默认隔离级别调整为
READ_COMMITTED,对应配置项为transaction.isolation-level = READ_COMMITTED,该级别下所有新事务会直接读取后端已提交的最新数据,不会读取未提交的中间变更,同时避免不同会话之间的读取冲突。 - 开启自动提交配置:单元测试场景下可给Gremlin查询源配置自动提交参数,创建
GraphTraversalSource时添加transaction.autocommit = true配置,每次查询执行完成后会自动提交事务清空缓存,无需手动执行事务重置操作。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

