0

多くのノードと関係を挿入するコードがあります。

from neo4jrestclient.client import GraphDatabase
from neo4jrestclient import client
import psycopg2

db = GraphDatabase("http://127.0.0.1:7474",username="neo4j", password="1234")

conn = psycopg2.connect("\
    dbname='bdTrmmTest'\
    user='postgres'\
    host='127.0.0.1'\
    password='1234'\
    ");

inicio = 0

while(inicio <= 4429640):
    c = conn.cursor()
    c.execute("SELECT p.latitude, p.longitude, h.precipitacaoh, h.datah, h.horah FROM pontos AS p, historico AS h WHERE p.gid = h.gidgeo_fk LIMIT 1640 OFFSET %d"%(inicio))

    sensorlatlong = db.labels.create("LaLo")
    sensorprecip = db.labels.create("Precipitacao")
    sensordata = db.labels.create("Data")
    sensorhora = db.labels.create("Hora")

    records = c.fetchall()

    for i in records:
        s2 = db.nodes.create(precipitacao=i[2])
        sensorprecip.add(s2)
        s5 = db.nodes.create(horah=i[4])
        sensorhora.add(s5)
        s5.relationships.create("REGISTROU",s2)
        q = 'MATCH (s:LaLo) WHERE s.latitude = "%s" AND s.longitude = "%s" RETURN s'%(str(i[0]),str(i[1]))
        results = db.query(q, returns=(client.Node))
        q2 = 'MATCH (s:LaLo)-->(d:Data)-->(h:Hora)-->(p:Precipitacao) WHERE s.latitude = "%s" AND s.longitude = "%s" AND d.datah = "%s" RETURN d'%(str(i[0]), str(i[1]), str(i[3]))
        results1 = db.query(q2, returns=(client.Node))   
        if (len(results) > 0):
            n = results[0].pop()
            if(len(results1) > 0):
                n1 = results1[0].pop()
                n1.relationships.create("AS", s5)
            else:
                s4 = db.nodes.create(datah=i[3])
                sensordata.add(s4)
                n.relationships.create("EM", s4)
                s4.relationships.create("AS",s5)
        else:
            s3 = db.nodes.create(latitude=i[0],longitude=i[1])
            sensorlatlong.add(s3)
            if(len(results1) > 0):
                n1 = results1[0].pop()
                n1.relationships.create("AS", s5)
            else:
                s4 = db.nodes.create(datah=i[3])
                sensordata.add(s4)
                s3.relationships.create("EM", s4)
                s4.relationships.create("AS",s5)

    inicio = inicio+1640

しかし、挿入するのに非常に多くの日数がかかります。このコードにバッチ挿入して挿入時間を短縮するにはどうすればよいですか? この投稿http://jexp.de/blog/2012/10/parallel-batch-inserter-with-neo4j/を読みましたが、Java で書かれています。

4

1 に答える 1