性能提升
通用原则
-
由于 Spark 擅长并行计算,所有非图形密集型的计算应在 Spark 层完成,而不是在 Neo4j 上的 Cypher® 中进行。
-
根据您的应用调整 Spark 和 Neo4j 参数。
-
在使用高强度并行或大批量大小之前,请适当配置 Neo4j 实例的规模。
-
尝试更大的批量大小(确保批次保持在 Neo4j 配置的堆内存范围内)。一般来说,批量越大,向 Neo4j 的整体吞吐量越快。
-
使用正确的索引和约束
在 Neo4j Cypher 层,常见的做法是使用 Spark 连接器生成 MERGE 查询。在 Neo4j 中,这会根据某个“键”查找节点,若节点不存在则创建它。
强烈建议在您用作 node.keys、relationship.source.node.keys、relationship.target.node.keys 或其他类似键选项的任何图属性上建立索引或约束。
|
导致性能差的常见原因是编写生成 MERGE Cypher 的 Spark 代码,或在没有相应数据库索引的情况下尝试在 Neo4j 中查找数据。这种情况下,Neo4j 服务器会遍历远超必要的数据量来满足查询,从而导致性能下降。