konisGraph学习。复杂查询优化记录

news2024/11/19 7:27:16

最近有需求是查两个公司之间的投资关系 比如 a和b之间有哪些直接投资和间接投资。

例如

a->b

a->e->b

a->c->d->b    

b->f->a

需求是查出7跳以内的ab之间的投资关系 

v的标签是company_name,属性是company_name ,eid  其中id=eid

e的标签是invest,属性是 stock_percent

最开始写的查询语句是

g.V()

.has('company','company_name',P.within('公司B','公司A'))  --找到a b两个公司的点

.repeat(outE('invest').otherV().simplePath()) --通过外边一直向外辐射

.until(and(                                                        --直到 两个条件都满足

        loops().is(lte(7)),                                        --条件1 循环7次以内

        has('company','company_name',P.within('公司B','公司A'))) --a->b  b->a的路线

)

.path()

.by(valueMap('company_name')).by(valueMap('stock_percent'))

这个查询本身没有问题。 and里面两个条件分开写 普通查询也没问题,但是在查询一个点边比较多时 7跳后有3000路径的数据时出现了超时问题。

按照专业人士说,这个查询使用and作为退出traversal条件,但是tinkerpop编译器很笨,只要until内部条件是false,就会跳数+1再进行traversal,不会识别until内部复杂条件,导致实际从一个点遍历了一个子图,涉及的中间点边非常多,最终导致超时 

最后优化后

 g.inject(1).union(V().has('company','company_name', P.within("公司2","公司1")))--这里可以直接g.V().has() 我这里union是因为可以同时company_name 和eid去查

.repeat(outE('invest').otherV().simplePath()).times(7).emit() --收集1-7跳的所有路径

.or(has('company','company_name',P.within("公司4","公司7")),has('company','company_name',P.within("公司6","公司5")))

.path().by('company_name').by('stock_percent')

在优化查询时遇到了这个问题。

g.V().has('company','company_name', P.within("公司1")).repeat(outE('invest').otherV().simplePath()).times(7).emit().has('company','company_name',P.within("公司7")).path().by('company_name').by('stock_percent')

g.V().has('company','company_name', P.within("公司1")).repeat(outE('invest').otherV().simplePath()).times(7).emit(has('company','company_name',P.within("公司7"))).path().by('company_name').by('stock_percent')

请问这两个查询有什么区别。

前者会先获取 1-7跳的所有数据然后再过滤最后节点为公司7的数据

后者是收集所有含有节点为公司7的数据,并且直到7跳,也就是说我到了公司7的节点,还要继续往后面跳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

恒林家居引入纷享销客CRM系统,领跑家居行业营销数字化进程

