Nebula Graph v3.0.0 性能报告

Nebula Graph v3.0.0 性能报告

本文系 Nebula Graph 发行版 v3.0.0 的性能测试报告。

本文目录

  • 测试环境
  • 测试数据
  • 关于 LDBC-SNB
  • Nebula Commit
  • 测试说明
  • 测试用例和结果
    • 查询带边属性
    • 查询带目的点属性
    • 查询带边属性+目的点属性
    • LOOKUP
    • FETCH 点
    • FETCH 边
    • MATCH 索引
    • MATCH 一跳
    • MATCH 两跳
    • 插入点
    • 插入边
  • v3.0.0 vs v2.6.1(Baseline)性能对比
    • 查询带边属性
    • 查询带目的点属性
    • 查询带边属性+目的点属性
    • LOOKUP
    • FETCH 点
    • FETCH 边
    • MATCH 索引
    • MATCH 一跳
    • MATCH 两跳
    • 插入点
    • 插入边
  • 总结

测试环境

服务器和压测机皆为物理机

Nebula Graph v3.0.0 性能测试报告

  • 注意:服务器设置 CPU 为 Performance 模式。

测试数据

测试数据采用 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 数据集,具体请参考以下文档:

Nebula Commit

  • nebula-graphd version 96db138
  • nebula-storaged version 96db138

测试说明

  1. 压测工具使用基于 Go 语言的 k6,具体请参阅 k6官方网站;客户端使用的是 nebula-go
  2. 图表中横坐标轴的 “50_vu“、“100_vu“等中的 “vu” 表示的是 k6 使用的概念 “virtual user”,即性能测试中的并发数;50_vu 表示 50 个并发用户,100_vu 表示 100 个并发用户,以此类推…
  3. 性能基线使用正式发布的 2.6.1 版本
  4. ResponseTime = Latency(服务端处理时长)+网络回传结果时长+客户端反序列化结果时长

测试用例和结果

注:下图涉及的词语解释

  • QPS 即吞吐率
  • Latency 即服务端耗时
  • ResponseTime 即客户端耗时

查询带边属性

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

一跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

一跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

一跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

两跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

三跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

查询带目的点属性

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

一跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

一跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

一跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

两跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

三跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

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

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

一跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

一跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

一跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

两跳·服务端耗时(ms)
Nebula Graph v3.0.0 性能测试报告

两跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

三跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

LOOKUP 查询性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

FETCH 点查询性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

FETCH 边查询性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

MATCH 索引性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

MATCH 一跳性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

MATCH 两跳

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

插入点性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

插入边性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

v3.0.0 vs v2.6.1(Baseline)性能对比

以下数据选取 P99 值。

查询带边属性

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

一跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

一跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

一跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

两跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

三跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

查询带目的点属性

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

一跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

一跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

一跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

两跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

三跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

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

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

一跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

一跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

一跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

两跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

两跳·服务端耗时(ms)
Nebula Graph v3.0.0 性能测试报告

两跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·吞吐率

Nebula Graph v3.0.0 性能测试报告

三跳·服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

三跳·客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

LOOKUP 查询性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

FETCH 点查询性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

FETCH 边查询性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

MATCH 索引性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

MATCH 一跳性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

MATCH 两跳

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

插入点性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

插入边性能

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

吞吐率

Nebula Graph v3.0.0 性能测试报告

服务端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

客户端耗时(ms)

Nebula Graph v3.0.0 性能测试报告

总结

v3.0.0 版本的性能总体上较 2.6 版本吞吐率有所提高,客户端耗时有所降低,服务端耗时在高并发下有些许提高。原因是 nebula-go 客户端性能有所提高,导致 k6 每轮压测的时长缩短,服务端在高并发下承受更多的压力,所以服务端耗时些微提高。

交流图数据库技术?加入 Nebula 交流群请先填写下你的 Nebula 名片,Nebula 小助手会拉你进群~~


这是一个从 https://nebula-graph.com.cn/posts/nebula-graph-v3.0.0-benchmark-report/ 下的原始话题分离的讨论话题
1 个赞

请问一下CPU以及内存,硬盘的性能,单纯的写一个是不是不太清晰?

image
这图上面不是有吗

128核多少线程数呐? :thinking:

cpu的信息:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 128
On-line CPU(s) list: 0-127
Thread(s) per core: 2
Core(s) per socket: 32
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 106
Model name: Intel(R) Xeon(R) Platinum 8352Y CPU @ 2.20GHz
Stepping: 6
CPU MHz: 3400.000
CPU max MHz: 3400.0000
CPU min MHz: 800.0000
BogoMIPS: 4400.00
Virtualization: VT-x
L1d cache: 48K
L1i cache: 32K
L2 cache: 1280K
L3 cache: 49152K
NUMA node0 CPU(s): 0-31,64-95
NUMA node1 CPU(s): 32-63,96-127
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 invpcid_single intel_pt ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq md_clear pconfig spec_ctrl intel_stibp flush_l1d arch_capabilities

内存信息之一:
Handle 0x0024, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x0013
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 32 GB
Form Factor: DIMM
Set: None
Locator: P2-DIMMG1
Bank Locator: P1_Node3_Channel0_Dimm0
Type: DDR4
Type Detail: Synchronous Registered (Buffered)
Speed: 3200 MT/s
Manufacturer: Samsung
Rank: 2
Configured Memory Speed: 3200 MT/s
Minimum Voltage: 1.2 V
Maximum Voltage: 1.2 V
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: 0000
Module Manufacturer ID: Bank 1, Hex 0xCE
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 32 GB
Cache Size: None
Logical Size: None

1 个赞

ssd信息:
Model Number: SAMSUNG MZWLL1T6HAJQ-00005
Firmware Version: GPJA2B3Q
PCI Vendor/Subsystem ID: 0x144d
Total NVM Capacity: 1,600,321,314,816 [1.60 TB]
Unallocated NVM Capacity: 0
Controller ID: 33
Number of Namespaces: 32
Namespace 1 Size/Capacity: 1,600,321,314,816 [1.60 TB]
Namespace 1 Formatted LBA Size: 512
Local Time is: Mon Mar 7 16:44:32 2022 CST
Firmware Updates (0x17): 3 Slots, Slot 1 R/O, no Reset required
Optional Admin Commands (0x000e): Format Frmw_DL NS_Mngmt
Optional NVM Commands (0x003e): Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Resv
Maximum Data Transfer Size: 32 Pages
Warning Comp. Temp. Threshold: 76 Celsius
Critical Comp. Temp. Threshold: 85 Celsius

2 个赞


请问下 这次压测数据是 static的还是 dynamic的?

我看一跳和二跳 是不是只依赖了 person 和 person knows person 这两份数据?

@diamondfang

dynamic

是的,点用的是 person,边用的是 person knows person
但是导入的是全部,100G的数据有 282386021 个点 和 1775513185 条边

导入的全部数据压测 和 导入这部分数据压测
有差异吗?或者说对nebula的性能有影响吗?
@diamondfang

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

这里{} 选取的是一个固定的点呢?还是随机选一个

样本集能发一下么?

当然,导入的数据量越大,底层rocksdb查询的时间越长

是从LDBC的person.csv文件里顺序读,读完了再从头开始

样本集是指测试的数据么?
这个是通过LDBC的工具生成的,具体请参阅 LDBC-SNB测试数据集生产工具

不是,是压测用的样本点

你的意思是你的压测脚本把csv 导进去 每个id 循环查了下 nebula ?

数据是事先导入的,测试的时候从 csv 文件里读取每个id,当然是多线程(并发)使用这些id