台面背景故事:未开发的潜力
#database #neo4j #memgraph #benchmark

几个月前,我们启动了Benchgraph,该平台用于比较图形数据库的性能。由于Memgraph与Neo4J高度兼容,因此我们对in-house benchmarking tool进行了一些调整,并开始对Neo4J进行基准测试。肯定有一些我们做对的事情,还有一些我们做错了,但是几个月后,我们决定根据社区反馈更新一些事情,从而使整体基准对社区有效和有价值。

让我们看一下基准中改进的事物以及发生了什么变化。

新的较大数据集

在典型基准的运行过程中,您可以在固定的时间段内运行特定的查询,或者进行大量查询,执行它们并测量经过的时间。无论哪种方式,您都需要大量的查询(具有不同参数的相同查询),为此,您需要一个更大的数据集。最重要的是,必须在更广泛的缩放数据集中测试性能。为了将查询需求的视角置于您正在运行的某些查询中,数据库最多可执行30万个查询或以下的查询,具体取决于查询复杂性。有关统计信息的详细查看,请查看符合基准的所有结果的benchmark.json文件。在那里,您可以看到每个特定测试执行了多少个特定查询。

要回到较大的数据集的点,POKEC是用于运行基准测试的初始数据集。它仍然存在,但大小也有些限制。测试在100K节点和170万边缘(中等大小)上执行。因此,它不是太大,并且结构很简单。

由于社区的大小,复杂性和反馈,我们决定添加较大的数据集。因此,下一个数据集应该大,更复杂且可识别。这里的选择很容易。 MEMGRAPH是一个行业领先的基准集团(Memgraph)的数据基准委员会(LDBC),已开源的数据集用于基准测试。确切的数据集是社交网络数据集。它是代表社交网络的合成generated dataset。它用于LDBC审核的基准,SNB Interactive和SNB Buissines Intelligence基准测试中。请记住,这不是LDBC基准的正式实施,开源数据集被用作基准的基础,它将用于我们的内部测试过程和改进MEMGRAPH。

关于LDBC SNB数据集的好处是它具有一组特定的前缀尺寸。例如,LDBC SNB数据集的SF1层具有大约3M节点和17m边缘。 SF3的大小是SF1的3倍,大约9m节点和52m边缘。尺寸尺寸升至SF1000,这是一个很大的图形。
该测试是在SF1上进行的,该测试对于野外可用的数据集非常小,但是很快将在较大尺寸上执行测试(例如SF3和SF10)。

LDBC SNB Interactive和LDBC SNB商业智能都在示意性的图表上运行社交网络,但是它的生成有所不同。

更复杂的查询

在第一次迭代中,用于在POKEC数据集上进行基准测试的查询非常笼统。它们确实涵盖了大多数基本操作,例如聚合,写入,读取,更新和图形分析查询。但是总的来说,这些查询并不是太复杂了,并且可以深入了解Memgraph和Neo4J的交易工作负载如何。尽管是通用的,但这些疑问还是由我们选择的,因此,根据社区的反馈,再次将更为复杂的查询添加到了台上。

首先,计划是仅使用LDBC数据集并为数据集编写不同的查询,但是LDBC有一组精心设计的查询,这些查询是专门准备用于压力数据库的。每个查询都针对一个特殊的方案,也称为“ chock点。不要误会,它们没有深图形遍历大约100个啤酒花,但是它们绝对比为POKEC数据集编写的hop更复杂。 LDBC SNB有两套查询:interactivebusiness intelligence。 LDBC为Neo4J的两个查询提供了参考密码实现。我们进行了这些查询,调整了数据类型,并使查询在Memgraph上起作用。同样,要完全明确地,这并不是最不发达国家基准测试的正式实施。这既适用于交互式和商业智能查询。这些查询被用作运行基准测试的基础。

更新到基准过程

数据集和查询并不是唯一收到更新的内容。运行基准测试的过程已经更新,并且可以在methodology中找到完整的技术细节。但是,除此之外,这是对发生的变化的简短概述。

对多个并发客户的测试

在生产环境中运行数据库并不意味着您将与数据库的单个连接隔离地执行查询。数据库可以由多个用户和应用程序使用,这意味着它将同时具有多个连接。在该连接期间,他们将查询数据库系统,并且数据库需要对所有查询进行响应,以尽可能快地击中它们。显然,在多个工作线程上运行此测试时会有明显的差异。为了进行测试,测试是通过使用模拟该方案的不同数量的工作线程来执行的。进入卧推,您将看到选项工人数量

您可以看到,该测试当前是在12、24和48个工作线程上执行的。在上次迭代中,仅使用12个线程进行测试。但这将在未来发生变化,工人的数量可能会进一步增加,以显示出不同水平的绩效。

新的火山热身

我们在台上graph的第一次运行中确实注意到的一件事是,在多次执行相同的查询时,neo4j受益很多。我们不知道Neo4J可以从多大程度上受益。尽管是一个出色的数据库功能,但它带有一些弊端,但稍后会详细介绍。如methodology中所述,以前有coldhot数据库条件,但是现在引入了Vulcanic。

Vulcanic数据库热身中,首先将大量的工作负载查询作为热身执行,然后所有查询再次重新运行。第二次运行是收集结果的地方。这增加了潜在的NEO4J性能。请记住,火山热身测试数据库缓存性能。硫化热身不适用于高度波动的数据集,该数据集每天都有巨大的变化。

硬件

与上一次迭代一样,对MEMGRAPH和NEO4J的相同硬件进行了测试。由于我们的Intel HP服务器有点尘土飞扬,并且在其晶体管上有几年的时间,因此在较新的AMD平台上执行了测试。有一个计划将其进一步扩展到AWS实例,因为这些东西是标准化的,如今人们使用它们来部署大多数应用程序。

