修改密码

Input error
Input error
Input error
提交

修改昵称

当前昵称:
提交

图数据库基准测试报告(2022)

1.    测试目的

本次基准测试内容为Ultipa图数据库系统数据处理能力的性能测试。包含对系统安装、运维、监控、功能、稳定性、高可用性、伸缩性、并发能力、数据导入、图查询与分析、图算法、结果准确性、时效性、跨硬件平台兼容性等多个维度的性能指标进行综合评估。

同时,为了方便读者了解目前国际范围内其它图数据库系统的性能,本测试中也对标了Neo4j、TigerGraph、JanusGraph以及ArangoDB系统。

2.    测试环境

2.1.          硬件环境

测试集群由3个节点云主机虚拟化实例组成,硬件配置如下表所示:

服务器

配置

CPU

虚拟化X86-64位、Arm64架构32 vCPU (32线程)

主频2.0 GHz

内存

256GB

硬盘

1TB HDD(基于机械硬盘的云盘*)

网卡

5Gbps

2.2.          软件环境

软件名称

描述

操作系统

Linux (Centos 7.x、RedHat7/8 或Ubuntu 18.x)

容器环境

Docker 19.x

图数据库

Ultipa Graph v4.0

Neo4j v4.0.7 Enterprise Edition

Tigergraph v3.1

JanusGraph v0.6.1

ArangoDB v3.7

注:多系统间性能对标测试结果在3.2.3 性能测试细项部分。

3.    功能测试

3.1.         功能测试结果汇总

测试项目

测试标准

Ultipa测试结果

备注

系统安装

在“测试结果”列中记录本次安装时间

~30min

 

可扩展性

支持分布式数据架构,支持数据分片,支持水平和垂直扩展

支持HTAP分布式架构,支持垂直与水平扩展

 

图数据更新

支持无需暂停查询服务就可对图模型进行更新,包括对顶点和边的增删改

支持在线更新点和边,并可查询变化后结果,运行算法亦可得到变化后结果

 

数据加载

支持批量数据导入和流式数据导入,支持Delimited Text(包括csv)、json格式的导入,支持断点续传

支持csv导入,支持断点续传

 

图谱更新

支持实时图谱更新

支持实时图谱更新

 

语言表达力

图数据库查询语言能力验证

支持完备的UQL图操作语言,易学易用,易于扩展,同时面向业务与技术人员

 

高并发小查询

支持单个顶点多跳邻居的高并发查询,并能实时反馈查询结果

支持高并发查询

 

影响力分析

支持LPA、PageRank算法

支持

 

社区发现

支持弱联通分量、强联通分量、标签传播、鲁汶算法

支持

 

图谱交互

支持点、边、属性展示,支持图谱下钻,支持按条件高亮显示顶点或边

支持

 

运维监控

支持系统运行监控,如CPU、内存、磁盘情况

支持

 

日志管理

有详尽的日志输出

支持

 

数据访问控制

支持多图功能,支持多图共享顶点和边

支持

 

权限管理

具备用户权限管理能力

支持

 

备份和恢复

支持在线备份,支持系统恢复功能

支持

 

高可用

支持高可用

支持

 

支持灾备

异地灾备

支持

 

 

3.2. 性能测试

3.2.1性能测试标准

为保证性能测试的公平性,本次测试有如下约束条件:

(一)本次测试在2.1约定的软硬件环境下测试

(二)测试数据采用网上公开的twitter数据集(Twitter_rv.tar.gz),下载链接为http://an.kaist.ac.kr/traces/WWW2010.html。顶点数量4200万,边数量14.7亿,原始数据24.6GB。

(三)数据模型:由顶点(人)和边(关注关系)组成,其中关注关系为有向边,边上有一个字符串类型的属性,其值取为关注人的ID、“follows”及被关注人的ID的连接,比如关注人是1001,被关注人为2002,则边的attr为“1001follows2002”。

(四)所有测试结果以正确性为前提,并在不同系统间依照每类测试的时耗来对标性能优劣。

3.2.2性能测试结果汇总

