首页 网站首页 商业资讯 报告 查看内容

NebulaGraph v3.3.0 社区版性能报告

私域流量 报告 2022-12-8 12:51 9386人围观



摘要

v3.3.0 版本首要优化了履行计划和属性裁剪,并对深度多跳场景停止出格优化,相关 case 的性能有明显的提升,相比 v3.2.0:

1) Match count QPS 增幅明显,有 2~8 倍的提升;时延下降至原 1/5.

2) 3 跳查询 QPS 提升约 40-100%,时延低至原 1/3;

3) 对于内存占用和开释停止了优化

4) 其他各 case 有分歧水平提升;

测试情况

办事器和压测机皆为物理机




测试数据

测试数据采用 LDBC-SNB SF100 数据集,SF100 数据集巨细为 100G,共有 282,386,021 个点以及 1,775,513,185 条边。测试用的图空间分区数为 24,副本数为 3。

关于 LDBC-SNB

关联数据基准委员会(LDBC,Linked Data Benchmark Council),是图(Graph)和 RDF 数据治理的基准指南制定者。交际网路基准(SNB,Social Network Benchmark)是关联数据基准委员会(LDBC)开辟的软件基准(Benchmark)之一。关于 LDBC-SNB 数据集,具体请参考以下文档:

  • LDBC-SNB Specification
  • LDBC-SNB DOCs
  • LDBC-SNB 测试数据集生产工具

Nebula Commit

  • nebula-graphd version c9f84b1
  • nebula-storaged version c9f84b1
  • nebula-metad version c9f84b1

测试说明

压测工具利用基于 Go 说话的 k6,具体请参阅 k6 官方网站;客户端利用的是 nebula-go

图表中横坐标轴的 “50_vu“、“100_vu“等中的”vu“暗示的是 k6 利用的概念“virtual user”,即性能测试中的并发数;50_vu 暗示 50 个并发用户,100_vu 暗示 100 个并发用户,以此类推…

性能基线利用正式公布的 3.2.0 版本

ResponseTime = Latency(办事端处置时长)+收集回传成果时长+客户端反序列化成果时长

基线测试

注:下图触及的词语诠释

  • QPS 即吞吐率
  • Latency 即办事端耗时
  • ResponseTime 即客户端耗时
  • RowSize 即请求返回行数

用例和成果

查询带边属性

GO {} STEP FROM {} OVER KNOWS yield KNOWS.creationDate

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




一跳·请求返回行数




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




二跳·请求返回行数




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




三跳·请求返回行数




查询带目标点属性

GO {} STEP FROM {} OVER KNOWS yield $$.Person.firstName

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




一跳·请求返回行数




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




二跳·请求返回行数




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




三跳·请求返回行数




查询带边属性+目标点属性

GO {} STEP FROM {} OVER KNOWS yield DISTINCT KNOWS.creationDate as t, $$.Person.firstName, $$.Person.lastName, $$.Person.birthday as birth | order by $-.t, $-.birth | limit 10

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




一跳·请求返回行数




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




二跳·请求返回行数




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




三跳·请求返回行数




LOOKUP

LOOKUP ON Person WHERE Person.firstName == '{}' YIELD Person.firstName, Person.lastName, Person.gender, Person.birthday, Person.creationDate, Person.locationIP, Person.browserUsed

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




FETCH 点

FETCH PROP ON Person {} YIELD Person.firstName, Person.lastName, Person.gender, Person.birthday, Person.creationDate, Person.locationIP, Person.browserUsed

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




FETCH 边

FETCH PROP ON KNOWS {} -> {} YIELD KNOWS.creationDate

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MATCH 索引

MATCH (v:Person) WHERE v.Person.firstName == '{}' RETURN v

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MATCH 一跳

MATCH (v1:Person)-[e:KNOWS]->(v2:Person) WHERE id(v1) == {} RETURN v2

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MATCH 两跳

MATCH (v1:Person)-[e:KNOWS*2]->(v2:Person) WHERE id(v1) == {} RETURN v2

吞吐率




办事端耗时(ms)

https://www-cdn.nebula-graph.com.cn/nebula-website-5.0/images/blogs/3.3.0%20benchmark%20report/metrics/Match2Hop%20Latency.png

客户端耗时(ms)




请求返回行数




插入点

INSERT VERTEXComment(creationDate, locationIP, browserUsed, content, length) VALUES {}:('{}', '{}', '{}', '{}', {})

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




插入边

