2017-08-03 5 views
0

J'essaye de conserver beaucoup de données mais j'ai toujours une "memoryOutException". J'ai déjà essayé le flush, le clear, le close ... tout ce que toute sorte de solution présentait ici sous SOF .. et aucun ne fonctionnait, ma mémoire ne cessait de croître et le persist/commit se faisait de plus en plus lent ...a une fuite de mémoire Hibernate ogm? (Ou quelque chose ne se ferme pas bien)

public class Insersecao1 { 

private static EntityManagerFactory emf; 
private static SessionFactory factory; 

public static void main(final String[] args) throws Exception { 

    File pathFile = new File("D:\\Dados lab\\Database-json"); 
    AnalyzedCommit analyzedCommit = null; 


    emf = Persistence.createEntityManagerFactory("hikePu"); 
    EntityManager entityManager = emf.createEntityManager(); 
    entityManager.getTransaction().begin(); 

    int count = 1; 
    for (File f : pathFile.listFiles()) { 

     analyzedCommit = ... ; 
     entityManager.persist(analyzedCommit); 

     if (count % 75 == 0) { 

      entityManager.getTransaction().commit(); 
      entityManager.close(); 
      entityManager = emf.createEntityManager(); //Tried create a new one 
      entityManager.getTransaction().begin(); 
     } 

     count++; 
     System.out.println(count); 

    } 
} } 

en utilisant Maven:

<dependency> 
     <groupId>org.hibernate.ogm</groupId> 
     <artifactId>hibernate-ogm-neo4j</artifactId> 
     <version>5.0.4.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.jbossts</groupId> 
     <artifactId>jbossjta</artifactId> 
     <version>4.16.6.Final</version> 
    </dependency> 

Et Persistent:

<persistence-unit name="hikePu" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> 
    <properties> 
     <property name="hibernate.ogm.datastore.provider" value="neo4j_embedded" /> 
     <property name="hibernate.ogm.datastore.database" value="EasyDB" /> 
     <property name="hibernate.ogm.neo4j.database_path" value="D:\Dados lab\mydb" /> 
     <!--   <property name="hibernate.ogm.neo4j.database_path" value="mydb" />--> 
     <property name="dbms.allow_format_migration" value="true" /> 
    </properties> 
</persistence-unit> 

Répondre

0

en ce qui concerne Comme je peux le voir à partir de mon profilage, il vient de Neo4j, pas d'OGM. L'utilisation d'un serveur Neo4j externe permet de voir que l'utilisation de la mémoire OGM est stable (j'utilise actuellement un insert de 8 millions d'entités).

Je vous suggère de mettre à niveau vers Hibernate OGM 5.1.0.Final et d'utiliser un serveur Neo4j externe soit avec le fournisseur de banque de données neo4j_http ou le protocole de banque de données neo4j_bolt (je recommanderais d'utiliser Bolt).

Je pense que c'est une meilleure solution de toute façon que vous auriez accès à la belle console Neo4j et ainsi de suite. Voir https://docs.jboss.org/hibernate/stable/ogm/reference/en-US/html_single/#_configuring_neo4j pour plus d'informations sur la configuration de l'accès à votre serveur Neo4j.