Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Neo4j性能调整_Python_Batch File_Neo4j_Neo4j.rb - Fatal编程技术网

Python Neo4j性能调整

Python Neo4j性能调整,python,batch-file,neo4j,neo4j.rb,Python,Batch File,Neo4j,Neo4j.rb,我是Neo4j的新手,目前我正试图把交友网站打造成POC。我有4GB的输入文件,看起来像下面的格式 其中包含viewerId(男性/女性),viewerId是他们查看过的id的列表。基于这个历史文件,当任何用户在线时,我需要给出推荐 输入文件: viewerId viewedId 12345 123456,23456,987653 23456 23456,123456,234567 34567 234567,765678,987653 : 对于这项任务,我尝试了以下方法

我是Neo4j的新手,目前我正试图把交友网站打造成POC。我有4GB的输入文件,看起来像下面的格式

其中包含viewerId(男性/女性),viewerId是他们查看过的id的列表。基于这个历史文件,当任何用户在线时,我需要给出推荐

输入文件:

viewerId   viewedId 
12345   123456,23456,987653 
23456   23456,123456,234567 
34567   234567,765678,987653 
:
对于这项任务,我尝试了以下方法

USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:/home/hadoopuser/Neo-input " AS row
FIELDTERMINATOR '\t'
WITH row, split(row.viewedId, ",") AS viewedIds
UNWIND viewedIds AS viewedId
MERGE (p2:Persons2 {viewerId: row.viewerId})
MERGE (c2:Companies2 {viewedId: viewedId})
MERGE (p2)-[:Friends]->(c2)
MERGE (c2)-[:Sees]->(p2);
我的密码查询得到的结果是

MATCH (p2:Persons2)-[r*1..3]->(c2: Companies2)
RETURN p2,r, COLLECT(DISTINCT c2) as friends 
要完成此任务,需要3天时间

我的系统配置:

Ubuntu -14.04  
RAM -24GB
Neo4j配置:
neo4j.特性:

neostore.nodestore.db.mapped_memory=200M
neostore.propertystore.db.mapped_memory=2300M
neostore.propertystore.db.arrays.mapped_memory=5M
neostore.propertystore.db.strings.mapped_memory=3200M
neostore.relationshipstore.db.mapped_memory=800M
neo4j-wrapper.conf

wrapper.java.initmemory=12000
wrapper.java.maxmemory=12000
为了减少时间,我在互联网上搜索并从以下链接获得一个类似批量进口商的想法,

在该链接中,它们有node.csv、rels.csv文件,它们被导入Neo4j。我不知道他们是如何创建node.csv和rels.csv文件的,他们正在使用哪些脚本以及所有这些

有人能给我一个示例脚本来为我的数据创建node.csv和rels.csv文件吗

或者,您能否提供一些建议,以加快导入和检索数据的速度


提前感谢。

您不需要反向关系,只有一个就足够了

对于导入,将堆(neo4j wrapper.conf)配置为12G,将页面缓存(neo4j.properties)配置为10G

试试这个,它应该在几分钟内完成

create constraint on (p:Persons2) assert p.viewerId is unique;
create constraint on (p:Companies2) assert p.viewedId is unique;

USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:/home/hadoopuser/Neo-input " AS row
FIELDTERMINATOR '\t'
MERGE (p2:Persons2 {viewerId: row.viewerId});

USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:/home/hadoopuser/Neo-input " AS row
FIELDTERMINATOR '\t'
FOREACH (viewedId IN split(row.viewedId, ",") |
  MERGE (c2:Companies2 {viewedId: viewedId}));

USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:/home/hadoopuser/Neo-input " AS row
FIELDTERMINATOR '\t'
WITH row, split(row.viewedId, ",") AS viewedIds
MATCH (p2:Persons2 {viewerId: row.viewerId})
UNWIND viewedIds AS viewedId
MATCH (c2:Companies2 {viewedId: viewedId})
MERGE (p2)-[:Friends]->(c2);
对于关系合并,如果您有一些拥有数十万到数百万视图的公司,您可能希望使用以下方法:

USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:/home/hadoopuser/Neo-input " AS row
FIELDTERMINATOR '\t'
WITH row, split(row.viewedId, ",") AS viewedIds
MATCH (p2:Persons2 {viewerId: row.viewerId})
UNWIND viewedIds AS viewedId
MATCH (c2:Companies2 {viewedId: viewedId})
WHERE shortestPath((p2)-[:Friends]->(c2)) IS NULL
CREATE (p2)-[:Friends]->(c2);
关于你的问题? 通过检索所有人员和所有公司之间的交叉产品(最多3个级别),您希望实现什么?这些可能是数以万亿计的路径

通常,你想知道一个单身人士或公司的情况

更新您的查询 例如,对于123456,所有被查看的人这家公司是1234523456,那么这些人查看的公司是什么12345623456987653 23456 2345662234567那么我需要向公司-123456提供建议,因为234566953234567与结果(最终结果)23456697653234567不同

匹配(c:Companies2)(c2:Companies2)
其中c.viewedd=123456
返回不同的c2.viewedd;
对于所有公司来说,这可能有助于:

match (c:Companies2)<-[:Friends]-(p1:Persons2)
with p1, collect(c) as companies
match (p1)-[:Friends]->(c2:Companies2)
return c2.viewedId, extract(c in companies | c.viewedId);
匹配(c:Companies2)(c2:Companies2)
返回c2.viewedId,摘录(公司中为c | c.viewedId);

嗨,迈克尔,谢谢你的回复。我想给每一家公司推荐,比如谁都被浏览过这家公司也被浏览过。例如,对于123456,所有被查看的人该公司是1234523456,那么这些人查看的公司是什么12345623456987653 23456 2345612345623456234567那么我需要向公司-123456提供建议,因为234566953234567与结果不同(最终结果)23456987653234567像这样,我需要为每家公司提供建议。你能给我一些建议吗?嗨,迈克尔,谢谢你的更新。我尝试了您的更新查询来检索数据。对于单个公司Id,我得到结果。但如果我进行整个数据检索,就会得到堆空间错误。我在wrapper.conf文件中将堆大小增加到24Gb。但我还是犯了同样的错误。如何获得每个公司Id的完整推荐数据?你能帮我解决这个问题吗?你是否在:Companies2(viewedd)上创建了索引/约束?更新了进一步的查询示例嗨,Michael,谢谢你更新的查询。我创造了约束,并使用了你所给予的一切。我总共有1575345个ID(个人,查看的公司列表)。一旦我导入了它,它就创建了32,23433个节点和17,79,75432个关系。多达100000个ID我得到了推荐结果ID。如果我超过这个极限,比如说200万或更多,我就没有得到任何结果。但该作业已运行4天以上,并且仍在运行。你能给我一些关于这个问题的建议吗?我需要更改任何Neo4j配置文件吗?
match (c:Companies2)<-[:Friends]-(p1:Persons2)
with p1, collect(c) as companies
match (p1)-[:Friends]->(c2:Companies2)
return c2.viewedId, extract(c in companies | c.viewedId);