2017-08-11 2 views
2

Je construis un service neo4j ogm en utilisant ogm in java. Je dois me connecter au serveur 2 neo4j de mon service pour gérer le basculement et la réplication. Est-il possible de créer plusieurs sessions chacune vers différents serveurs neo4j à partir d'un service ogm.Plusieurs sessions dans neo4j ogm

+0

Si vous voulez créer deux sessions à deux bases de données différentes pour les synchroniser, je suppose que vous le pouvez. Cependant, vous ne pourrez jamais, puisqu'il s'agira de 2 sessions ou plus, garantir le succès ou l'échec des deux sans mettre en place un système très complexe (c'est ce qu'on appelle un cluster et ce n'est pas un problème facile). Sérieusement ... si ce sont vos exigences et que vous exécutez ceci en production ... considérez un cluster d'édition d'entreprise. Vous allez vous épargner beaucoup de douleur. –

+0

Merci @TomGeudens .. Oui c'est un problème complexe à résoudre. L'entreprise serait vraiment un moyen d'aller .. Mais avant d'aller de l'avant, nous voulons être sûrs de l'investissement à valeur ajoutée d'ajouter un viz-a-viz. Nous misons sur l'infrastructure existante pour résoudre nos problèmes de haute disponibilité jusque-là. Pouvez-vous fournir des indications sur la création de plusieurs sessions dans le service OGM? – Swapnil

+0

Eh bien, je ne suis pas un utilisateur OGM, mais en regardant la documentation (https://neo4j.com/docs/ogm-manual/current/reference/) il semblerait que vous pouvez manuellement (au lieu d'utiliser un fichier de propriétés) configurer des objets de configuration (et cela vous permettrait d'en avoir plusieurs) et les transmettre explicitement à une SessionFactory (vous permettant d'en avoir plusieurs). Vous seriez alors en mesure d'avoir deux sessions faisant la même chose ... à différentes bases de données. Je n'ai pas essayé moi-même, mais ça vaut l'expérience. –

Répondre

1

Vous pouvez, en théorie, créer plusieurs instances SessionFactory, en pointant sur différentes instances de base de données et effectuer chaque opération sur les deux. Utilisez juste la configuration de Java au lieu du fichier de propriété (ceci est vrai pour OGM seulement, SDN ne serait pas si simple).

Il y a plusieurs choses à surveiller:

  • vous ne pouvez pas compter sur le l'auto généré ids car ils pourraient être différentes sur chaque instance de base de données

  • lors de l'écriture à 2 cas , écrire à des premières instances peut (pour diverses raisons - problèmes de réseau, latences, concurrence etc.) réussir et écrire à la deuxième peut échouer, ou vice versa - votre code devrait gérer cela d'une manière ou d'une autre

  • générales - requêtes qui dépendent de l'état de la base de données peut se comporter différemment sur les deux cas en raison d'un d'entre eux ont reçu plus des mises à jour que l'autre (le second est « derrière »)

En raison de toutes ces raisons que je ne serais ne recommande pas du tout une telle solution.

Vous seriez mieux avec soit HA de Neo4j ou un cluster causal. Voir le site Web regarding licensing.

+1

Merci .. J'ai essayé de créer plusieurs sessionfactory mais cela n'a pas fonctionné. J'utilise la version 2.1.3. Le code sur github suggère qu'il n'y a qu'une seule instance de pilote et de configuration dans les composants et sera remplacé par sessionfactory ultérieure. Corrigez-moi si je me trompe. On dirait que la version 3.x.x changera cela. – Swapnil