我有一个顶点节点实体,它有一个关系列表。
@NodeEntity (label="User")
public class Vertex {
private Long id;
private String name;
@Index(unique=true)
private String email;
@Relationship(type="WORKS_WITH", direction = Relationship.OUTGOING)
private List<Edge> teammates;
..
}
@RelationshipEntity(type = "WORKS_WITH")
public class Edge {
@GraphId
private Long relationshipId;
@Property
private double weight;
@StartNode
private Vertex src;
@EndNode
private Vertex dest;
}
我有一个Spring Boot应用程序,我正在使用spring-data-neo4j(4.0.0)和本地neo4j服务器。当我在边缘列表中保存具有3-10个边的Vertex对象时,它可以正常工作。如果边列表变大(最多20-30个边对象),则应用程序无法保存顶点。 我使用org.springframework.data.neo4j中的GraphRepository保存顶点:
vertexRepository.save(vertex);
我已将所有调整参数保留为默认值,因为我还没有保存大量数据。我已将内存池和永久生成空间的大小设置为:
export JAVA_OPTS="-Xmx256M -XX:MaxPermSize=512M"
在消息日志中,我得到:
2016-05-31 12:12:06.592+0000 WARN [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 327ms.
2016-05-31 12:12:08.256+0000 WARN [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 260ms.
2016-05-31 12:12:09.915+0000 WARN [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 258ms.
2016-05-31 12:12:12.690+0000 WARN [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 269ms.
Neo4j文档表明,对于200万个节点,你需要512Mb的堆才能满足我的需求。
我的机器是 Google Compute Engine实例:自定义(2个vCPU,8 GB内存)。这可能是什么问题?
答案 0 :(得分:1)
升级到SDN 4.1.1解决了我的问题。