代码之家  ›  专栏  ›  技术社区  ›  The-Big-K

如何列出正在运行的gremlin查询?如何取消慢速或长时间运行的查询?

  •  4
  • The-Big-K  · 技术社区  · 7 年前

    大多数数据库都提供了一种机制,用户可以列出正在运行的查询,并在需要时取消它们。这在终止需要大量时间的查询时特别有用。例如,在MySQL中,您将执行以下操作:

    mysql>show processlist;
    mysql> kill <pid>;
    

    如何在gremlin服务器上执行类似操作?到目前为止,唯一可用的旋钮是 scriptEvaluationTimeout 在yaml配置中,允许您在超时时终止请求。我对一个可以列出所有正在运行的查询的API和一个可以让我按ID删除查询的API感兴趣。如果还不支持,tinkerpop是否计划在新版本中支持它?比如:

    g.query()
    g.query('123')
    g.query('123').cancel()
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   stephen mallette    7 年前

    Gremlin服务器中没有列出正在运行的查询的内容。配置了更详细级别的服务器日志可能会给您一些提示,但我想这并不是一个很好的解决方法。一些图形系统将具有为您提供这些信息的本机功能,即“一个缓慢的查询日志”之类的功能,但TinkerPop不会向您公开这些信息。

    至于取消,根据标准的TinkerPop语义 Traversal 应该尊重线程中断请求。这些语义由TinkerPop流程测试套件强制执行。也就是说,仍然要由图形提供者来正确地允许这种行为。Gremlin服务器将尝试中断超过 scriptEvaluationTimeout 服务器上的配置或每个请求提供的该值的覆盖。适当地设置这些超时,并使用一个尊重TinkerPop语义的提供者来取消,这是对失控遍历的最佳防御。请注意,仅实现Gremlin服务器协议(但可能不使用Gremlin服务器本身)的图形提供程序可能具有不同的超时控制选项。

    在3.x版本中,我们确实改进了Tinkerpop2.x的遍历取消功能,希望4.x版本能够完美地完成。

    推荐文章