优化许多neo4j节点之间的关系建立

问题描述 投票:0回答:1

我有一个包含两个特定节点类型的数据库:GenomicRangeGeneModelGenomicRange节点集包含约8,000万个节点,而GeneModel包含约45,000个节点。

GenomicRange节点包含属性posStart,它存储为整数。 GeneModel节点包含两个特定的整数属性geneStartgeneEnd。这些坐标位于两种节点类型中的chromosome属性上(例如110)。

如果(1)它们的染色体属性匹配,(2)如果[:RANGE_WITHIN]中的posStart值落在GenomicRange节点上的geneStartgeneEnd属性的范围内,我想要做的是在这两个节点之间有效地创建关系(例如GeneModel)。 。

我目前遇到的问题是我的查询/构建过程非常缓慢。有没有办法优化这段代码?

谢谢你的帮助!

MATCH (model:GeneModel)
WITH model
MATCH (range:GenomicRange)
WHERE range.chromosome = model.chromosome AND range.posStart >= model.geneStart AND range.posStart <= model.geneEnd
CREATE (range)-[:RANGE_WITHIN]->(model)
neo4j cypher
1个回答
0
投票

几点建议:

在您用于比较的属性上添加索引。

这里:posStart,chromosome,geneEnd,geneStart。

`CREATE INDEX ON :GenomicRange(chromosome)`

增加堆内存:创建索引会增加内存使用量,因此可以将堆大小增加到内存的50%。您可以在neo4j.conf文件中进行配置。

增加页面缓存:缓存大小越多,缓存在内存中的数据越多,这将有助于避免昂贵的磁盘访问。

阅读有关内存配置here的更多信息。

附:如果在增加堆大小后仍然出现内存不足错误,请在第1行和第3行交换GenomicRangeGeneModel或使用APOC plugin定期创建关系。

热门问题
推荐问题
最新问题