近日,恒林家居股份有限公司((股票代码:603661以下简称为“恒林家居”)携手纷享销客在湖州召开了CRM项目启动会。双方领导及核心项目人员齐聚一堂,展开了深度交流并达成了重要共识。 作为家居行业的领军企业…

查看创建好的数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: show create database 数据库名称; 案列:查看testing数据库信息 mysql> show create database testing; ------------------------…

源代码防泄密和工控安全方案简介

客户情况 某新能源电池企业专业从事于新能源锂离子动力电池和储能电池的研发、生产和销售,具备电芯、模组、BMS及Pack的完整资源开发能力。公司致力于通过持续不断地改进电池技术,为全球锂离子动力和储能领域提供数字化精准高效的新能源解决方案。 该企…

【Spring Boot 源码学习】OnClassCondition 详解

Spring Boot 源码学习系列 OnClassCondition 详解 引言往期内容主要内容1. getOutcomes 方法2. 多处理器拆分处理3. StandardOutcomesResolver 内部类4. getMatchOutcome 方法 总结 引言 上篇博文带大家从源码深入了自动配置过滤匹配父类 FilteringSpringBootCondition&#x…

说完 Java 的 Abstract 后再来说说接口 (interface )

如你对 Abstract 修饰的抽象类不是非常了解的话,请自行先考古下。 这篇文章需要对 Java 定义过的抽象类有一些基本的了解才可以。 抽象类和抽象方法 用 Abstract 修饰的类,叫做抽象类,那么用 Abstract 修饰的方法叫做抽象方法。 在 Java 中…

LabVIEW更改Tab所选标签的颜色

LabVIEW更改Tab所选标签的颜色 在开发过程中,有时会出现要将不同tab页设置不同颜色的情况。此VI允许编程方式更改前面板选项卡控件上选项卡的颜色。它是突出显示所选选项卡的理想选择 在某些应用程序中,用户希望在按下时突出显示选项卡控件。此VI使用事…

算法从未放弃你,放弃你的只有你自己

在人生的旅程中,我们常常会遇到各种挫折和困难。有些人在面对困境时,会选择放弃,将责任归咎于命运或外部环境。然而,算法教给我们一个重要的道理:永远不要放弃 当我们遇到问题或挑战时,算法可以帮助我们找到…

AWT中常用组件

基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件(也可当做单选框组件使用) CheckboxGroup 用于将多个Checkbox 组件组合成一组, 一组 Checkbox 组件将只有一个可以 被选中 , 即全部变成单…

python 使用requests爬取百度图片并显示

爬取百度图片并显示 引言一、图片显示二、代码详解2.1 得到网页内容2.2 提取图片url2.3 图片显示 三、完整代码 引言 爬虫(Spider),又称网络爬虫(Web Crawler),是一种自动化程序,可以自动地浏览…

C++数据结构--红黑树

目录 一、红黑树的概念二、红黑树的性质三、红黑树的节点的定义四、红黑树结构五、红黑树的插入操作参考代码 五、代码汇总 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过…

数字花园的指南针:微信小程序排名的提升之道

微信小程序,是一片数字花园,其中各种各样的小程序竞相绽放,散发出各自独特的芬芳。在这个花园中,排名优化就像是精心照料花朵的园丁,让我们一同走进这个数字花园,探寻如何提升微信小程序的排名优化&#xf…

Idea项目爆红

解决办法: 方案一:重新加载Maven依赖 方案二:清除缓存 方案三: 在当前项目下执行以下命令,重新生成.iml文件 mvn idea:module

Hadoop的安装和使用,Windows使用shell命令简单操作HDFS

1,Hadoop简介 Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。 高可靠性。 高效性。 高可扩展性。 高容错性。 成本低。 运行在Linux平台上。 支持多种编程…

【Redis7】--2.十大数据类型

文章目录 Redis十大数据类型1.Key通用命令1.1keys *1.2EXISTS1.3DEL1.4EXPIRE1.5TTL1.6TYPE1.7DBSIZE1.8SELECT1.9MOVE1.10FLUSHDB1.11FLUSHALL1.12help1.13CONFIG 2.Redis十大数据类型2.1String2.1.1SET和GET2.1.2MSET和MGET2.1.3INCR、INCRBY2.1.4SETNX和SETEX2.1.5MSETNX2.1…

Android笔记(二十九):利用python自动生成多语言

背景 项目需要支持十几种多语言,而且每个版本的新功能ui都有很多地方需要多语言,如果手动添加非常耗时,于是设计了一个python脚本,通过excel表格转化多语言到项目values/strings文件内 步骤 android工程项目结构 脚本位于langu…

Unity实现用WASD控制一个物体前后左右移动-小白课程01

1 根据业务逻辑搭建场景 02 根据业务写代码 using System.Collections; using System.Collections.Generic; using UnityEngine;//实现让被挂在的物体往前移动 //按下W键往前移动,按下S键往后移动 public class RoleMove : MonoBehaviour { public float myspe…

Enterprise Architect15(EA) 工具栏,隐藏后显示快捷方式

没有工具栏 显示工具栏 快捷键:ctrl shift 3 或者Design-->点击ToolBox 工具栏中直接拖动即可创建对应的元素:

springboot集成qq邮箱

1.maven依赖 <!-- email依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.springframework.boot</group…

seata的部署和集成:部署Seata的tc-server、微服务集成seata、TC服务的高可用和异地容灾

seata的部署和集成 一、部署Seata的tc-server 1.下载 首先我们要下载seata-server包&#xff0c;地址在http&#x1f615;/seata.io/zh-cn/blog/download.html 当然&#xff0c;课前资料也准备好了&#xff1a; 2.解压 在非中文目录解压缩这个zip包&#xff0c;其目录结构…

git 合并分支某次(commit)提交

需求&#xff1a;将develop分支某次提交合并到master上面&#xff0c;其他修改不同步&#xff1b; //切换到master分支 git checkout master //查看develop分支提交记录&#xff0c;获取对应记录哈希值&#xff1b; git log develop // 按上下按钮可以上下查询对应记录&#xf…