2013-04-29 1 views
0

나는 거대한 그래프를 neo4j에 씁니다. 내 코드를 사용하는 데 2 ​​개월이 약간 걸릴 것입니다. py2neo : 그래프를 만들 때 쓰기 시간 최소화

는 내가 코드를 생성하는 py2neo batch 시설을 사용

user,friends 
3197468391,1346449342 3873244116 4226080662, ... 

처럼 Kaggle's events recommendation challenge에서 나는 외모를 사용하고있는 user_friends.csv 파일을 데이터를했다. 내가 할 수있는 최선인가, 아니면 실행 시간을 상당히 줄이는 또 다른 방법인가? 여기

는의는 I가 높은 수준을 py2neo 기능을 사용하여 무향 그래프를 만들 수있는 방법을 찾을 수 없습니다 또한

#!/usr/bin/env python 

from __future__ import division 
from time import time 
import sqlite3 
from py2neo import neo4j 

graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/") 
batch = neo4j.WriteBatch(graph) 

people = graph.get_or_create_index(neo4j.Node,"people") 
friends = graph.get_or_create_index(neo4j.Relationship,"friends") 

con = sqlite3.connect("test.db") 
c = con.cursor() 
c.execute("SELECT user, friends FROM user_friends LIMIT 2;") 

t=time() 
for u_f in c: 
    u_node = graph.get_or_create_indexed_node("people",'name',u_f[0]) 

    for f in u_f[1].split(" "): 
     f_node = graph.get_or_create_indexed_node("people",'name', f) 

     if not f_node.is_related_to(u_node, neo4j.Direction.BOTH,"friends"): 
      batch.create((u_node,'friends',f_node)) 

    batch.submit() 
print time()-t 

코드? 나도 알아 cypher 같은 모양으로 할 수 create (node(1) -[:friends]-node(2))

미리 감사드립니다.

답변

1

Direction.BOTH이 아닌 연결을 만들어야합니다. 한 방향을 선택한 다음 이동하는 경우 Direction.BOTH을 사용하여 무시합니다. 성능에 영향은 없지만 관계 방향은 결정적입니다. Cypher는 정확히 당신이 a--b라고 말할 때 그것을합니다.

관련 문제