Neo4j写道:瓶颈

时间:2018-07-19 16:51:43

标签: neo4j parallel-processing database-performance

我已经定义了一个Python函数,可将Twitter用户的所有关注者(5000个节点及其各自的边缘)成批写入到Neo4j v3.4.0数据库中。添加的每个节点以及数据库中已经存在的每个节点都将连接到“中央”(后继)用户,从而在本地形成星形拓扑。

def __save_user_followers(self, user_id, followers):
    # Add a batch of followers to the db
    present_time = math.floor(time.time())
    query = "WITH %s AS followers " % followers
    query += "MATCH (u:USER:QUEUED{uid:'%s'}) " % user_id
    query += "FOREACH (follower IN followers | "
    query += "MERGE (f:USER{uid: follower}) "
    query += "ON CREATE SET f.timestamp=%s, f:PRIORITY2 " % present_time
    query += "MERGE (u)<-[:FOLLOWS]-(f)) "
    self.__run_query(query)

我的问题与写入速度有关,因为此功能的性能似乎很差-尽管已为:USER + uid设置了UNIQUE CONSTRAINT。因为这是我的代码的瓶颈,有什么我没看到的或者我如何提高这些写入的性能?我还尝试了并行执行许多写过程来分配写负载,但是有许多死锁使程序进入非常混乱的状态,甚至最终中断了。关于如何(分批)优化查询和/或可能并行化查询的任何建议?

谢谢!

0 个答案:

没有答案