neo4j monogramme mise à jour nœud existant ou créer un nouveau nœud

J'ai un graphique avec environ neuf millions de nœuds, et douze millions de relations. Pour chacun des nœuds du graphe il existe un sous-ensemble de propriétés pour chaque nœud qui constitue une identité unique pour le nœud, par l'Étiquette. Le graphique est mis à jour par diverses sources de données qui augmentent les nœuds existants à l'intérieur du graphique, ou en créer de nouveaux nœuds si les nœuds n'existent pas. Je ne veux pas créer de doublons en fonction de l'ensemble unique de propriétés dans le graphique lors de la mise à jour.

Par exemple, j'ai des Gens dans le graphique, et de sa singularité est déterminée par leur nom et prénom. Le code suivant est de créer deux distinctes personnes:

CREATE (p:Person{first:"barry",last:"smith",height:187});
CREATE (p:Person{first:"fred",last:"jones",language:"welsh"});

Plus tard, à partir de l'une des sources de données-je recevoir les données suivantes dossiers (un par ligne):

first: "fred", last: "lake", height: 201
first: "barry", last: "smith", language: "english"
first: "fred", last: "jones", language: "welsh", height: 188
first: "fred", last: "jones", eyes: "brown"
first: "barry", last: "smith"

Après la mise à jour graphique je veux avoir les nœuds suivants:

(:Person{first:"fred",last:"jones",language:"welsh",height:"188,eyes:"brown"})
(:Person{first:"barry",last:"smith",language"english",height:187})
(:Person{first:"fred",last"lake",height:201})

Je suis en train de formuler une MERGE requête qui peut faire ce genre de mise à jour. Je suis venu avec l'approche suivante:

  • Commencer avec un MERGE qui utilise l'unicité propriétés (first et last à partir de l'exemple) pour trouver ou créer le nœud initial;
  • Puis faire un SET contenant chacune des propriétés définies dans l'entrants enregistrement.

Donc, pour les trois exemples de dossiers donné ci-dessus:

MERGE (p:Person{first:"fred",last:"lake"}) SET p.height = 201;
MERGE (p:Person{first:"barry",last:"smith"}) SET p.language = "english";
MERGE (p:Person{first:"fred",last:"jones"}) SET p.language = "welsh", p.height = 188;
MERGE (p:Person{first:"fred",last:"jones"}) SET p.eyes = "brown";
MERGE (p:Person{first:"barry",last:"smith"});

Je l'ai essayé et il fonctionne, mais je suis curieux de savoir si c'est le meilleur moyen (le plus efficace...) afin d'assurer l'unicité dans les nœuds basé sur un ensemble de propriétés, et de permettre à d'autres d'ajouter des informations (ou pas) comme les mises à jour viennent au fil du temps?

Avez-vous une liste de propriétés ou peuvent-ils être quelque chose?
Merci pour votre réponse. Il est très probable que l'ensemble des propriétés est connu, mais peut changer au fil du temps. Comment cette connaissance affecter la mise en œuvre (sachant que le jeu ou qui ne connaissent pas le jeu), pensez-vous?
"Fred Jones" ne devrait jamais parler Gallois. Il devrait être nommé Llwyr Culhwch ou quelque chose comme ça.

OriginalL'auteur s5b | 2014-08-07