Nebula Graph v2.6.0 Performance Report

Eric Fang
2021-11-12

Nebula Graph v2.6.0 Performance Report

Column

  • Test environment
  • Test data
  • Nebula Commit
  • Test cases and results
    • Queries that do not return properties of vertices and edges
    • Queries that return properties of edges
    • Queries that return properties of destination vertices
    • Queries that return properties of edges and destination vertices
    • LOOKUP
    • Match
    • Match With Dst 1 Hop
    • Match With Dst 2 Hop
  • 2.6.0 vs 2.5.0
    • Queries that do not return properties of vertices and edges
    • Queries that return properties of edges
    • Queries that return properties of destination vertices
    • Queries that return properties of edges and destination vertices
    • LOOKUP
    • Match
    • Match With Dst 1 Hop
    • Match With Dst 2 Hop
  • Configuration

Test environment

The server and the pressure test server are all physical computer servers.

Test environment

  • Note: The server sets the CPU to the Performance mode.
$ cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us
  hardware limits: 800 MHz - 3.40 GHz
  available frequency steps:  3.40 GHz, 2.20 GHz, 2.10 GHz, 2.00 GHz, 1.90 GHz, 1.80 GHz, 1.70 GHz, 1.60 GHz, 1.50 GHz, 1.40 GHz, 1.30 GHz, 1.20 GHz, 1.10 GHz, 1000 MHz, 900 MHz, 800 MHz
  available cpufreq governors: conservative userspace powersave ondemand performance
  current policy: frequency should be within 800 MHz and 3.40 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.40 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes

Test data

LDBC_SNB_SF100

24 Partitions

3 Replica Factors

Nebula Commit

  • nebula-graphd version 3ba41bd
  • nebula-storaged version 11d8257a

Test cases and results

Queries that do not return properties of vertices and edges

GO {} STEP FROM {} OVER KNOWS

Go 1 Step · QPS

Go 1 Step · QPS

Go 1 Step · Latency(ms)

Go 1 Step · Latency(ms)

Go 1 Step · Response Time(ms)

Go 1 Step · Response Time(ms)

Go 2 Step · QPS

Go 2 Step · QPS

Go 2 Step · Latency(ms)

Go 2 Step · Latency(ms)

Go 2 Step · Response Time(ms)

Go 2 Step · Response Time(ms)

Go 3 Step · QPS

Go 3 Step · QPS

Go 3 Step · Latency(ms)

Go 3 Step · Latency(ms)

Go 3 Step · Response Time(ms)

Go 2 Step · Response Time(ms)

Queries that return properties of edges

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

Go 1 Step With Edge · QPS

Go 1 Step · QPS

Go 1 Step With Edge · Latency(ms)

Go 1 Step · Latency(ms)

Go 1 Step With Edge · Response Time(ms)

Go 1 Step · Response Time(ms)

Go 2 Step With Edge · QPS

Go 2 Step · QPS

Go 2 Step With Edge · Latency(ms)

Go 2 Step · Latency(ms)

Go 2 Step With Edge · Response Time(ms)

Go 2 Step · Response Time(ms)

Go 3 Step With Edge · QPS

Go 3 Step · QPS

Go 3 Step With Edge · Latency(ms)

Go 3 Step · Latency(ms)

Go 3 Step With Edge · Response Time(ms)

Go 3 Step · Response Time(ms)

Queries that return properties of destination vertices

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

Go 1 Step With Dst · QPS

Go 1 Step With Dst · QPS

Go 1 Step With Dst · Latency(ms)

Go 1 Step With Dst · Latency(ms)

Go 1 Step With Dst · Response Time(ms)

Go 1 Step With Dst · Response Time(ms)

Go 2 Step With Dst · QPS

Go 2 Step With Dst · QPS

Go 2 Step With Dst · Latency(ms)

Go 2 Step With Dst · Latency(ms)

Go 2 Step With Dst · Response Time(ms)

Go 2 Step With Dst · Response Time(ms)

Go 3 Step With Dst · QPS

Go 3 Step With Dst · QPS

Go 3 Step With Dst · Latency(ms)

Go 3 Step With Dst · Latency(ms)

Go 3 Step With Dst · Response Time(ms)

Go 2 Step With Dst · Response Time(ms)

Queries that return properties of edges and destination vertices

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

Go 1 Step All · QPS

Go 1 Step All · QPS

Go 1 Step All · Latency(ms)

Go 1 Step All · Latency(ms)

Go 1 Step All · Response Time(ms)

Go 1 Step All · Response Time(ms)

Go 2 Step All · QPS

Go 2 Step All · QPS

Go 2 Step All · Latency(ms)

Go 2 Step All · Latency(ms)

Go 2 Step All · Response Time(ms)

Go 2 Step All · Response Time(ms)

Go 3 Step All · QPS

Go 3 Step All · QPS

Go 3 Step All · Latency(ms)

Go 3 Step All · Latency(ms)

Go 3 Step All · Response Time(ms)

Go 3 Step All · Response Time(ms)

LOOKUP

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

MATCH

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

Match With Dst 1 Hop

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

Match With Dst 2 Hop

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

2.6.0 vs 2.5.0

The following data are averages.

Queries that do not return properties of vertices and edges

GO {} STEP FROM {} OVER KNOWS

Go 1 Step · QPS

Go 1 Step · QPS

Go 1 Step · Latency(ms)

Go 1 Step · Latency(ms)

Go 1 Step · Response Time(ms)

Go 1 Step · Response Time(ms)

Go 2 Step · QPS

Go 2 Step · QPS

Go 2 Step · Latency(ms)

Go 2 Step · Latency(ms)

Go 2 Step · Response Time(ms)

Go 2 Step · Response Time(ms)

Go 3 Step · QPS

Go 3 Step · QPS

Go 3 Step · Latency(ms)

Go 3 Step · Latency(ms)

Go 3 Step · Response Time(ms)

Go 3 Step · Response Time(ms)

Queries that return properties of edges

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

Go 1 Step With Edge · QPS

Go 1 Step With Edge · QPS

Go 1 Step With Edge · Latency(ms)

Go 1 Step With Edge · Latency(ms)

Go 1 Step With Edge · Response Time(ms)

Go 1 Step With Edge · Response Time(ms)

Go 2 Step With Edge · QPS

Go 2 Step With Edge · QPS

Go 2 Step With Edge · Latency(ms)

Go 2 Step With Edge · Latency(ms)

Go 2 Step With Edge · Response Time(ms)

Go 2 Step With Edge · Response Time(ms)

Go 3 Step With Edge · QPS

Go 3 Step With Edge · QPS

Go 3 Step With Edge · Latency(ms)

Go 3 Step With Edge · Latency(ms)

Go 3 Step With Edge · Response Time(ms)

Go 3 Step With Edge · Response Time(ms)

Queries that return properties of destination vertices

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

Go 1 Step With Dst · QPS

Go 1 Step With Dst · QPS

Go 1 Step With Dst · Latency(ms)

Go 1 Step With Dst · Latency(ms)

Go 1 Step With Dst · Response Time(ms)

Go 1 Step With Dst · Response Time(ms)

Go 2 Step With Dst · QPS

Go 2 Step With Dst · QPS

Go 2 Step With Dst · Latency(ms)

Go 2 Step With Dst · Latency(ms)

Go 2 Step With Dst · Response Time(ms)

Go 2 Step With Dst · Response Time(ms)

Go 3 Step With Dst · QPS

Go 3 Step With Dst · QPS

Go 3 Step With Dst · Latency(ms)

Go 3 Step With Dst · Latency(ms)

Go 3 Step With Dst · Response Time(ms)

Go 3 Step With Dst · Response Time(ms)

Queries that return properties of edges and destination vertices

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

Go 1 Step All · QPS

Go 1 Step All · QPS

Go 1 Step All · Latency(ms)

Go 1 Step All · Latency(ms)

Go 1 Step All · Response Time(ms)

Go 1 Step All · Response Time(ms)

Go 2 Step All · QPS

Go 2 Step All · QPS

Go 2 Step All · Latency(ms)

Go 2 Step All · Latency(ms)

Go 2 Step All · Response Time(ms)

Go 2 Step All · Response Time(ms)

Go 3 Step All · QPS

Go 3 Step All · QPS

Go 3 Step All · Latency(ms)

Go 3 Step All · Latency(ms)

Go 3 Step All · Response Time(ms)

Go 3 Step All · Response Time(ms)

LOOKUP

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

MATCH

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

Match With Dst 1 Hop

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

Match With Dst 2 Hop

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

QPS

QPS

Latency(ms)

Latency(ms)

Response Time(ms)

Response Time(ms)

Configuration

Storage:

  • rocksdb_block_cache=81920
  • heartbeat_interval_secs=10
  • max_handlers_per_req=1

Other configuration:

  • minloglevel=2
  • local_config=true

That’s all.

If there is any mistake or information missing in this report, welcome to submit an issue to GitHub or join our Slack channel to discuss with the rest of the Nebula Graph community!