query语句的耗时问题。

  • nebula 版本:v2.0.0
  • 部署方式:分布式(3台)
  • 硬件信息
  • 磁盘:SSD
  • CPU、内存信息:8核、64g
    我在测试go语句的性能时发现,页面上显示的执行时间与javaclient执行的时间有较大差距。
    我的go语句:GO 0 TO 3 STEPS FROM ‘某ID’ OVER same_phone,same_address,same_website,same_web_email,same_history_phone,same_history_website,same_history_address,same_history_email,same_proper_name,EXEC,HEXEC,PEXEC,LR,SH,branch,HSH,SC BIDIRECT YIELD $$.E.name;

页面上显示直接执行为0.473S但是有几秒的卡顿(我默认为是数据返回前端加载的时间),在服务器上直接执行为0.577S,使用java客户端执行为5.5S。

我的java程序如下:

我的问题:
1.造成上面现象的原因是什么,有没有优化空间?
2.我java程序连接的是3台集群,但是测试时只会向其中一台发送请求,这是为什么?

查到的结果为6W个点,而且返回结过较多的查询都会出现这个问题。

1.造成上面现象的原因是什么,有没有优化空间?

你可以将通过console执行的query结果截图下

2.我java程序连接的是3台集群,但是测试时只会向其中一台发送请求,这是为什么?

初始化连接池用三个服务,意味着你用的连接可以连接其中任意一个服务,不是表示你同时向三个服务创建三个连接,执行query的时候又同时向多个服务请求。多个服务主要是作为负载均衡以及当服务端有一个异常的时候,可以向正常的服务发请求,不至于执行异常。

2 个赞

console执行

studio执行

使用postman调接口用时

console的时间没有包括数据处理时间的,你就看你执行query之前的时间,执行完之后的时间
Screen Shot 2021-07-05 at 14.16.50

还有你看的java的时间又是怎么统计的,肯定是加上数据处理时间的,同理studio也是加上数据处理时间的。

1 个赞

java是这么统计的

console的时间没有包括数据处理时间是什么意思,我截图里的时间表示的是什么呢。
image
studio里的这个时间如果是加上数据处理时间的话为什么和用java客户端调所用的时间差距这么大呢,差了有10倍左右的样子。
image

java客户端上消耗的时间主要就在resultSet = session.execute(query);上

这个问题是我在和neo4j在性能对比时发现的,查询形同的内容,我们ng用studio或者console查询时间比用neo4j的图形界面用的时间要快很多,可是我写成程序用jmeter测试时却发现性能不如neo4j的java客户端快。

你截图 studio 的那个时间是服务端自己的处理时间,不包括客户端接受6万条数据的处理时间,还有你统计java的时间不能这样统计呀,你这把拿 session 的时间还有 use space 的时间也加上了,你需要把 start 移动到调用 execute 前面,然后 resultSet.getLatency() 就是和 studio 打印的时间就是同一个了。

2 个赞


java客户端上消耗的时间主要就在resultSet = session.execute(query);上,resultSet.getLatency()显示是挺快的,但实际执行session.execute(query)的时间还是挺长有5秒。也不是所有请求都要五秒,如果返回的数据量小时间就快,返回的数据量大(比如这个有6W多条)用的时间就多,我在想是不是这个方法内部有什么消耗性能的操作导致的。

你用studio的时间也是5秒多呀,大部分时间是花在网络数据的接收和数据的解码。所以数据量越大,网络传输就慢,数据编解码就慢。

1 个赞

我用的是内网,网络数据传输的时间可以忽略不记,那应该是数据编解码耗时了。感觉挺可惜的明明我们数据库算的比neo4j快,但是在这方面性能被拖下来了,希望以后可以优化一下。

数据量大,网络接收数据的时间也是会随之增加的,怎么就忽略不计,只是内网的话会比公网更快些。

也不是忽略不计,这个请求返回的数据打印成字符串有3.99mb,传输这么多数据的时间不能占5秒里的大多数时间吧应该。

没说5秒都是给它占了,只是纠正你上面的描述。

该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。