gpt4 book ai didi

java - 为什么 cypher 查询或可能是 Neo4j 性能低下?

转载 作者:行者123 更新时间:2023-12-01 13:47:48 25 4
gpt4 key购买 nike

我正在使用 Neo4j 的 neo4j 2.0-M5 社区版本。

我已使用 here 中的 JDBC 驱动程序创建了节点,不幸的是我没有处理自动索引,而是创建了标签。我有 5000 万个节点、1.6 亿个属性和 10 个关系。我使用 Java Neo4j 嵌入式 API 执行此查询

MATCH(names:DAR)
with names limit 200000
where names.name <> null
and (names.name =~ ".* (?i)SHAIK$" or names.name =~ "(?i)SHAIK .*$"
or names.name =~ ".* (?i)SHAIK .*$" or names.name =~ "(?i)SHAIK" )
AND NOT(names.name =~ '.(?i)shekar.$')
AND NOT(names.name =~ '.(?i)shekhar.$')
AND NOT(names.name =~ '.(?i)sheker.$')
return names as names1

在 cypher 控制台中需要40 秒,在 Java Neo4j 嵌入式 API 中需要2 分钟
好的,好吧,稍后我使用以下代码处理这些

Iterator<Node> resultNode1 = result.columnAs("names1");  
while (resultNode1.hasNext()) {
System.out.println("after ddd"+Calendar.getInstance().getTime());
}

第一个记录需要几秒钟,但最后一个记录需要 5 分钟

我尝试使用不同的输入,例如 SHAeK 和 sheek。如果迭代器中有 100 条记录,则前 99 条记录需要几秒钟,第 100 条记录需要 5 分钟。

我无法提高性能,请帮助我吗?

最佳答案

我在这里看到的问题是,从驱动程序生成的 Cypher 查询严重依赖 RegEx 而不是 Lucene。

在您匹配的 200,000 条记录上运行复杂的正则表达式(如您提供的正则表达式)的计算成本非常高。我建议您首先限制要匹配的记录数量,然后执行正则表达式匹配。对于合理的执行时间,可管理的记录量将低于 100。

如果这对您的应用程序不可行,那么我会考虑一种索引策略,允许您使用 Lucene 查询来执行匹配,而不是使用标签 + RegEx。

干杯,

肯尼

关于java - 为什么 cypher 查询或可能是 Neo4j 性能低下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20218087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com