为什么通过代码查询比 Neo4j 客户端慢 10 倍?
Why is a query 10 times slower through code as opposed to the Neo4j Client?
最近,我接到一项任务,即研究并提供 NoSQL 数据库效果的概念证明。我已选择 Neo4j 作为此 .NET 应用程序的 NoSQL 数据库。
事情是......当我使用 Neo4j 客户端执行查询时,它运行在 10-20 毫秒内,这太棒了。每当我通过代码执行该查询时,都需要 150-200 毫秒,这是巨大的差异。
查询如下(银行是数据库的荷兰语)
我想要实现的目标是让每个银行都有他们的Children(为了获得整个层次结构):
MATCH (bank:Bank)-[:PARENT_OF]->(bank2:Bank)
Return (bank.id),collect(bank2.id)
这是我用来执行查询的代码。
var query = client.Cypher.Match("(bank:Bank)-[:PARENT_OF]->(child:Bank)")
.Return((bank, child) => new
{
Bank = bank.As<Bank>(),
Children = child.CollectAs<Bank>()
});
var list = query.Results
我的问题是:为什么通过代码查询比 Neo4j 客户端慢 10 倍?
我猜你是在与网页版进行比较?
使用客户端会产生很多开销 - 诸如 OGM
(对象图映射)之类的东西会消耗一些性能,然后您必须添加诸如实际 HTTP 调用之类的开销。
Web 上的客户端 (localhost:7474) 不必与此抗衡。
您可能还会注意到 Web 客户端显示不同的内容 - API 而非 返回的内容。我想你会得到一张图表,显示 Bank
都以良好的关系连接在一起 - 如果你 运行 查询并查看 REST
响应 - 你会注意到没有关系数据在那里,所以它一定是在调用其他东西。
我知道这不是一个理想的答案:/
最近,我接到一项任务,即研究并提供 NoSQL 数据库效果的概念证明。我已选择 Neo4j 作为此 .NET 应用程序的 NoSQL 数据库。
事情是......当我使用 Neo4j 客户端执行查询时,它运行在 10-20 毫秒内,这太棒了。每当我通过代码执行该查询时,都需要 150-200 毫秒,这是巨大的差异。
查询如下(银行是数据库的荷兰语)
我想要实现的目标是让每个银行都有他们的Children(为了获得整个层次结构):
MATCH (bank:Bank)-[:PARENT_OF]->(bank2:Bank)
Return (bank.id),collect(bank2.id)
这是我用来执行查询的代码。
var query = client.Cypher.Match("(bank:Bank)-[:PARENT_OF]->(child:Bank)")
.Return((bank, child) => new
{
Bank = bank.As<Bank>(),
Children = child.CollectAs<Bank>()
});
var list = query.Results
我的问题是:为什么通过代码查询比 Neo4j 客户端慢 10 倍?
我猜你是在与网页版进行比较?
使用客户端会产生很多开销 - 诸如 OGM
(对象图映射)之类的东西会消耗一些性能,然后您必须添加诸如实际 HTTP 调用之类的开销。
Web 上的客户端 (localhost:7474) 不必与此抗衡。
您可能还会注意到 Web 客户端显示不同的内容 - API 而非 返回的内容。我想你会得到一张图表,显示 Bank
都以良好的关系连接在一起 - 如果你 运行 查询并查看 REST
响应 - 你会注意到没有关系数据在那里,所以它一定是在调用其他东西。
我知道这不是一个理想的答案:/