请在如下表中“测试结果”列中记录测试结果,如需备注,请在“备注”列做补充。

测试项目

测试标准

Ultipa测试结果

数据加载

数据加载准确无误,并记录加载时间

520秒

数据存储空间

入库后存储空间与原始数据的大小的比率

1.19

一度邻居查询

给定一个顶点,查询获得所有一度邻居并打印数量。基于种子文件的10个顶点,执行以上查询,统计平均执行时间

0.00062秒

二度邻居查询

给定一个顶点,查询获得所有二度邻居并打印数量。基于种子文件的10个顶点,执行以上查询,统计平均执行时间

0.027秒

三度邻居查询

给定一个顶点,查询获得所有三度邻居并打印数量。基于种子文件的10个顶点,执行以上查询,统计平均执行时间

0.52秒

六度邻居查询

给定一个顶点,查询获得所有六度邻居并打印数量。基于种子文件的10个顶点,执行以上查询,统计平均执行时间

1.408秒

二十三度邻居查询

给定一个顶点,查询获得所有二十三度邻居并打印数量。基于种子文件的10个顶点,执行以上查询,统计平均执行时间

1.295秒

更新时查询

并发量为100时,连续更新给定顶点属性的同时,进行并发量为100的一度邻居查询。记录执行一度邻居查询的QPS

500

最短路径

给定任意两个顶点,统计最短路径数量,记录计算时间

0.18秒

更新图集前后查询结果对比

改变图的拓扑结构前后进行实时查询,观察是否能实时得到对应的结果变化(K邻查询: 多层邻居计算)

实时变化

相似度计算

给定节点accard相似度Top10计算,记录平均执行计算时间

5秒

影响力分析

运行PageRank算法耗时

16s

社区发现

(标签传播)

运行标签传播算法耗时

80s

 

社区发现

(鲁汶)

运行鲁汶社区识别算法耗时

210s

注:23跳的时间可以短于6跳的时间是因为这些不同的顶点的K-Hop邻居在图上拓扑空间的分配密度不同所致。

3.2.3性能测试细项

3.2.3.1 数据建模

测试目的:记录数据建模的执行代码。数据模型由一类顶点(人)和一类边(关注关系)组成,其中关注关系为有向边,边上有一个字符串类型的属性attr,其值取为关注人的ID、“follows”及被关注人的ID的连接,比如第一行关注人是1001,被关注人为2002,则边的attr为“1001follows2002”。

3.2.3.2 数据加载

测试目的:测试数据加载的正确性和效率。

Ultipa系统测试内容结果:

测试项目

测试标准

顶点数量

边数量

加载时间

数据加载

数据加载准确无误,并记录加载时间

41652330

1468365182

520秒

各家系统对标结果如下:

源数据

Twitter2010),4200万顶点、14.7亿边、24.6GB

图系统

Ultipa

TigerGraph

Neo4j

JanusGraph

ArangoDB

导入时间()

520

1550

3120

20800

32200

相对时间

1

3

6

40   

62

存储空间

30GB

12GB*

55GB

56GB

128GB

相对空间

2.5

1

4.58

4.67

10.67

 

3.2.3.3 邻居查询

测试目的:测试邻居查询的正确性和性能。

测试内容结果:

注,下表中的N度邻居数指第N度邻居,即与源点最短路径长度(步数)为N步的全部不重复的顶点数量。
考虑到其它系统可能使用了1-N度邻居查询,最后的对标测试结果统一可改为(1-N度邻居计算,此种方式去重计算复杂度会降低)。

测试项目

测试标准

给定顶点号

N度邻居数量

执行时间

(毫秒)

平均执行时间  (毫秒)

一度邻居查询

给定多个顶点,查询获得每个顶点的所有一度邻居并打印数量,并记录执行时间

20727483

973

0.509ms

0.62ms

50329304

4746

0.815

26199460

19954

0.868

1177521

4272

0.777

27960125

7

0.484

30440025

3386

0.733

15833920

2181

0.505

15015183

2279

0.492

33153097

