【发布时间】:2012-05-26 22:42:52
【问题描述】:
我正在使用具有 60,000 多个节点的相当大的 Neo4J 设置。每个节点大约有 4~5 个属性和简单的父->子关系。在使用这 60,000 个节点时,特别是在昂贵且重复的查询中,我通过 Neo4J 的 REST 接口收到各种 500 HTTP 错误。
查看日志后,我发现 Java 堆空间是问题所在。我将 512 MB 限制提高到 2048 MB,但它仍然给我 500。如果我将堆设置为 3GB 或 4GB,neo4j 甚至都不会启动。我正在一台相当不错的笔记本电脑(i5、4GB RAM)上对此进行测试,我真的很想知道这是否是配置问题,或者应用程序是否可以在我的服务器(Amazon Extra-Large High-CPU 实例)上正常运行。是否有某种缓存可以帮助我更快地获得东西?基本上,我多次迭代整个节点网络。
我正在运行两个查询。第一个是:
start referrer=node(3) match path=referrer-[*1..1]->referral return referral
这样做是为了发现引荐来源#3 的第 1 层节点。然后,我必须从他的所有层中发现所有节点,返回节点,第一层的节点,然后是层号。
start referrer=node(3) match path=referrer-[*1..1]->firsttier-[*0..]->referral return referral, firsttier, length(path)
它运行良好,而且速度非常快。但是,我正在为我网络中的所有节点执行此操作。我在 for 循环中运行这两个查询(并使用它们应用业务逻辑)。循环运行 60,000 次。
现在我正在我的笔记本电脑上测试这个,但是,这个“任务”已经为分布式处理做好了准备,因为我用 ZeroMQ 做了一切。 for 循环向工作人员发送消息,工作人员进行查询。
【问题讨论】: