【问题标题】:which is more efficient for the task: Xquery or Cypher哪个对任务更有效:Xquery 或 Cypher
【发布时间】:2019-04-25 05:31:41
【问题描述】:

我想描述两个场景,其中系统有一个大的 xml 文件(包含多个 10.000 行数据)。我的问题是哪个场景的性能更好,A 还是 B?

两种场景的第一步是相同的:一个函数通过xml并将节点和属性放入neo4j数据库:

.xml --> custom function --> neo4j

这个自定义函数的性能并不重要,因为它只发生一次。

例如,我们想知道一个节点的第 N 个叔叔。所以我们查询 neo4j 并返回请求的节点。

一) 第一个场景我们直接查询neo4j

neo4j <-- query: Cypher <-- GUI

B) 在第二种情况下,我们直接使用 Xquery 查询 xml,我们得到一个 ID。

xml <-- query: Xquery <-- GUI

然后我们从 neo4j 中查询该 ID

GUI --> query: Cypher --> neo4j

所以在第一个场景中,我们查询 neo4j 并执行读/写/更新/删除基本操作。

在第二种情况下,我们查询 xml,只在 neo4j 中进行基本的读/写/更新/删除操作。

很高兴知道哪个版本对系统有更好的性能以及为什么!

【问题讨论】:

  • 您必须同时测量两者并查看;其他人的测量不太可能外推到您的特定环境。请注意,XQuery 是一种语言,而不是软件。 XQuery 有很多实现,一些在数据库上工作,一些在内存中,它们的性能可能会有很大差异。不过,总的来说,如果您已经努力将数据加载到数据库中,那么数据库应该能够提供比任何处理原始 XML 的东西更好的性能。唯一需要注意的是,您的数据集似乎很小。

标签: xml performance neo4j cypher xquery


【解决方案1】:

最好的方法是同时实现两者,对两者进行压力测试,并自行评估性能差异是否足够大以证明不采用更简单/更易于维护的解决方案是合理的。您的帖子中没有很多因素会影响结果,例如;您使用的是什么 xquery 实现? GUI、XML 和 Neo4j 是否都在同一台服务器上?网络硬件、使用负载和服务器规格;数据大小(您建议的大小听起来像是您的数据可以称为“玩具”项目,因此性能可能是一个有争议的问题。也就是说,您的节点或关系少于 100 万个)


也就是说,我想把钱花在制作 Neo4j Cypher 上。网络(或较小的跨应用程序)通信很慢(在计算机时间内),并且由于您将同时使用 Neo4j,因此无论如何您都将支付该费用(使用 XQuery 解决方案两次,因为 GUI 启动了两个调用)

XQuery 很可能必须对 XML 文件进行扫描(我不知道没有索引它还能如何工作),而 Neo4j 是为关系遍历而设计的。每个都将是针对内部索引的二进制搜索(本质上,可能不完全是。Cypher 规划器执行每个查询最有效的操作)。两者都需要磁盘 IO,但 Cypher 的优势在于 Neo4j 会在 RAM 中缓存一些数据以便快速检索,而 Neo4j 通常需要更少的磁盘访问来查找所需的内容。

【讨论】:

  • 感谢您的提示,但是我不能接受您的答案作为解决方案,因为我们仍然不确定答案。
  • @Patry0t 就像我在上半场说的;需要更多信息才能获得更具体的信息。也就是说,您使用的是什么 XQuery 实现,以及 Neo4j、XQuery 和客户端在网络中的位置(同一台机器与同一局域网中,与 ISP 上的对比)。如果没有更多细节,您将需要实施和压力测试才能确定。
猜你喜欢
  • 1970-01-01
  • 2014-03-03
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2012-03-12
相关资源
最近更新 更多