116

0.491

21250581

37

0.536

二度邻居查询

给定多个顶点,查询获得每个顶点所有二度邻居并打印数量,并记录执行时间

20727483

2874132

5.823ms

27.33ms

50329304

2714697

5.606

26199460

7818213

69.953

1177521

19318826

70.281

27960125

533108

1.983

30440025

11294131

21.967

15833920

7858255

22.746

15015183

5933114

27.222

33153097

12181518

25.157

21250581

11063971

22.537

三度邻居查询

给定一个顶点,查询获得所有三度邻居并打印数量,并记录执行时间

20727483

27206363

400.011ms

520ms

50329304

29939223

407.992

26199460

31324330

526.919

1177521

17139727

741.438

27960125

20280156

101.114

30440025

23120607

748.711

15833920

26263805

649.454

15015183

27727527

475.516

33153097

20512136

507.208

21250581

20804932

641.811

六度邻居查询

给定多个顶点,查询获得其中每个顶点所有六度邻居并打印数量,并记录执行时间

20727483

10028

1213.226ms

1408ms

50329304

9052

1410.373

26199460

3022

1372.880

1177521

3101

1220.169

27960125

25838

1576.181

30440025

5437

1659.473

15833920

5618

1210.724

15015183

6197

1320.371

33153097

6033

1229.563

21250581

6738

1769.825

二十三度邻居查询

给定一个顶点,查询获得所有二十三度邻居并打印数量,并记录执行时间

15738828

3

1203.212ms

1295ms

9358362

1

1279.99

9358352

1

1529.716

17571568

1

1167.854

Ultipa执行代码:

khop().src({_id == 顶点号}).depth(查询深度).boost() as n return count(n)

 

各家系统对标结果如下:

源数据

Twitter2010),4200万顶点、14.7亿边、24.6GB

图系统

Ultipa

TigerGraph

Neo4j

JanusGraph

ArangoDB

1度邻居(秒)

0.00062

0.024

0.2

0.39

1.667

2度邻居(秒)

0.027

0.46

18.3

27.7

28.9

3度邻居(秒)

0.52

6.6

290

4300

3888

6度邻居(秒)

1.408

62.5

N/A

N/A

N/A

23度邻居(秒)

1.295

N/A

N/A

N/A

N/A

3.2.3.4 最短路径

测试目的:测试常用的最短路径算法的正确性和性能。

测试内容结果:需要找到6步以内任意两个顶点间的全部最短路径数量,统计平均运行时间

测试项目

测试标准

起点

终点

最短路径数量

查询时间

平均时间(秒)

随机10对点的最短路径

给定两个顶点,查询它们之间的最短路径的数量。记录执行以上查询的时间。

50329304

21613682

25389

0.145s

0.18s

49449489

15645246

2080710

1.512s

39687658

47978366

46

0.052s

15489748

38548456

8

0.003s

17524616

29884615

5

0.058s

33033471

37029346

273

0.007s

37048837

17555248

1114

0.008s

26895497

37893465

2

0.002s

26468497

37164965

6

0.002s

54151557

37190965

30837

0.033s

Ultipa执行代码

ab().src({_id == 起点ID}).dest({_id == 终点ID}).depth(6).shortest().boost() as paths return count(paths)

 

各系统对标结果如下:

源数据

Twitter2010),4200万顶点、14.7亿边、24.6GB

图系统

Ultipa

TigerGraph

Neo4j

JanusGraph

ArangoDB

全部最短路径(秒)

0.18

9.2

注:深度≥6步的无法在10分钟内返回

注:深度≥3步的无法在10分钟内返回

注:深度≥3步的无法在10分钟内返回

无法正确返回

(仅能返回1条路径)

3.2.3.5影响力分析

测试目的:测试常用的PageRank算法的性能。

测试内容结果:PageRank必须进行全量计算,并且排序后返回Top-10

测试项目

测试标准

Ultipa测试结果

全量计算后,返回分值最高的10个顶点及其Ranking

查询时间(秒)

影响力分析

