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

big*_*g-K 4 graph-databases gremlin tinkerpop tinkerpop3 gremlin-server

大多数数据库为用户提供了列出正在运行的查询的机制,并在需要时取消它们 这对于终止花费大量时间的查询特别有用.例如,在MySQL中你会做这样的事情:

mysql>show processlist;
mysql> kill <pid>;
Run Code Online (Sandbox Code Playgroud)

我怎样才能在gremlin服务器上做类似的事情?到目前为止,唯一可用的旋钮是scriptEvaluationTimeoutyaml配置,它允许您在超时时终止请求.我对能够列出所有正在运行的查询的API以及可以让我按ID删除查询的API感兴趣.如果不支持,tinkerpop是否有计划在较新版本中支持它?就像是:

g.query()
g.query('123')
g.query('123').cancel()
Run Code Online (Sandbox Code Playgroud)

ste*_*tte 5

Gremlin Server中没有任何内容可以列出正在运行的查询.配置了更高详细级别的服务器日志可能会给你一些提示,但我认为这不是一个很好的解决方法.一些图形系统将具有向您提供该信息的本机能力 - 即"慢查询日志"类型的功能,但它不是TinkerPop向您公开的内容.

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

我们肯定在当前版本的3.x中改进了TinkerPop 2.x的遍历取消 - 希望对于4.x我们可以完美地完成它.