Java 是什么原因导致neo4j性能不佳?

Java 是什么原因导致neo4j性能不佳?,java,profiling,rdf,neo4j,Java,Profiling,Rdf,Neo4j,在我们的堆栈中,我们使用了neo4j,并且遇到了经典的性能问题:应用程序在需要来自的数据时速度非常慢 只听了我的勇气(双关语),我启动了JVisualVM并对应用程序进行了分析 该应用程序托管在JavaEE服务器(Glassfish)中,并使用由、和组成的准语义堆栈。neo4j的访问权限由提供 正如此截图所示,有强有力的证据表明neo4j数据检索存在瓶颈 我的问题是双重的,但很简单 这个性能水平正常吗?(我想没有) 我能做些什么来提高这些性能 编辑以下是一些关于测试过程的信息,应该对你们两人都

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

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

该应用程序托管在JavaEE服务器(Glassfish)中,并使用由、和组成的准语义堆栈。neo4j的访问权限由提供

正如此截图所示,有强有力的证据表明neo4j数据检索存在瓶颈

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

  • 这个性能水平正常吗?(我想没有)
  • 我能做些什么来提高这些性能
  • 编辑以下是一些关于测试过程的信息,应该对你们两人都有所启发

    对我来说,我的图形结构是未知的:当我在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版,通过for JCA访问(没有对默认设置进行自定义)
    • Sesame是2.6.0版
    • 蓝图是1.1版
    • 帝国RDF是0.7版

    最后,深入jVisualVM sampler会发现大部分应用程序的时间都花在那些
    节点管理器#getNodeForProxy
    调用上。

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

    诚然,这是大约两年前的事了,所以它的性能可能与我上次查看时有所不同(甚至更好),但当时它远远落后于所有专用RDF数据库,我不认为它们已经赶上了


    如果您将neo4j用作图形存储,它很好,但我认为它不适合RDF。使用真正的RDF数据库会更好。因为您使用的是Empire,所以如果您不依赖任何特定于neo4j/Blueprints的东西,那么您应该可以很容易地访问大多数其他RDF数据库并了解其对性能的影响。如果是这样的话,包括蓝图的绑定,这可能值得一看。

    好了,是时候结束这个笑话了,谢谢迈克和我的帮助

    性能问题不是neo4J 1.5故障,也不是帝国,也不是蓝图问题,而是我对自己的持久性堆栈理解不足

    您还记得我说过使用的neo4j实例是从JCA连接器获得的吗

    嗯,我使用了0.2版的连接器,它与neo4j 1.4一起工作。。。是的,1.4


    幸运的是,我已经准备了该版本的升级,允许我直接向neo4j发送参数(比如设置cache_type)。因此,将其捆绑,部署到我的本地存储库,将其集成到我的域中,进行测试,然后。。。成功!ax20性能改进

    到目前为止,我们在Neo4J上只取得了很好的成绩。不过我们只是用纯香草的。你向邮件列表上的人指出这个问题了吗?我想这就是问题所在,使用neo4j作为图形数据库,你会得到很好的性能。但是,当你试图把RDF的世界视图放在上面时,你就会遇到麻烦。SPARQL是非常重的连接,对于像Empire这样生成非常复杂查询的东西来说,一些不是本机设计来高效执行这些连接的东西会有很多麻烦。请提供更多信息:图形的版本、大小和结构,您希望执行哪些操作,您的gremlin代码,jvm内存设置、neo4j设置(mmio)、操作系统,如果只有0.2%的评测时间花在neo4j上,我不知道这是否真的是个问题?neo4j的连接应该没有问题,因为它是一个graphdb,我认为这是另外一个问题。您是否可以提供一个演示项目/用例来显示这种行为?也许没有glassfish/jca开销?很高兴听到它成功了,你能分享一下你对连接器的升级吗?写一篇关于这个堆栈的博文就好了!