【发布时间】:2014-02-15 12:50:28
【问题描述】:
我在 Spring Web 应用程序中使用 Titan。当我添加新边或删除顶点时,它实际上已被删除,但并未反映在我的网页中。我的查询仍然得到旧的边或顶点。
为此,我必须重新启动我的应用程序。
每次新增或删除后我都在做g.commit()。
【问题讨论】:
标签: titan
我在 Spring Web 应用程序中使用 Titan。当我添加新边或删除顶点时,它实际上已被删除,但并未反映在我的网页中。我的查询仍然得到旧的边或顶点。
为此,我必须重新启动我的应用程序。
每次新增或删除后我都在做g.commit()。
【问题讨论】:
标签: titan
考虑在新的 HTTP 请求开始时发出 g.rollback() 以确保您获得全新的视图。这就是 Rexster 目前的做法。
【讨论】:
at the start of a new HTTP request 是否意味着在处理从用户端发出的每个 HTTP 请求之前,我应该调用 g.rollback()
g.rollback()会影响titan中发生的其他读/写操作吗?任何性能问题?
补充斯蒂芬的答案:
这里的问题不在于缓存层,而是 Titan 使用事务来对图进行读写操作。 因此,这里发生的情况是,在 g.commit() 之后的写入操作成功地将新数据存储在图中,但后续读取发生在旧事务中(因为之前的读取事务未提交或回滚)并且因此变化是可见的。
从事务的角度来看,这是正确的行为,但当您不将“读取”视为事务时,可能会令人困惑。
【讨论】: