This article was first published on the Nebula Graph Community public account
A performance test report for Nebula Graph distribution v3.1.0.
Contents of this article
- test environment
Test Data
- About LDBC-SNB
- test introduction
Test cases and results
- MatchTest1
- MatchTest2
- MatchTest3
- MatchTest4
- MatchTest5
3.1.0 vs 3.0.0 (Baseline)
- MatchTest1
- MatchTest2
- MatchTest3
- MatchTest4
- MatchTest5
Test conclusion
In the v3.1.0 version, the query and data import performance is basically the same as v3.0.0 (Reference: v3.0.0 performance report 🔗 ). MATCH
statement is optimized for attribute reading. This test adds a corresponding use case, and the performance is greatly improved compared to v3.0.0.
test environment
Both the server and the stress tester are physical machines
- Note: The server sets the CPU to Performance mode.
Test Data
The test data adopts the LDBC-SNB SF100 dataset. The size of the SF100 dataset is 100G, with a total of 282,386,021 points and 1,775,513,185 edges. The number of graph space partitions used for testing is 24, and the number of replicas is 3.
About LDBC-SNB
The Linked Data Benchmark Council (LDBC) is the benchmark guide for Graph and RDF data management. The Social Network Benchmark (SNB) is one of the software benchmarks (Benchmarks) developed by the Linked Data Benchmark Committee (LDBC). For the LDBC-SNB dataset, please refer to the following documents:
- LDBC_SNB_SF100: https://ldbcouncil.org/ldbc_snb_docs/ldbc-snb-specification.pdf
- 24 Partitions: https://github.com/ldbc/ldbc_snb_docs
- 3 Replica Factors: https://github.com/ldbc/ldbc_snb_datagen_spark
test introduction
- The pressure measurement tool uses k6 based on Go language, please refer to the official website of k6 for details; the client uses nebula-go
- The "vu" in "50_vu", "100_vu", etc. on the horizontal axis of the chart represents the concept "virtual user" used by k6, that is, the number of concurrent users in the performance test; 50_vu represents 50 concurrent users, and 100_vu represents 100 Concurrent users, and so on...
- The performance baseline uses the officially released version 3.0.0
-
ResponseTime
=Latency
(server processing time) + network return result time + client deserialization result time Parameter Description
- QPS is throughput rate
- Latency is time-consuming on the server side
- ResponseTime is the time taken by the client
Test cases and results
Only include this new match test case
- QPS is throughput rate
- Latency is time-consuming on the server side
- ResponseTime is the time taken by the client
MatchTest1
match (v:Person) where id(v) == {} return count(v.Person.firstName)
MatchTest2
match (v:Person)-[e:KNOWS]-(v2) where id(v) == {} and v2.Person.locationIP != 'yyy' return length(v.Person.browserUsed) + length(v2.Person.gender)
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)
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
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
v3.1.0 vs v3.0.0 (Baseline)
The following data select the P99 value.
MatchTest1
match (v:Person) where id(v) == {} return count(v.Person.firstName)
MatchTest2
match (v:Person)-[e:KNOWS]-(v2) where id(v) == {} and v2.Person.locationIP != 'yyy' return length(v.Person.browserUsed) + length(v2.Person.gender)
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)
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
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
Above, you are welcome to go to GitHub to experience the v3.1.0 version, GitHub address: https://github.com/vesoft-inc/nebula/releases/tag/v3.1.0
Exchange graph database technology? To join the Nebula exchange group, please fill in your Nebula business card first, and the Nebula assistant will pull you into the group~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。