2013-04-08 2 views
0

Je développe un projet basé sur Spring Data Neo4j en utilisant l'approche repositories. Le problème est que je ne peux pas lire et écrire le graphique en même temps (ce qui est requis dans mon application), puisque je reçois cette erreur autrement. Mon instance de serveur Neo4j n'est pas en cours d'exécution mais j'ai différents processus qui essayent de travailler avec la base de données (ie: le même contexte d'application est chargé dans différentes méthodes principales et devrait probablement être le problème, je ne sais pas). Je suis habitué aux bases de données relationnelles et je ne comprends pas très bien ce comportement. Quelle serait la meilleure approche pour se débarrasser de ce problème? Ou est-ce réellement possible?Neo4j: lock store

Cela fait partie de mon dossier de contexte d'application:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:context="http://www.springframework.org/schema/context" 
      xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
      xmlns:neo4j="http://www.springframework.org/schema/data/neo4j" 
      xsi:schemaLocation= 
      "http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.springframework.org/schema/data/mongo 
      http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/data/neo4j 
      http://www.springframework.org/schema/data/neo4j/spring-neo4j-2.0.xsd"> 

      <!-- Neo4j --> 
      <neo4j:config storeDirectory="/data/production/graph.db"/> 
      <neo4j:repositories base-package="org.domain.project.repositories.neo4j"/> 

Avec ce contexte, je suis en mesure d'accéder à l'interface neo4jOperations dans ma mise en œuvre du référentiel Neo4j personnalisé et de construire des requêtes sans problèmes. D'un autre côté, l'utilisateur actuel a des privilèges pour accéder au dossier de données, cela ne devrait donc pas poser de problème.

Répondre

0

Vous ne pouvez pas écrire à partir de deux processus dans la même base de données Neo4j. Au lieu de cela, vous devez configurer un cluster Neo4j HA et utiliser l'une des instances de cluster comme base de données intégrée pour SDN. La réplication, etc. sera alors transparente pour vos applications. Voir https://groups.google.com/forum/?fromgroups=#!topic/neo4j/6mxSvhemd8M pour plus de détails.

+0

Utiliseriez-vous l'API REST (instance de serveur exécutable quelque part accessible) une autre option? – jarandaf

+1

@Turquesa Oui, cela permettrait à plusieurs clients d'écrire, mais il y a certaines choses que vous abandonnez quand vous utilisez l'API REST, comme votre capacité à gérer des transactions. – Nicholas

+0

Ok, alors ce n'est pas une solution valable pour moi car à un certain moment je dois travailler avec l'API Java Neo4j elle-même pour faire des insertions massives et gérer des transactions (la méthode save du repository introduit une énorme surcharge). Merci pour vos commentaires. – jarandaf