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