3

私はガイド サービスのアプリケーションを作成しており、デジタル オーシャン ドロップレットで Neo4j 2.3.1 の 3 サーバー クラスターを実行しています。また、Tomcat で実行されている JSF Web アプリから Spring Data Neo4j 4.0.0.RELEASE を使用して、データの書き込みとクエリを実行しています。

80以上のインスタンスを正常に保存した他のノードとの潜在的に7つの異なる関係を持つノードがありますが、ノードを保存しようとすると、インスタンス1のマスターneo4jサーバーで突然メモリ不足エラーが発生し始めました。Neo4j サーバーのメモリ設定を次のように更新しました。

wrapper.java.initmemory=512
wrapper.java.maxmemory=1024

OutOfMemoryError は発生しなくなりましたが、ノードを保存しようとするとサーバーが失敗します。サーバーが正常に機能しなくなる前に、データを照会できます。サーバー 1 のマスター data/log/console.log ファイルにエラー メッセージが表示されることはありませんが、サーバー 2 スレーブの data/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

Node Entity 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;
    }

}

保存するために使用するコードは、SDN4 GraphRepository 保存によるものです。

    @Transactional
    public void saveHunt() 
    {        
        OutfitterWaterfowlHunt owh = new OutfitterWaterfowlHunt();

        owh.setType("GuideTypeHere");

        Day doh = this.determineDayOfHunt();

        owh.occuredOn(doh, this.timeIn.getTime(), this.timeOut.getTime());
        owh.participatedIn(this.huntGroup, this.nbrOfHunters);

        GuideService gs = WDSSession.getInstance().getNeo4JController().retrieveGuideServiceByName("GuideServiceNameHere");

        owh.setGuideService(gs);
        owh.setFieldStaffHunter(this.selectedFSMembers);
        owh.setFieldStaff(this.responsibleFieldStaffer);
        owh.occuredAt(this.huntLocation);

        HuntInformation hi = this.populateHuntInformation();

        owh.setHarvestInfo(hi);

        owh = WDSSession.getInstance().getNeo4JController().saveOutfitterWaterfowlHunt(owh);

        StringBuffer msg = new StringBuffer();
        msg.append("Successfully Saved Hunt ");
        msg.append(" (");
        msg.append(owh.getGraphId());
        msg.append(").");

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Hunt Save Status", msg.toString()));
    }

GraphRepository 保存:

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

        return owHunt;
    }

このノードを保存するときにサーバーが突然失敗し始める原因についてのアイデアはありますか? 現在、Neo4j データベースには 19957 個のノードがあり、そのほとんどが DateTree を構成しています。現在行っている方法よりもノードを保存するためのより良い方法はありますか?

ティア

4

1 に答える 1