提升性能

一般原则

  • 由于 Spark 擅长并行计算,因此任何非图相关的繁重计算都应该在 Spark 层完成,而不是在 Neo4j 上使用 Cypher® 进行。

    • 尽可能在加载到 Neo4j 之前执行数据质量修复;这包括删除缺失记录、更改属性的数据类型等。

    • 尝试不同的数据建模策略。

    • 了解Spark 优化的应用方式。

  • 根据您的应用程序调整Spark 和 Neo4j参数。

    • 在使用积极的并行处理或大批量大小之前,请适当调整 Neo4j 实例的大小。

    • 尝试使用更大的批处理大小(确保批处理保持在 Neo4j 配置的堆内存范围内)。一般来说,批处理越大,到 Neo4j 的整体吞吐量就越快。

使用正确的索引和约束

在 Neo4j Cypher 级别,非常常见的是以生成 MERGE 查询的方式使用 Spark 连接器。在 Neo4j 中,这会根据某些“键”查找节点,然后仅在该节点尚不存在时创建它。

强烈建议在用作 node.keysrelationship.source.node.keysrelationship.target.node.keys 或其他类似键选项一部分的任何图属性上声明索引或约束。

性能不佳的一个常见原因是编写生成 MERGE Cypher 或以其他方式尝试在 Neo4j 中查找数据而没有适当的数据库索引的 Spark 代码。在这种情况下,Neo4j 服务器最终会查看比满足查询所需更多的数据,从而导致性能下降。