使用Py2n在Neo4j中创建多个节点

2024-05-13 00:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

一段时间以来,我尝试在py2neo中创建很多注释。这些节点基于tweet实时流,我想在这里绘制tweet、tweet的相关信息以及tweets和其他节点之间的关系(例如re tweets、用户提及和标签)。在

我所尝试的是,创建一个大型cypher查询,使用MERGE创建/获取用户和tweet的ID,并将它们链接起来。我的想法是有以下节点:

  • 用户节点
  • 推特
  • 标签
  • 位置(用于tweet)
  • 位置(用户)
  • 语言
  • 性别
  • 时区

以及需要查找的链接:

  • 提到
  • 转发

写了很多东西,我做了这样的事情:

statement = "MERGE (tUser:TwitterUser {id:{tuID}}) " \
            "ON CREATE SET " \
            "tUser.displayName = {tdNAME}, " \
            "tUser.summary = {tdSummary}, " \
            "tUser.link = {tdLink}, " \
            "tUser.preferredUsername = {tdPreferredUsername}, " \
            "tUser.account_created = {tdAccount_created}, " \
            "tUser.last_lookup = 'Newer' " \
            "" \
            "MERGE (user:Person {name:{userName}})-[:twitter_acct]->(tUser) " \
            "" \
            "MERGE (gender:Gender {gender: {GENDER}})" \
            "MERGE (user)-[:has_gender]->(gender) " \
            "" \
            "MERGE (user)-[:tweeted]->(tweet:Tweet {id:{tID}}) " \
            "ON CREATE SET " \
            "tweet.type = {tType}, " \
            "tweet.link = {tLink}, " \
            "tweet.body = {tBody}, " \
            "tweet.postedTime = {tPostedTime} " \
            "" \
            "MERGE (timezone:TimeZone {name:{timeZoneName}}) " \
            "MERGE (user)-[:has_time]->(timezone)" \
            "" \
            "MERGE (user)-[:use]->(generator:Generator {name: {generator}}) " \
            "ON CREATE SET " \
            "generator.link = {generatorLink} " \
            "" \
            "MERGE (tweet)-[:tweeted_in]->(tLocation:Location {name: {tLocationName}}) " \
            "MERGE (tLocation)-[:in]->(tCountry:Country {name: {tCountryName}}) " \
            "" \
            "MERGE (user)-[:lives_in]->(uLocation:Location {name: {uLocationName}}) " \
            "" \
            "RETURN user"

问题是:当我试图在我的Neo4J数据库中插入tweet时,它无法跟上,而且,当我试图用我制作的一组数据来完成时,它仍然执行得很慢。我试过用批处理,但还是慢下来。在

解决办法是少做点什么,买一台更好的机器,还是。。?使用Schema(以及如何在重启服务时获得正确的ID,例如usernode)。在


Tags: 用户namein节点oncreatelinkmerge
1条回答
网友
1楼 · 发布于 2024-05-13 00:30:49

如果没有对“很多”和“缓慢”的量化,很难知道该把你指向哪个方向。这些都是非常主观的术语。在

一般来说,您需要确保通过大型Cypher事务或(遗留)批处理机制,将多个服务器交互组合到单个请求中。如果巧妙地使用REST接口,当然可以获得相当多的性能。在

除此之外,您当然可以看看服务器端的东西:可能是一个Java扩展,或者对于初始加载,是一个批量导入工具。在

相关问题 更多 >