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
etlast
à 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?
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
Vous devez vous connecter pour publier un commentaire.
Juste une approche naïve: que faire si vous exécutez un
MERGE
et il suffit de créer ou de mettre à jour?Donné la liste de vos dossiers, de considérer chaque enregistrement sur une carte:
Puis écrivez votre requête dans une représentation paramétrique de la manière:
Description de la requête:
{map}
J'ai exécuter des requêtes dans la console de la page liée ci-dessus avec un
MERGE ON MATCH
et il semble pour mettre à jour les propriétés existantes à de nouvelles valeurs.Les requêtes que j'ai exécuter sont les suivantes:
MERGE
avec carte fonctionnalité, et je pense que cela ressemble à une bonne solution.Il vous manque une parenthèse fermante sur le match 🙂
OriginalL'auteur MarcoL
Je dirais que c'est le meilleur moyen. Selon le Neo4j de l'interface que vous utilisez, vous pourriez écrire une seule requête qui doit tout gérer, sans personnalisé des commandes SET, mais je devine que vous venez de vous simplifier la question et le couvert.
Avez-vous regardé le RESTE basée sur le Chiffre d'interface? Si vous ne l'avez pas, il vous permet d'utiliser des paramètres dans les requêtes, ce qui est assez puissant. Je ne pense pas que la fusion est disponible autrement.
OriginalL'auteur Jim Biard