运行PageRank算法,其中迭代次数设为10,阻尼系数为0.8,并获取分值最高的10个顶点。记录执行以上查询的时间。

813286,14276.1

14224719,12240

31567254,10288.6

15131310,9860.32

16049683,8546.38

7040932,6775.97

14075928,6672.9

12687952,5345.58

5380672,5021.32

26784273,2886.91

16s

Ultipa执行代码:

algo(page_rank).params({order:’desc’,init_value:0.2,loop_num:10,damping:0.8,limit:10}).write({file:{filename:”my_pagerank_result”}})

 

各系统对标结果如下:注,其它系统并不支持或没有对结果进行排序,如需排序则可能无法完成测试。

3.2.3.6社区发现

测试目的:测试常用的标签传播算法、Louvain社区识别算法在大数据集上运行时的性能。

测试内容结果:

测试项目

测试标准

社区数

查询时间(秒)

标签传播

运行标签传播算法,其中迭代次数设为10,并打印社区数。记录执行以上查询的时间。

116602

100s

鲁汶社区识别(Louvain)

运行Louvain社区识别算法,其中迭代次数设为10,收敛精度0.0001并打印社区数。记录执行以上查询的时间。

1207

(社区数量存在抖动,此处取中位数)

210s 

Ultipa执行代码:

algo(lpa).params({loop_num:10}).write()

algo(louvain).params({phase_1_loop_num:10,min_modulatry_increase:0.01}).write

 

各系统对标结果如下:

源数据

Twitter2010),4200万顶点、14.7亿边、24.6GB

图系统

Ultipa

TigerGraph

Neo4j

JanusGraph

ArangoDB

PageRank

(秒)

23

258

 

600

N/A

无法完成

N/A

无法完成

LPA

(秒)

80

900

N/A

无法完成

N/A

无法完成

N/A

无法完成

鲁汶社区

(秒)

402

N/A

注:未测试

N/A

注:无法在30分钟内完成映射

N/A

注:未测试

N/A

注:未测试

注:以下各测试项仅在Ultipa图数据库系统上完成测试,其它图数据库系统因测试资源和时效性限制并未完成对标测试。

 

3.2.3.7 更新图集前后查询结果对比

            测试目的:更新图集前后,对图集进行查询并对比更新前后的查询结果,测试计算的正确性和性能。此测试项检验的是图数据库系统是否具有实时更新并实时计算的能力(避免某些图系统通过缓存获得错误的、更新前的数据结果返回)。

            测试内容结果:

测试项目

测试标准

新建边起点ID

新建边终点ID

查询深度

更新图集前的K邻(第K度邻居)

更新图集后的K邻(同左)

 更新图集前后查询结果对比

查询某起步点3步以上的k邻居,查询该点为起点的某最短路径,将最短路径首尾相连,重新查1,3,6步k邻数量,对比新插入边前后的查询结果变化

20727483

28843543

1

973

974

3

27206363

27210397

6

10028

10027

50329304

21378173

1

4746

4747

3

29939223

29939314

6

9052

9052

26199460

32278263

1

19954

19955

3

31324330

31324333

6

3022

3022

1177521

6676222

1

4272

4273

3

17139727

17139725

6

3101

3101

27960125

48271231

1

7

8

3

20280156

20283107

6

25838

25836

30440025

38232241

1

3386

3387

3

23120607

23121930

6

5437

5431

 

3.2.3.8 相似度计算

测试项目

测试标准

给定顶点(公司名或人物ID)

执行时间

平均执行时间(秒)

相似度计算

给定一个顶点,查询与其最相似的10个顶点 (Jaccard相似度, Top-10)

20727483

1.586s

4.99s

50329304

2.003s

26199460

10.573s

1177521

10.52s

27960125

0.359s

30440025

2.865s

15833920

5.042s

15015183

5.283s

33153097

5.201s

21250581

4.525s

Ultipa执行代码:

find().nodes({_id == 给定ID}) as n with n

algo(jaccard).params({ids:[n],top_limit:10}) as r return r

 

Want to read more?