在过去的几周中,我一直在花一些业余时间来创建一个应用程序,该应用程序从Open Roads数据生成运行路线-当然已转换并导入到Neo4j中!

我创建了一个用户定义的过程,该过程结合了几个最短路径查询,但是如果它们花费的时间太长,我想退出所有这些最短路径搜索。 我的代码没有超时看起来像这样:

StandardExpander orderedExpander = new OrderedByTypeExpander().add( RelationshipType.withName( "CONNECTS" ), Direction.BOTH );PathFinder<Path> shortestPathFinder = GraphAlgoFactory.shortestPath( expander, 250 );...

我们可以在几个地方检查经过的时间,但是对我来说, 扩展器中expand方法似乎很明显。 我编写了自己的Expander类,如下所示:

public class TimeConstrainedExpander implements PathExpander
{private final StandardExpander expander;private final long startTime;private final Clock clock;private int pathsExpanded = 0;private long timeLimitInMillis;public TimeConstrainedExpander( StandardExpander expander, Clock clock, long timeLimitInMillis ){this.expander = expander;this.clock = clock;this.startTime = clock.instant().toEpochMilli();this.timeLimitInMillis = timeLimitInMillis;}@Overridepublic Iterable<Relationship> expand( Path path, BranchState state ){long timeSoFar = clock.instant().toEpochMilli() - startTime;if ( timeSoFar > timeLimitInMillis ){return Collections.emptyList();}return expander.expand( path, state );}@Overridepublic PathExpander reverse(){return expander.reverse();}
}

现在需要更新较早版本的代码片段,以使用我们的新类,这不太麻烦:

StandardExpander orderedExpander = new OrderedByTypeExpander().add( RelationshipType.withName( "CONNECTS" ), Direction.BOTH );TimeConstrainedExpander expander = new TimeConstrainedExpander(orderedExpander, Clock.systemUTC(), 200);PathFinder<Path> shortestPathFinder = GraphAlgoFactory.shortestPath( expander, 250 );
...

我不确定这是否是实现我想要的最佳方法,但是在其他几种方法失败之后,至少这种方法确实有效!

翻译自: https://www.javacodegeeks.com/2017/11/neo4j-traversal-query-timeout.html

Neo4j:遍历查询超时相关推荐

  1. neo4j 连接超时_Neo4j:遍历查询超时

    neo4j 连接超时 在过去的几周中,我一直在花一些业余时间来创建一个应用程序,该应用程序从Open Roads数据生成运行路线-当然,已转换并导入了Neo4j! 我创建了一个用户定义的过程,该过程结 ...

  2. 遍历查询ldap服务器用户

    准备工作:使用openldap搭建server 过程略 名词 DN = Distinguished Name DC = Domain Component OU = Organization Unit ...

  3. neo4j cypher_优化Neo4j Cypher查询

    neo4j cypher 上周,我花了很多时间来尝试优化大约20个使用实时系统数据执行的灾难性的Cypher查询(36866ms至155575ms). 经过一番尝试和错误,以及来自Michael的大量 ...

  4. 优化Neo4j Cypher查询

    上周,我花了很多时间尝试使用实时系统中的数据来优化大约20个执行失败的Cypher查询(36866ms至155575ms). 经过一番尝试和错误,以及来自Michael的大量投入,我能够大致确定对查询 ...

  5. mysql 超时_为MySQL设置查询超时

    昨天有人在群里问, MySQL是否可以设置读写超时(非连接超时), 如果可以就可以避免一条SQL执行过慢, 导致PHP超时错误. 这个, 其实可以有. 只不过稍微要麻烦点. 首先, 在libmysql ...

  6. mysql为何500w拆表_【mysql】MySQL 单表500W+数据,查询超时,如何优化呢?

    1.问题描述: MySQL 数据库,单表 `im_data_record`,查询超时(30s) 表结构如下图: 表索引如下图: 查询语句如下: SELECT `record_global_id`, ` ...

  7. sql 查询超时已过期_监视来自SQL Server代理作业的查询超时过期消息

    sql 查询超时已过期 SQL Server provides you with a good solution to automate a lot of your administrative ta ...

  8. redis 用scan 代替keys 解决百万数据模糊查询超时问题

    redis 用scan 代替keys 解决百万数据模糊查询超时问题 参考文章: (1)redis 用scan 代替keys 解决百万数据模糊查询超时问题 (2)https://www.cnblogs. ...

  9. MySQL存储过程-循环遍历查询到的结果集

    MySQL存储过程-循环遍历查询到的结果集 1.创建存储过程 (更好的阅读体验,请移步我的个人博客)根据MySQL的语法创建存储过程,要注意的是如果循环遍历查询到的结果集,取出结果集中的数据做操作. ...

最新文章

  1. C#中实现简单的预警提示功能(语音提示与弹窗提示)
  2. 前端学习(1838):前端面试题之执行上下文
  3. linux下添加apt-get命令,Ubuntu Linux系统下apt-get命令整理
  4. Java SE 疑难点记录
  5. JavaWeb之Servlet编程
  6. oracle增加表字段_史上最详细的oracle 中的CR块介绍--一致性读
  7. 【动态主席树】ZOJ 2112【树状数组+主席树】
  8. 破解“冲动消费”难题,“李佳琦们”掀起618“反效率”之风
  9. 举例 微积分 拉格朗日方程_(完整word版)拉格朗日方程的应用及举例08讲
  10. Iptables入门
  11. ElasticSearch学习总结(基础篇,可学习,可复习)
  12. 计算机网络hdlc,2019计算机考研|计算机网络知识点:HDLC协议
  13. 李瑞霖4.13黄金走势短线放空原油能否筑底反弹?行情涨跌分析
  14. Hadoop 命令操作大全
  15. Excel 时间格式相减
  16. ISIS几个命令的区别
  17. 微软NNI进行神经网络模型剪枝压缩的踩坑记录
  18. html画布设计,10个会让你惊叹不已的HTML5画布(canvas)技术应用
  19. Windbg在软件调试中的应用
  20. Android 三星手机拍照图片旋转处理

热门文章

  1. Java 并发总结——高并发与同步锁
  2. Redis 再牛逼,也得设置密码
  3. Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂
  4. python3如何连接mysql数据库
  5. C++描述杭电OJ 2011.多项式求和 ||
  6. 青鸟IT汇微信公众号新增智能机器人
  7. 2020蓝桥杯省赛---java---B---7(分类计数)
  8. php事件编程,PHP相应button中onclick事件的案例分析
  9. 本地方法(JNI)——访问域+字符串参数
  10. java中线程死锁及避免_如何避免Java线程中的死锁?