Nebula Graph 1.0 基准测试(性能测试)报告

Nebula Graph 1.0 基准性能测试

测试环境

硬件

配置如下:

  • 处理器: Intel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz, 2(sockets) * 14(cores) * 2(threads)
  • 内存:DDR4,64GB * 4
  • 存储:HP MT0800KEXUU,NVMe,800GB * 2
  • 网络:Mellanox MT27500 10Gb/s

本测试共使用 5 台服务器,其中 graphd 1 台storaged 3 台客户端 1 台

软件

Nebula Graph版本:V1.0.0 GA
操作系统:Centos 7.5

查询服务(graphd)为单节点;
存储服务(storaged)为三节点,24 个partition;
元数据服务(metad)为三节点,与 storaged 混布;

客户端使用 Golang API,采用单进程多协程同步请求发压,占用 1 台服务器。

Nebula Graph 服务端关键配置项

Storaged:

# 每个硬盘设置一个 RocksDB 实例
# The default reserved bytes for one batch operation
--rocksdb_batch_size=4096
# The default block cache size used in BlockBasedTable.
# The unit is MB.
--rocksdb_block_cache=102400
--num_io_threads=24
--num_worker_threads=18
--max_handlers_per_req=256
--min_vertices_per_bucket=100
--reader_handlers=28
--vertex_cache_bucket_exp=8

--rocksdb_disable_wal=true
--rocksdb_column_family_options={"write_buffer_size":"67108864",
  "max_write_buffer_number":"4","max_bytes_for_level_base":"268435456"}
--rocksdb_block_based_table_options={"block_size":"8192"}

Graphd:

# The number of networking IO threads, 0 for # of CPU cores
--num_netio_threads=20
# The number of threads to execute user queries, 0 for # of CPU cores
--num_worker_threads=32
--storage_client_timeout_ms=600000
--filter_pushdown=false

数据集介绍

  • 数据源:LDBC Social Network Benchmark Dataset
  • 数据规模:Scale Factor 为 1000
    • 源数据大小:632 GB
    • 导入后(集群)占用空间:~500 GB * 副本数量
    • 点数:1,243,792,996
    • 边数:8,397,443,896

注1:LDBC benchmarks 数据集模拟一个典型的社交网络分布,更多介绍见 https://github.com/ldbc

Schema

数据集 k-hop 出度分布情况

1 跳出度分布情况

绝大多数节点的出度在 10 以内,个别稠密点的出度为 700

2 跳出度分布情况

绝大多数节点 2 跳近邻的个数为 2000 以内,个别稠密点的 2 跳近邻数量为 40000

3 跳出度分布情况

绝大多数节点3跳近邻的个数为 100,000 以内,个别稠密点的 3 跳近邻数量为 2,000,000

查询语句示例

k-hop 不返回属性

GO 1 STEP FROM $ID$ OVER knows 
GO 2 STEP FROM $ID$ OVER knows 
GO 3 STEP FROM $ID$ OVER knows 

k-hop 返回属性

GO 1 STEPS FROM $ID$ OVER knows YIELD knows.time, $$.person.first_name,\
                                     $$.person.last_name, $$.person.birthday
                                     
GO 2 STEPS FROM $ID$ OVER knows YIELD knows.time, $$.person.first_name,\
                                     $$.person.last_name, $$.person.birthday
                                     
GO 3 STEPS FROM $ID$ OVER knows YIELD knows.time, $$.person.first_name,\
                                     $$.person.last_name, $$.person.birthday                                     

注2:语句中 $ID$ 为图遍历起点 ID 占位符,执行时会被替换为真实随机 ID。

测试结果

针对每种查询,逐步增大并发度,观察此时吞吐和延时的表现。

1-hop 不返回属性

2-hop 不返回属性

3-hop 不返回属性

1-hop 返回属性

2-hop 返回属性

3-hop 返回属性

其他

测试代码和 nGQL 可以在这里找到 https://github.com/dutor/nebula-bench

有疑问欢迎在下方跟帖留言。

5 个赞

请问有写入的性能报告吗?

单个客户端大概30-50万TPS,在几十台的规模上并发写入还是比较线性的。
你可以找个大一些csv文件用go-importer单机试试,或者用sparkwrite批量写入试试。

好的,谢谢

这些配置都是什么意思啊,文档里面也没有介绍啊。有没有所有配置的文档,现在只知道这里有
https://docs.nebula-graph.com.cn/manual-CN/3.build-develop-and-administration/3.configurations/5.storage-config/
,但是好像不全。

如果对某些 flag 不是很清楚其中的定义,可以复制该 flag,在 github 的 repo 中搜索该 flag 的定义,找到对应的说明。

没贴出来的flag,是希望对代码有一些了解。 怕直接随便改坏了。

请问这个导入是几副本啊?可以到 30~50W TPS?

看代码应该是 1 副本:nebula-bench/schema.nGQL at aea9c346a02a74edce9772c6f9701609a28fc0d1 · vesoft-inc/nebula-bench · GitHub

nebula2.x版本ldbc_snb_datagen哪个releases版本?