【问题标题】:py2neo: minimizing write-time when creating graphpy2neo:创建图形时最小化写入时间
【发布时间】:2013-04-29 18:17:32
【问题描述】:

我会为 neo4j 写一个巨大的图表。使用我的代码只需不到两个月的时间。

我从Kaggle's events recommendation challenge 获取数据,我使用的user_friends.csv 文件看起来像

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

我使用 py2neo batch 工具来生成代码。这是我能做的最好的,还是有其他方法可以显着减少运行时间?

这是代码

#!/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

我也找不到使用高级py2neo 设施创建无向图的方法?我知道cypher 可以通过create (node(1) -[:friends]-node(2)) 之类的方式做到这一点

提前致谢。

【问题讨论】:

    标签: neo4j batch-processing py2neo


    【解决方案1】:

    你应该创建不与Direction.BOTH 的连接。选择一个方向,然后在遍历时忽略使用 Direction.BOTH 它 - 它没有性能影响,但关系方向是确定性的。当您说 a--b 时,Cypher 就是这样做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多