Java Neo4j 2.3.1服务器在保存具有多个关系的SDN4实体时死亡

Java Neo4j 2.3.1服务器在保存具有多个关系的SDN4实体时死亡,java,neo4j,spring-data-neo4j-4,neo4j-ogm,Java,Neo4j,Spring Data Neo4j 4,Neo4j Ogm,我正在为指南服务编写一个应用程序,并在digital ocean Drops上运行一个3服务器的Neo4j 2.3.1集群。我还使用在Tomcat下运行的JSF web应用程序中的SpringDataNeo4J4.0.0.RELEASE来编写和查询我的数据 我有一个与其他节点可能有7种不同关系的节点,我已成功保存了80多个实例,但在尝试保存该节点时,实例1主neo4j服务器上突然出现内存不足错误。我将Neo4j服务器的内存设置更新为: wrapper.java.initmemory=512 wr

我正在为指南服务编写一个应用程序,并在digital ocean Drops上运行一个3服务器的Neo4j 2.3.1集群。我还使用在Tomcat下运行的JSF web应用程序中的SpringDataNeo4J4.0.0.RELEASE来编写和查询我的数据

我有一个与其他节点可能有7种不同关系的节点,我已成功保存了80多个实例,但在尝试保存该节点时,实例1主neo4j服务器上突然出现内存不足错误。我将Neo4j服务器的内存设置更新为:

wrapper.java.initmemory=512
wrapper.java.maxmemory=1024
我不再获得OutOfMemoryError,但现在当我尝试保存节点时,服务器失败。我可以在服务器发生故障之前查询数据。我从未在服务器1主数据/log/console.log文件中收到错误消息,但在服务器2从数据/log/console.log文件中收到以下消息:

2015-12-31 15:42:00.405-0500 INFO  Instance 1  is alive
2015-12-31 15:42:00.539-0500 INFO  Instance 1  was elected as coordinator
2015-12-31 15:42:00.598-0500 INFO  Instance 1  is available as master at ha://0.0.0.0:6001?serverId=1 with StoreId{creationTime=1447860597504, randomId=2820629596580485150, storeVersion=15250506225055238, upgradeTime=1447860597504, upgradeId=1}
2015-12-31 15:42:00.647-0500 INFO  Instance 1  is available as backup at backup://127.0.0.1:6362 with StoreId{creationTime=1447860597504, randomId=2820629596580485150, storeVersion=15250506225055238, upgradeTime=1447860597504, upgradeId=1}
2015-12-31 15:42:11.652-0500 INFO  Instance 1  has failed
节点实体Java代码:

public class OutfitterWaterfowlHunt extends WaterfowlHunt {

    @Relationship(type="RUN_BY", direction=Relationship.OUTGOING)
    private GuideService guideService;

    @Relationship(type="GUIDED", direction=Relationship.INCOMING)
    private List<Guide> fieldStaffHunter = new ArrayList<Guide>();

    @Relationship(type="ASSIGNED_BY", direction=Relationship.OUTGOING)
    private Guide fieldStaff;

    public void addGuide(Guide guide)
    {
        this.fieldStaffHunter.add(guide);
    }

    public List<Guide> getFieldStaffHunter() {
        return fieldStaffHunter;
    }

    public void setFieldStaffHunter(List<Guide> fieldStaffHunter) {
        this.fieldStaffHunter = fieldStaffHunter;
    }

    public GuideService getGuideService() {
        return guideService;
    }

    public void setGuideService(GuideService guideService) {
        this.guideService = guideService;
    }

    public Guide getFieldStaff() {
        return fieldStaff;
    }

    public void setFieldStaff(Guide fieldStaff) {
        this.fieldStaff = fieldStaff;
    }   
}



public class WaterfowlHunt extends Excursion {

    @Property(name="type")
    private String type;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }   
}


public class Excursion extends BaseEntity {

