我正在使用具有超过 60,000 个节点的相当大的 Neo4J 设置。每个节点大约有 4~5 个属性和简单的父->子关系。在处理这 60,000 个节点时,特别是在昂贵且重复的查询中,我通过 Neo4J 的 REST 接口收到各种 500 HTTP 错误。
在查看日志后,我发现 Java 堆空间是问题所在。我将 512 MB 限制提高到 2048 MB,但它仍然给我 500。如果我将堆设置为 3GB 或 4GB,neo4j 甚至都不会启动。我正在一台相当不错的笔记本电脑(i5、4GB RAM)上对此进行测试,我真的很想知道这是否是配置问题,或者应用程序是否会在我的服务器(亚马逊超大型高 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 循环向工作人员发送消息,工作人员进行查询。