java - 是什么导致了 neo4j 的这种糟糕表现?

标签 java profiling rdf neo4j

在我们的堆栈中,我们使用 neo4j 并遇到了典型的性能问题:应用程序在需要来自 neo4j 的数据时速度非常慢。 .

只听我的勇气(双关语)我启动了 JVisualVM 并对应用程序进行了分析。

此应用程序托管在 JavaEE 服务器 (Glassfish) 中,并使用由 Empire-RDF 组成的准语义堆栈。 , Blueprints , 和 neo4j . JCA neo4j-connector 提供对 neo4j 的访问.

如这张截图所示,有确凿证据表明 neo4j 数据检索存在瓶颈。

Interesting fragments of a profiling session

我的问题是双重的,但很简单。

  1. 该性能水平正常吗? (我想没有)
  2. 我可以做些什么来提高这些表现?

编辑这里有一些关于测试过程的信息,应该对你们俩都有启发。

我的图形结构对我来说是未知的:因为我在 Blueprints/Sesame/Neo4J 之上使用 Empire-RDF,我只知道我正在操作的 Java 对象,它们是十个相互关联的类,不幸的是,它们是我们业务的核心,所以我不能透露。

为了这个例子,考虑一下,他们创建了一个视觉元素树,这些元素链接到表示 URI 目标的实体。

我有一个运行读/写操作组合的 Maven 测试(我会说涉及 20 到 50 个 JPA 操作)。此 Maven 测试运行时间为 300

在较低的层次上,

  • 应用程序在 Windows-7 和 Mac OS X 10.6 上运行,具有 Java 1.6 的各种子版本。
  • 应用托管在 Glassfish 3.1.1 上
  • neo4j DB 是 1.5 版,通过 neo4j-connector 访问对于 JCA(没有对默认设置进行自定义)。
  • Sesame 是 2.6.0 版本
  • 蓝图是 1.1 版
  • Empire-RDF 是 0.7 版本

作为最后一个世界,深入研究 jVisualVM 采样器揭示了大部分应用程序时间都花在了那些 NodeManager#getNodeForProxy 调用上。

最佳答案

上次使用 neo4j Sail 时,我对其性能感到非常失望。插入,甚至是批量插入,速度慢得令人无法接受,而且除了最简单的查询之外,对于任何类型的面向用户的界面来说都太慢了。

诚然,这是大约两年前的事了,所以它的性能可能与我上次查看它时有所不同(也许甚至更好),但当时它远远落后于所有专用 RDF 数据库,我不知道想象一下他们已经 catch 了。

如果您将 neo4j 用作图形存储,它很好,但我认为它不太适合 RDF。使用真正的 RDF 数据库会更好。由于您使用的是 Empire,假设您不依赖任何特定的 neo4j/Blueprints,应该很容易放入大多数其他 RDF 数据库并查看它如何影响性能。如果是这样的话,Stardog包括蓝图的绑定(bind),这可能值得一看。

关于java - 是什么导致了 neo4j 的这种糟糕表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096885/

相关文章:

java - 整个工作集/工作区的 Eclipse “Open Call Hierarchy”

java - 单击按钮后重复重新绘制面板

java - 神经网络返回NaN作为输出

xcode - 测量所有目标(包括依赖目标)的 xcodebuild 持续时间

c++ - 回溯查询非常慢

java - 如何访问位于项目文件夹外部和项目类路径外部的 .properties 文件?

c# - 在 Nsight 或 Visual Profiler 中分析 ManagedCuda

rdf - Sparql 查询超时并出现传递临时内存错误消息

rdf - SPARQL 选择 RDF :ID

java - 使用JENA在线读取rdf文件