INSERT EDGE LIKES (creationDate) VALUES {}→{}:('{}')

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MatchTest1

match (v:Person) where id(v) == {} return count(v.Person.firstName)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MatchTest2

match (v:Person)-[e:KNOWS]-(v2) where id(v) == {} and v2.Person.locationIP != 'yyy' return length(v.Person.browserUsed) + length(v2.Person.gender)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MatchTest3

match (v:Person)-[e:KNOWS]-(v2) where id(v) == {} and v2.Person.locationIP != 'yyy' with v, v2 as v3 return length(v.Person.browserUsed) + (v3.Person.gender)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MatchTest4

MATCH (m)-[:KNOWS]-(n) WHERE id(m)=={} OPTIONAL MATCH (n)<-[:KNOWS]-(l) RETURN length(m.Person.lastName) AS n1, length(n.Person.lastName) AS n2, l.Person.creationDate AS n3 ORDER BY n1, n2, n3 LIMIT 10

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




MatchTest5

MATCH (m)-[:KNOWS]-(n) WHERE id(m)=={} MATCH (n)-[:KNOWS]-(l) WITH m AS x, n AS y, l RETURN x.Person.firstName AS n1, y.Person.firstName AS n2, CASE WHEN l.Person.firstName is not null THEN l.Person.firstName WHEN l.Person.gender is not null THEN l.Person.birthday ELSE 'null' END AS n3 ORDER BY n1, n2, n3 LIMIT 10

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




查询带边属性_count

GO {} STEP FROM {} OVER KNOWS yield KNOWS.creationDate | return count(*)

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




一跳·请求返回行数




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




二跳·请求返回行数




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




三跳·请求返回行数




查询带目标点属性_count

GO 1 STEP FROM {} OVER KNOWS yield $$.Person.firstName | return count(*)

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




一跳·请求返回行数




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




二跳·请求返回行数




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




三跳·请求返回行数




LOOKUP_count

LOOKUP ON Person WHERE Person.firstName == '{}' YIELD Person.firstName | count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




Match_count

MATCH (v:Person) WHERE v.Person.firstName == '{}' RETURN count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




Match1Hop_count

MATCH (v1:Person)-[e:KNOWS]->(v2:Person) WHERE id(v1) == {} RETURN count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)

https://www-cdn.nebula-graph.com.cn/nebula-website-5.0/images/blogs/3.3.0%20benchmark%20report/metrics/Match1HOP_count%20ResponseTime%20(ms)%20.png

请求返回行数




Match2Hop_count

MATCH (v1:Person)-[e:KNOWS*2]->(v2:Person) WHERE id(v1) == {} RETURN count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




3.3.0 vs 3.2.0(Baseline)

以下数据拔取 P99 值。

查询带边属性

GO {} STEP FROM {} OVER KNOWS yield KNOWS.creationDate

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




查询带目标点属性

GO {} STEP FROM {} OVER KNOWS yield $$.Person.firstName

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




查询带边属性+目标点属性

GO {} STEP FROM {} OVER KNOWS yield DISTINCT KNOWS.creationDate as t, $$.Person.firstName, $$.Person.lastName, $$.Person.birthday as birth | order by $-.t, $-.birth | limit 10

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




LOOKUP

LOOKUP ON Person WHERE Person.firstName == '{}' YIELD Person.firstName, Person.lastName, Person.gender, Person.birthday, Person.creationDate, Person.locationIP, Person.browserUsed

吞吐率




办事端耗时(ms)




客户端耗时(ms)




FETCH 点

FETCH PROP ON Person {} YIELD Person.firstName, Person.lastName, Person.gender, Person.birthday, Person.creationDate, Person.locationIP, Person.browserUsed

吞吐率




办事端耗时(ms)




客户端耗时(ms)




FETCH 边

FETCH PROP ON KNOWS {} -> {} YIELD KNOWS.creationDate

吞吐率




办事端耗时(ms)




客户端耗时(ms)




MATCH 索引

MATCH (v:Person) WHERE v.Person.firstName == '{}' RETURN v

吞吐率




办事端耗时(ms)




客户端耗时(ms)




MATCH 一跳

MATCH (v1:Person)-[e:KNOWS]->(v2:Person) WHERE id(v1) == {} RETURN v2

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




MATCH 两跳

MATCH (v1:Person)-[e:KNOWS*2]->(v2:Person) WHERE id(v1) == {} RETURN v2

吞吐率




办事端耗时(ms)




客户端耗时(ms)




插入点