    @Relationship(type="OCCURED_ON", direction=Relationship.OUTGOING)
    private TookPlaceOn occuredOn;

    @Relationship(type="OCCURED_AT", direction=Relationship.OUTGOING)
    private ExcursionLocation excursionLocation;

    @Relationship(type="PARTICIPATED_IN", direction=Relationship.INCOMING)
    private HuntGroupRole participatedIn;

    @Relationship(type="HARVESTED", direction=Relationship.OUTGOING)
    private HuntInformation harvestInfo;


    public TookPlaceOn occuredOn(Day day, Long timeIn, Long timeOut)
    {
        TookPlaceOn tpo = new TookPlaceOn();

        tpo.setDayOfExcursion(day);
        tpo.setExcursion(this);

        tpo.setTimeIn(timeIn);
        tpo.setTimeOut(timeOut);

        this.occuredOn = tpo;

        day.addOccuredOn(tpo);

        return tpo;
    }

    public void occuredAt(ExcursionLocation huntLocation)
    {
        this.setExcursionLocation(huntLocation);
    }

    public void harvested(HuntInformation harvestInfo)
    {
        this.setHarvestInfo(harvestInfo);
    }

    public HuntGroupRole participatedIn(HuntGroup huntGroup, Integer         nbrOfHunters)
    {
        HuntGroupRole hgr = new HuntGroupRole();

        hgr.setHuntGroup(huntGroup);
        hgr.setHuntingSpot(this);

        hgr.setNumberOfHunters(nbrOfHunters);

        this.participatedIn = hgr;

        huntGroup.addParticipatedIn(hgr);

        return hgr;
    }

    public HuntGroupRole getParticipatedIn() {
        return participatedIn;
    }

    public void setParticipatedIn(HuntGroupRole participatedIn) {
        this.participatedIn = participatedIn;
    }

    public TookPlaceOn getOccuredOn() {
        return occuredOn;
    }

    public void setOccuredOn(TookPlaceOn occuredOn) {
        this.occuredOn = occuredOn;
    }

    public ExcursionLocation getExcursionLocation() {
        return excursionLocation;
    }

    public void setExcursionLocation(ExcursionLocation excursionLocation) {
        this.excursionLocation = excursionLocation;
    }

    public HuntInformation getHarvestInfo() {
        return harvestInfo;
    }

    public void setHarvestInfo(HuntInformation harvestInfo) {
        this.harvestInfo = harvestInfo;
    }

}
GraphRespository保存:

    @Transactional
    public OutfitterWaterfowlHunt saveOutfitterWaterfowlHunt(OutfitterWaterfowlHunt owh)
    {
        OutfitterWaterfowlHunt owHunt = this.outWtrFwlRepo.save(owh);

        return owHunt;
    }
在保存此节点时,您知道是什么导致服务器突然开始出现故障吗?我目前在Neo4j数据库中有19957个节点,其中大部分构成了我的日期树。有没有比我现在做的更好的方法来保存节点


TIA

此问题已在尚未发布的neo4j ogm 2.0中修复。同时解决这一问题的困难方法是首先保存所有相关实体,然后保存顶级实体,但看看您的模型,这并不简单

OGM2.0是否有预计发布日期?我将尝试按照您的建议保存相关节点,并让您知道这是否可以暂时解决我的问题。谢谢我想两周后,但别逼我:-)谢谢卢安!我会留意的。@wwixon OGM 2.0快照现在可用-请使用OGM的文档。SDN 4.1的文档尚未更新,但请遵循Vince在此处描述的内容-。您可能需要包括neo4j快照m2.neo4j.org/content/repositories/snapshots true
    @Transactional
    public OutfitterWaterfowlHunt saveOutfitterWaterfowlHunt(OutfitterWaterfowlHunt owh)
    {
        OutfitterWaterfowlHunt owHunt = this.outWtrFwlRepo.save(owh);

        return owHunt;
    }