2015-06-16 6 views
5

मैं कई नोड्स और एक सूची में किनारों की है। वर्तमान में मैं सूची के माध्यम से लूपिंग कर रहा हूं और प्रत्येक नोड को एक क्वेरी के साथ डालने वाला हूं जो बहुत धीमा है। मैं neo4jclient का उपयोग कर बैच डालने कैसे करूँ?बैच डालने नोड्स और संबंधों neo4jclient

नोड वस्तु: नोड्स की सूची डालने के लिए

public static void addNode(GraphClient client, myNode node, string nodeName) 
{ 
    client.Cypher 
     .Create("(" + nodeName + ":Node {node})") 
     .WithParams(new { node }) 
     .ExecuteWithoutResults(); 
} 

वर्तमान विधि:

List<myNode> nodeList; 
foreach(var elem in nodeList) 
    addNode(client, elem, "foo"); 
+0

अन्य जवाब यहाँ के साथ इसी तरह प्रश्न: https://stackoverflow.com/q/47360571/237509 – JOG

उत्तर

5

के बजाय सिर्फ एक नोड गुजर

public class myNode 
{ 
    public int id { get; set; } 
    public int floor { get; set; } 
    public double x { get; set; } 
    public double y { get; set; } 
} 

एक नोड डालने के लिए वर्तमान विधि अपने साइफर में, आप संग्रह में पास कर सकते हैं। Neo4j मैनुअल

साइफर नक्शे की एक सरणी प्रदान करके के अनुसार, यह प्रत्येक नक्शे

के लिए एक नोड पैदा करेगा देखें अनुभाग उनके गुणोंNeo4j Manual v2.2.2 में के लिए एक पैरामीटर के साथ कई नोड्स बनाएं ।

इसलिए अपने सी # कोड सरलीकृत हो जाएगा और बेहतर प्रदर्शन करना चाहिए।

public static void AddNodes(GraphClient client, List<MyNode> nodes) 
{ 
    client.Cypher 
     .Create("(n:Node {nodes})") 
     .WithParams(new { nodes }) 
     .ExecuteWithoutResults(); 
} 

आशा है कि मदद करता है।

+0

मैं सिर्फ सवाल पोस्टिंग के बाद जिज्ञासा से बाहर इस कोशिश की और यह मेरे आश्चर्य करने के लिए, यह काम किया! यह जानना अच्छा है कि यह समाधान है। हालांकि एक मुद्दा है, मैं इस नोड के बीच संबंधों के बैच को जोड़ने के तरीके को समझने में असमर्थ हूं। मैंने एक बार में सभी नोड्स और रिश्तों को जोड़ने के लिए क्वेरी स्ट्रिंग का निर्माण किया, लेकिन यह ओआरएम का उपयोग करने के कई उद्देश्यों को हरा देता है। – codeln

+0

@ कोडेल खुश हैं कि आपको एक ही समाधान मिल गया है। क्या यह पूछना ठीक होगा कि क्या आप इसे दूसरों के लिए स्पष्ट करने के उत्तर के रूप में चिह्नित कर सकते हैं? आपके अन्य मुद्दे के रूप में - मैं कुछ और विवरण के साथ एक और सवाल शुरू करूंगा। अगर मैं मदद कर सकता हूं तो मैं करूँगा। – ceej

+0

: डी सुनिश्चित करें, मदद के लिए धन्यवाद। यदि आप रिश्ते के लिए समाधान ढूंढते हैं तो कृपया मुझे वापस आएं (प्रश्न नोड्स और रिलेशनशिप के बैच डालने के लिए पूछता है) – codeln

1

पूर्णता के लिए निम्नलिखित एक उदाहरण है जिसे थोक लोड रिश्तों और neo4jclient का उपयोग करके उनके गुणों में अनुकूलित किया जा सकता है।

public void CreateRelationships(List<RelationshipCommon> relationships) 
{ 
      graphClient.Cypher 
      .Unwind(relationships, "relationship") 
      .Match("(grant:GRANT)", "(target:THEME)") 
      .Where("grant.node_id = relationship.SourceEntityId and target.node_id = relationship.TargetEntityId") 
      .Create("grant-[r:IS_IN_THEME]->target") 
      .Set("r.relationship_id = relationship.RelationshipId") 
      .Set("r.grant_proportional_value = relationship.ProportionalValue") 
      .ExecuteWithoutResults(); 
} 

संबंध रिलेशनशिप कॉमन प्रकार की एक सूची संग्रह हैं। रिलेशनशिप कॉमन में निम्नलिखित संरचना

public class RelationshipCommon 
{ 
    public string SourceEntityId { get; set; } 
    public string TargetEntityId { get; set; } 
    public string RelationshipId { get; set; } 
    public long ProportionalValue { get; set; } 
} 

मेरे विकास पर वीएम इस कोड ने 6000 में 54000 रिश्तों को लोड किया।

संबंधित मुद्दे