INSERT VERTEXComment(creationDate, locationIP, browserUsed, content, length) VALUES {}:('{}', '{}', '{}', '{}', {})

吞吐率




办事端耗时(ms)




客户端耗时(ms)




插入边

INSERT EDGE LIKES (creationDate) VALUES {}→{}:('{}')

吞吐率




办事端耗时(ms)




客户端耗时(ms)




MatchTest1

match (v:Person) where id(v) == {} return count(v.Person.firstName)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




MatchTest2

match (v:Person)-[e:KNOWS]-(v2) where id(v) == {} and v2.Person.locationIP != 'yyy' return length(v.Person.browserUsed) + length(v2.Person.gender)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




MatchTest3

match (v:Person)-[e:KNOWS]-(v2) where id(v) == {} and v2.Person.locationIP != 'yyy' with v, v2 as v3 return length(v.Person.browserUsed) + (v3.Person.gender)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




MatchTest4

MATCH (m)-[:KNOWS]-(n) WHERE id(m)=={} OPTIONAL MATCH (n)<-[:KNOWS]-(l) RETURN length(m.Person.lastName) AS n1, length(n.Person.lastName) AS n2, l.Person.creationDate AS n3 ORDER BY n1, n2, n3 LIMIT 10

吞吐率




办事端耗时(ms)




客户端耗时(ms)




MatchTest5

MATCH (m)-[:KNOWS]-(n) WHERE id(m)=={} MATCH (n)-[:KNOWS]-(l) WITH m AS x, n AS y, l RETURN x.Person.firstName AS n1, y.Person.firstName AS n2, CASE WHEN l.Person.firstName is not null THEN l.Person.firstName WHEN l.Person.gender is not null THEN l.Person.birthday ELSE 'null' END AS n3 ORDER BY n1, n2, n3 LIMIT 10

吞吐率




办事端耗时(ms)




客户端耗时(ms)




查询带边属性_count

GO {} STEP FROM {} OVER KNOWS yield KNOWS.creationDate | return count(*) ;

吞吐率




办事端耗时(ms)




客户端耗时(ms)




查询带目标点属性_count

GO 1 STEP FROM {} OVER KNOWS yield $$.Person.firstName | return count(*)

一跳·吞吐率




一跳·办事端耗时(ms)




一跳·客户端耗时(ms)




二跳·吞吐率




二跳·办事端耗时(ms)




二跳·客户端耗时(ms)




三跳·吞吐率




三跳·办事端耗时(ms)




三跳·客户端耗时(ms)




LOOKUP_count

LOOKUP ON Person WHERE Person.firstName == '{}' YIELD Person.firstName | count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




Match_count

MATCH (v:Person) WHERE v.Person.firstName == '{}' RETURN count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




Match1Hop_count

MATCH (v1:Person)-[e:KNOWS]->(v2:Person) WHERE id(v1) == {} RETURN count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




Match2Hop_count

MATCH (v1:Person)-[e:KNOWS*2]->(v2:Person) WHERE id(v1) == {} RETURN count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




新增测试用例-LDBC GO 属性过滤深度优化

测试用例和成果

Go3StepDistinctDst

GO 3 STEP FROM {0} OVER KNOWS REVERSELY YIELD DISTINCT KNOWS._dst as dst | YIELD count(*);

吞吐率




办事端耗时(ms)




客户端耗时(ms)




Go3StepDistinctDstProp

GO 3 STEP FROM {0} OVER KNOWS WHERE $$.Person.firstName == \"{1}\" YIELD distinct id($$) , $$.Person.locationIP | yield count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




3.3.0 vs 3.2.0

以下数据拔取 P99 值。

Go3StepDistinctDst

GO 3 STEP FROM {0} OVER KNOWS REVERSELY YIELD DISTINCT KNOWS._dst as dst | YIELD count(*);

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数




Go3StepDistinctDstProp

GO 3 STEP FROM {0} OVER KNOWS WHERE $$.Person.firstName == \"{1}\" YIELD distinct id($$) , $$.Person.locationIP | yield count(*)

吞吐率




办事端耗时(ms)




客户端耗时(ms)




请求返回行数





  • NebulaGraph 的开源地址:https://github.com/vesoft-inc/nebula 感觉利用体验还不错的话,给我们的 GitHub 点个 ❤️ 激励下开源路上的我们呢~
  • 交换图数据库技术?加入 NebulaGraph 交换群请先填写下你的 NebulaGraph 名片,NebulaGraph 小助手会拉你进群~

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

