【发布时间】:2020-06-16 01:08:18
【问题描述】:
我们有连接到 Gremlin 服务器的主要 API(从 link 构建的 EC2 实例)。它使用 DynamoDB 来存储数据。
一个查询有效,但是当我们同时尝试多个查询时,问题就开始出现了。它正在获取“scriptEvaluationTimeout”。
查询是这样的:
g.V().has("users","email","user@example.com").inE().otherV().where(inE().otherV().has('users','email','user@example.com')).valueMap()
尝试了以下方法:
- 将 EC2 实例从 t2.micro 升级到 t2.medium。我们发现实例内存不足,无法运行 Java Runtime Environment,因此我们进行了升级。
- 已将 DynamoDB 容量升级到 Auto Scaling,因为它超出了预置的静态容量。
- 尝试将超时更新为 60000 并尝试更新其他配置,但没有任何效果。
- 尝试添加索引,但不确定这是否是添加索引的正确方法。
这是我第一次在这里发布问题,也是我第一次使用 Gremlin,JanusGraph。最初创建这个的开发人员不再有联系,我正在通过这个平台寻求帮助。有没有人经历过这个?请帮忙。谢谢。
更新/补充:
- 我在上面发布的查询只是遇到超时问题的查询之一。这个更容易受到该错误的影响。
WARN org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor - Script evaluation exceeded the configured threshold for request [RequestMessage{, requestId=d60d8cf0-1b74-11ea-9299-d76eb09532d9, op='eval', processor='', args={gremlin=g.V().or(__.has('users','phone',within('+918329086936','112','18003001947')),__.has('users','email',within('user1@example.com','user2@yahoo.com','user3@example.com','user4@fastmail.com','user5@yahoo.com','user6@example.com','user7@gmail.com','user8@gmail.com','user9@gmail.com','user10@hotmail.com'))).not(has('users','email',within('dev@example.com','user5@yahoo.com','user1@example.com','user3@example.com','user9@gmail.com'))).not(has('users','email','dev@example.com')).order().by('name').valueMap(), bindings={}, accept=application/json, language=gremlin-groovy}}]
java.util.concurrent.TimeoutException: Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 30000 ms or evaluation was otherwise cancelled directly for request [g.V().or(__.has('users','phone',within('+918329086936','112','18003001947')),__.has('users','email',within('user1@example.com','user2@yahoo.com','user3@example.com','user4@fastmail.com','user5@yahoo.com','user6@example.com','user7@gmail.com','user8@gmail.com','user9@gmail.com','user10@hotmail.com'))).not(has('users','email',within('dev@example.com','user5@yahoo.com','user1@example.com','user3@example.com','user9@gmail.com'))).not(has('users','email','dev@example.com')).order().by('name').valueMap()]
at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$1(GremlinExecutor.java:337)
at io.netty.util.concurrent.PromiseTask$RunnableAdapter.call(PromiseTask.java:38)
at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:120)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:399)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:464)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131)
at java.lang.Thread.run(Thread.java:748)
- 我也在尝试添加索引。我上周发现了这个answer,并且能够创建没有错误的索引,但没有改进查询。我还尝试使用来自JanusGraph documentation 的此引用添加复合索引,但出现错误:
groovy.lang.MissingPropertyException: No such property: graph for class: groovysh_evaluate
【问题讨论】:
标签: amazon-web-services amazon-dynamodb gremlin tinkerpop3 gremlin-server