Hope java api of neo4j will help you. There is a interface called 
batchinserter can load large amount of data quickly. But be careful because 
it is not transactional. You cannot recover from errors.

On Wednesday, October 28, 2015 at 3:55:30 PM UTC-7, Klemens 
Engelbrechtsmüller wrote:
>
> Hello! I use the neo4j java core api and want to update 10 million nodes. 
> I thought it will be better to do it with multithreading but the 
> performance is not that good (35 minutes for setting properties).
>
> To explain: Each node "Person" has at least one relation "POINTSREL" to a 
> "Point" node, which has the property "Points". I want to sum up the points 
> from the "Point" node and set it as property to the "Person" node.
>
>
> Here is my code:
>
>
> Transaction transaction = service.beginTx();ResourceIterator<Node> iterator = 
> service.findNodes(Labels.person);
> transaction.success();
> transaction.close();
> ExecutorService executor = Executors.newFixedThreadPool(5);
> while(iterator.hasNext()){
>     executor.execute(new MyJob(iterator.next()));}
> //wait until all threads are done
> executor.shutdown();
> try {
>     executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);} catch 
> (InterruptedException e) {
>     e.printStackTrace();}
>
>
> And here the runnable class
>
>
> private class MyJob implements Runnable {
>
>     private Node node;
>
>     /* collect useful parameters in the constructor */
>     public MyJob(Node node) {
>         this.node = node;
>     }
>
>     public void run() {
>         Transaction transaction = service.beginTx();
>         Iterable<org.neo4j.graphdb.Relationship> rel = 
> this.node.getRelationships(RelationType.POINTSREL, Direction.OUTGOING);
>
>         double sum = 0;
>         for(org.neo4j.graphdb.Relationship entry : rel){
>             try{
>                 sum += (Double)entry.getEndNode().getProperty("Points");
>             } catch(Exception e){
>                 e.printStackTrace();
>             }
>         }
>         this.node. double sum = 0; for(org.neo4j.graphdb.Relationship entry : 
> rel){ try{ sum += (Double)entry.getEndNode().getProperty("Points"); } 
> catch(Exception e){ e.printStackTrace(); } } this.node.setProperty("Sum", 
> sum);
>
>         transaction.success();
>         transaction.close();
>     }}
>
>
> Is there a better (faster) way to do that?
>
>
> About my setting: AWS Instance with 8 CPUs and 32GB ram
>
>
> neo4j-wrapper.conf
>
>
> # Java Heap Size: by default the Java heap size is dynamically# calculated 
> based on available system resources.# Uncomment these lines to set specific 
> initial and maximum# heap size in MB.
> wrapper.java.initmemory=16000
> wrapper.java.maxmemory=16000
>
>
> neo4j.properties
>
>
> # The type of cache to use for nodes and relationships.
> cache_type=soft
> cache.memory_ratio=30.0
> neostore.nodestore.db.mapped_memory=2G
> neostore.relationshipstore.db.mapped_memory=7G
> neostore.propertystore.db.mapped_memory=2G
> neostore.propertystore.db.strings.mapped_memory=2G
> neostore.propertystore.db.arrays.mapped_memory=512M
>
>
>
> Do you have any ideas? Thank you
>

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to