我有话说......

相关推荐

Makefile由浅入深--教程、干货

Makefile由浅入深--教程、干货

很早以前写的培训用的Makefile文档,整理好分享给大家。本文用Linux服务器下编写C程序

干货——如何写中文论文

干货——如何写中文论文

有一个有趣的段子说,不同阶段的学生写论文就如同打兔子:本科生是老师告诉你死兔子在

干货!做什么副业最靠谱!

干货!做什么副业最靠谱!

完全可行的副业,每年多赚20万不是问题!我自己做过很多副业,从头条号、公众号、淘宝

干货!砂锅选购知识大全

干货!砂锅选购知识大全

一、砂锅的历史二、砂锅的材质分类三、砂锅的器型分类四、砂锅的著名产地五、为什么砂

(长文干货)全屋定制看这一篇就够了

(长文干货)全屋定制看这一篇就够了

这篇文章大概发了一个月左右的时间,承蒙大家厚爱,收到了许多赞和评论。大家问的最多

咸鱼被骗怎么办?干货!!详解。

咸鱼被骗怎么办?干货!!详解。

被骗怎么办。答案是维权!!一下是我的维权过程。可能有点长。但比较详细。想看干货直接

干货-线性调频连续波雷达基本原理(第1讲)

干货-线性调频连续波雷达基本原理(第1讲)

大家好!我是喜欢把问题研究明白的调皮哥,感谢关注我。我创建了一个【雷达工程技术交

干货| “理性” “客观”“中立”的迷思

干货| “理性” “客观”“中立”的迷思

作者:cherry it up(来自豆瓣,点击可阅读原文“中立” “客观” “理性”的迷思)今

干货!手把手教你解决谷歌翻译不能用的方法

干货!手把手教你解决谷歌翻译不能用的方法

前言最近可能很多使用 Chrome 的用户都发现了,Chrome 浏览器右键菜单里的网页翻译失

干货:FMCW雷达系统信号处理建模与仿真(含matlab代码)

干货:FMCW雷达系统信号处理建模与仿真(含matlab代码)

大家好,我是 @调皮连续波 ,江湖人称“调皮哥”。正值五一假期,去哪里都人多,因此

【干货】国内如何使用TikTok,国内如何使用TikTok

【干货】国内如何使用TikTok,国内如何使用TikTok

首先,这里需要申明的一点!解决国内如何使用TikTok真的非常简单,没有大家及网上说的

干货 | 设x=my+n?这不耍流氓嘛

干货 | 设x=my+n?这不耍流氓嘛

破300赞 更新一下首先统一回复一下质疑最多的问题明明都是学校讲过得啊,简单的变形而

货拉拉到底能不能干?

货拉拉到底能不能干?

各位老少爷们儿,这好像是我第一次在知乎写文章!不一定能有多少人看的到,尤其是针对

超级干货—超短线大框架(全)

超级干货—超短线大框架(全)

【一】干货较多,希望兄弟们耐心看完。这一期讲的主要是这四个东西中的跟风。后面还会

超好用的17个渗透测试工具(干货附下载地址)安全人员必备 ... ...

超好用的17个渗透测试工具(干货附下载地址)安全人员必备 ... .

渗透测试,是专业安全人员为找出系统中的漏洞而进行的操作。当然,是在恶意黑客找到这

广州特产购买清单,2分钟带你买遍广州人气特产

广州特产购买清单,2分钟带你买遍广州人气特产

有没有同感,一来到广州就懵了啊!广州好吃的、好看的实在是太多了!想买个特产,都不

【干货】英语语法基础知识大全,全部整理好!一定要收藏 ... ...

【干货】英语语法基础知识大全,全部整理好!一定要收藏 ... ...

{color{red}{看完这篇,再也不用为英语语法发愁啦(保真) !}} 这篇文章可以在 15

干货 | 怎么准备面试中的1分钟自我介绍?

干货 | 怎么准备面试中的1分钟自我介绍?

【本文章推荐实习信息——腾讯视频VIP商务合作渠道拓展】岗位信息在文末哦~欢迎关注,

C语言基础知识总结大全(干货)

C语言基础知识总结大全(干货)

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,下面为大家带来C语言基础知

干货!教你如何查询海关统计数据

干货!教你如何查询海关统计数据

海关统计数据在线查询系统优化升级了,系统更好用啦!1.进入海关总署官网http://www.c

TA还没有介绍自己。

电话咨询: 15924191378
添加微信