运行配置更改

运行设置有一些更改。第一个且显而易见的是数据库版本凸起:数据库版本,社区版本NEO4J 5.6和MEMGRAPH 2.7。

由于Neo4J的不同架构(在磁盘上,而Memgraph在内存中),Neo4J需要更多时间来热身并记录在执行较小数量的查询中的较慢性能。因此,每次测试的持续时间都增加了。由于在测试之前生成了一组预定义的用于运行基准测试的查询,因此预定义的查询数量已从3次增加到10次。最重要的是,引入了前面提到的硫化运行,以显示重复执行的性能。

对于孤立的工作负载,定义执行--single-threaded-runtime持续时间的标志设置为30秒(以前是10秒)。查询执行的下限从30到300个查询。这意味着要执行几秒钟的最慢查询,每次测试中至少有300个被执行。另外,现在每个供应商都为每个测试执行相同数量的查询。

对于混合和现实的工作负载,执行的查询数量已从100升至500。此外,Memgraph在POKEC数据集中获得了标签索引,因为这些数据未由MEMGRAPH自动设置。

确切的运行配置和其余详细信息可以在前面提到的方法中找到。

结果

让我们看一下POKEC数据集。对于以下每个结果,您可以访问here。或者如果选择:Intel,Cold Run,12名工人,POKEC,中型数据集,隔离工作负载,然后转到Q5的详细结果,您将看到以下内容:

Benchgraph expansion 1 cold 12

此扩展1查询已在两个供应商上执行170996次(this is visible in raw JSON results),具有相同的参数。在测试期间,测量了三个主要指标:峰值记忆,吞吐量和延迟。在基准的上一个迭代中,动态决定根据持续时间执行预定义的查询数量,这导致了MEMGRAPH和NEO4J的不同查询计数,但事实并非如此。在170996的查询之后,事实证明,Memgraph的速度更快3.16倍,并且P99延迟降低了5.42倍。这是一个简单的单跳查询,经常在图形分析工作负载中使用。

48 threads上尝试这些170996的查询,测量了以下结果:

Benchgraph expansion 1 cold 48

Memgraph的性能很容易用48个线程翻了一番,而Neo4J的性能变得更糟。看起来Neo4J社区版具有一些多线程限制。 p99的延迟值都增加了,这有点预期,但是在此并发工作中,MEMGRAPH的速度快8.73倍。

现在返回到新的Vulcanic run,然后返回12 threads,执行了170966的查询,此后,执行了相同的170966查询以进行测量。

Benchgraph expansion 1 vulcanic 12

再次,Neo4J在更强的热身环境下改进。尽管可以看出,在neo4j s 案例中,p99潜伏期已从6.45下降到1.91。

下面的图像再次是硫化的跑步,但是这次是48 threads

Benchgraph expansion 1 vulcanic 48

即使在硫化运行中,已经执行了两次相同的查询,事实证明,Memgraph的速度比48个并发线程的Neo4J快3倍。要点:Memgraph Community Edition可以比NEO4J社区版更好地处理同时工作量。

LDBC交互式查询呢?这里有点more complicated:在AMD平台上,冷运行,48名工人,LDBC_ Interactive数据集和SF1数据集大小,Memgraph在所有查询上都比Neo4J快,除interactive query 9外。看起来Memgraph在该查询中有一个问题。看看跳到大16GB的峰值内存。这将进一步调查。

Benchgraph interactive cold 48

回到koude2 warm-up,Neo4J在这里的表现要比冷跑得好得多。

Benchgraph interactive vulcanic 48

但是,看着寒冷的p99潜伏期也讲述了一个有趣的故事:memgraph有5个查询,其中p99延迟超过一秒钟,而neo4j有10个。

Benchgraph interactive latency

由于不同的数据库体系结构,这是有些期望的,如前所述。 BI run中的情况似乎相似:

Benchgraph bi cold

MEMGRAPH是冷跑的一步。在硫化奔跑中,neo4j有很多改善。看起来Memgraph在处理BI_QUERY_12方面存在一个基本问题。同样,我们将进一步研究。

所有上述所有内容都使我们解决了写作表现的潜在问题;在数据库的写入性能期间,缓存通常会无效。在这方面,情况很清楚。 MEMGRAPH内存中写作将是faster,而不是磁盘上的Neo4J写道:

benchgraph_write

卧推上的结果还有很多。更改不同的配置并查看结果。如果您想自己检查完整的结果,请在此迭代中转到raw JSON files with the results。台面仅提供一部分数据,但将添加更多相关的数据,例如p95延迟,查询计数等。

您可以在工作量上运行基准测试!

台式工作负载和查询是在这里让您了解每个数据库可以期望的潜在性能。话虽如此,这并不意味着您在工作量上会有相同的情况。在您的特定数据集和特定查询上运行基准测试将显示对您至关重要的性能。数据库倾向于发展;使用较新版本的数据库速度慢,更快的变化,因此请确保运行自己的测试。

但是开发和运行基准是艰难且耗时的。这就是为什么我们使台面易于运行的原因。您可以通过台式绘制自己运行自己的基准测试时自己做by following the tutorial

下一步

您如何喜欢更新?有什么特别引起您注意的东西吗?

基准可以通过各种方式进行配置。微小的细节可能会影响结果,但无论哪种方式,Memgraph都可以提供更大的速度观点。

从现在开始,台面将为您提供解锁数据库的未开发潜力,获得绩效见解并使更明智的决定继续前进。看起来是时候到add a new database to Benchgraph了!与往常一样,如果我们能得到进一步的帮助,请不要毫不犹豫地大喊。

Read more about Memgraph internals on memgraph.com