【问题标题】:Titan: Refreshing the graph after adding new vertex or edgesTitan:添加新顶点或边后刷新图形
【发布时间】:2014-02-15 12:50:28
【问题描述】:

我在 Spring Web 应用程序中使用 Titan。当我添加新边或删除顶点时,它实际上已被删除,但并未反映在我的网页中。我的查询仍然得到旧的边或顶点。

为此,我必须重新启动我的应用程序。

每次新增或删除后我都在做g.commit()

【问题讨论】:

    标签: titan


    【解决方案1】:

    考虑在新的 HTTP 请求开始时发出 g.rollback() 以确保您获得全新的视图。这就是 Rexster 目前的做法。

    【讨论】:

    • at the start of a new HTTP request 是否意味着在处理从用户端发出的每个 HTTP 请求之前,我应该调用 g.rollback()
    • 是的......这将确保处理请求的线程的新事务。
    • 使用g.rollback()会影响titan中发生的其他读/写操作吗?任何性能问题?
    • 其他读/写操作应该发生在不同的线程中。所有 Titan 事务都发生在线程的上下文中,因此它不应该干扰。事实上,回滚几乎是必需的,因为未正确处理先前请求的失败可能会导致该线程处理的未来请求出现奇怪的行为。先发制人的 rollback() 是一种安全处理的好方法。同样,这就是 Rexster 处理此类事情的方式。我不会期望性能损失。
    • 稍微编辑了我的答案,以反映马蒂亚斯对问题的解释,以避免混淆。
    【解决方案2】:

    补充斯蒂芬的答案:

    这里的问题不在于缓存层,而是 Titan 使用事务来对图进行读写操作。 因此,这里发生的情况是,在 g.commit() 之后的写入操作成功地将新数据存储在图中,但后续读取发生在旧事务中(因为之前的读取事务未提交或回滚)并且因此变化是可见的。

    从事务的角度来看,这是正确的行为,但当您不将“读取”视为事务时,可能会令人困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多