一段时间以来,我尝试在py2neo中创建很多注释。这些节点基于tweet实时流,我想在这里绘制tweet、tweet的相关信息以及tweets和其他节点之间的关系(例如re tweets、用户提及和标签)。在
我所尝试的是,创建一个大型cypher查询,使用MERGE创建/获取用户和tweet的ID,并将它们链接起来。我的想法是有以下节点:
以及需要查找的链接:
写了很多东西,我做了这样的事情:
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)。在
如果没有对“很多”和“缓慢”的量化,很难知道该把你指向哪个方向。这些都是非常主观的术语。在
一般来说,您需要确保通过大型Cypher事务或(遗留)批处理机制,将多个服务器交互组合到单个请求中。如果巧妙地使用REST接口,当然可以获得相当多的性能。在
除此之外,您当然可以看看服务器端的东西:可能是一个Java扩展,或者对于初始加载,是一个批量导入工具。在
相关问题 更多 >
编程相关推荐