查询的qps问题

  • nebula 版本:3.0.0
  • 部署方式:单机
  • 安装方式:RPM
  • 服务器配置:4核8G
    CPU:AMD EPYC 7K62 48-Core Processor
    磁盘:100G(不是固态)

现在测试的数据有50W节点和50W边的样子
然后查询语句是最新的多MATCH检索
大概就是下面这个样子(嗯,肯定是不对的,就那个意思嘛)

MATCH (q)-[:g]->(p)<-[:g]-(d)
with q,d,count(p)
match (q)-[:g]->(p)
with q,d,COLLECT(p) AS s1
match (d)-[:g]->(p)
with q,d,s1,collect(p) as s2
with q,d,s1+[x in s2 where not x IN s1] AS uion,s1,s2
RETURN q.Sid,other.Sid,s1,s2,uion((1.0)/SIZE(uion)) AS jaccard ORDER BY jaccard DESC LIMIT 100

测试的结果大概是15qps的样子
最后我想问这个结果是不是正常的?因为.Net的客户端是我自己改的,所以不知道性能是否合理

1 个赞

主要是想了解性能瓶颈是不是在我写的客户端上面 :joy:

性能瓶颈的话,不应该把你的机器配置写全点吗 :crazy_face:

CPU:AMD EPYC 7K62 48-Core Processor
磁盘:100G(不是固态)
然后还有些其他服务在运行的,所以大佬就大概估一下嘛 :joy:


本身来说的话,文档也写明了,我们是不推荐使用 HDD 的,:thinking: 我找个查询同学看看你的语句是否存在优化的空间。

顺便问一句,你的 .net 客户端是自己写的吗?还是基于我们社区用户贡献的 .net 客户端二次开发的呢。社区版的 .net 客户端 https://github.com/nebula-contrib/nebula-net

对,一开始是从那个项目开始改的,然后仿照java的加了对象池

1 个赞

可以贡献回来啊。:joy:

太麻烦了,要我写英文,而且我写的也不好

你可以和作者交流下啊,我和他沟通过了,你可以机翻下你的功能变成英文的说明,提个 pr 给他啊 :star_struck: 就是一起交流下开发思路和技术啊

  1. 这个是我们3.0的benchmark, 你可以大概参考下: Nebula Graph v3.0.0 性能报告
  2. 影响你这个benchmark的因素有: hdd磁盘; 非官方的.net客户端; 复杂的query, 你的数据集. 我们也不好估计正常的qps时多少, 建议你先用我们官方的压测工具https://github.com/vesoft-inc/k6-plugin在你的这个数据集上分别测下我们的benchmark中的match语句和你这个复杂一点的match.
3 个赞

可以先用 console 执行单个语句看一下耗时和数据量,然后用 k6 跑一下一样的并发数,做个对比。

2 个赞

等先测试没什么问题再说吧

你按照 Harris 的说法试试看,记得更新下帖子进展哈

console远程执行单条语句:
1646099786(1)
k6不太会用,一直提示错误:GoError: authentication fails, Invalid data length

K6执行(7Vus 30s):

.Net客户端用的一个简单的工具测试的结果:

两者的环境也有点差异:
k6是在我本地调用远程Nebula数据库
Nebula.Net是使用测试工具在本地调用远程部署的Api应用,然后再调用另一台服务器的数据库

只从 k6 的这个图上看,

  1. 有 2 个请求错误了 (可以把结果放一个文件里,看看错误是什么)
  2. 最大的 latency 400ms,而最大的 responseTime 是 4s。
    要么就是你语句里有大点,返回的数据特别多。
    要么就是客户端和服务端的网络带宽比较小,时间都耗在网络传输上了。

你本地和远程 nebula 之间的网络是怎么样的,可以的话,把 k6 放在 nebula 一个网络上试试。

1 个赞

错误信息:std::bad_alloc: std::bad_alloc
数据我是限制返回前50条
Nebula是部署在腾讯云服务器上面的

不过现在差不多也算解决了我的问题,至少粗略来看我这个.Net客户端是可用的

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。