即时加载85K行的文件--19M, 服务器有2个内核,14GB RAM,运行centos 7.1和oracle JDK 8 使用以下服务器配置可以 5-10分钟:
dbms.pagecache.memory=8g
cypher_parser_version=2.0
wrapper.java.initmemory=4096
wrapper.java.maxmemory=4096
安装在/ etc / fstab中的磁盘:
UUID=fc21456b-afab-4ff0-9ead-fdb31c14151a /mnt/neodata
ext4 defaults,noatime,barrier=0 1 2
将此添加到/etc/security/limits.conf:
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 40000
* hard nofile 40000
将此添加到/etc/pam.d/su
session required pam_limits.so
将此添加到/etc/sysctl.conf:
vm.dirty_background_ratio = 50
vm.dirty_ratio = 80
通过运行禁用日记:
sudo e2fsck /dev/sdc1
sudo tune2fs /dev/sdc1
sudo tune2fs -o journal_data_writeback /dev/sdc1
sudo tune2fs -O ^has_journal /dev/sdc1
sudo e2fsck -f /dev/sdc1
sudo dumpe2fs /dev/sdc1
除此之外, 在运行一个分析器时,我得到了很多“Eagers”,我真的不明白为什么:
PROFILE LOAD CSV WITH HEADERS FROM 'file:///home/csv10.csv' AS line
FIELDTERMINATOR '|'
WITH line limit 0
MERGE (session :Session { wz_session:line.wz_session })
MERGE (page :Page { page_key:line.domain+line.page })
ON CREATE SET page.name=line.page, page.domain=line.domain,
page.protocol=line.protocol,page.file=line.file
Compiler CYPHER 2.3
Planner RULE
Runtime INTERPRETED
+---------------+------+---------+---------------------+--------------------------------------------------------+
| Operator | Rows | DB Hits | Identifiers | Other |
+---------------+------+---------+---------------------+--------------------------------------------------------+
| +EmptyResult | 0 | 0 | | |
| | +------+---------+---------------------+--------------------------------------------------------+
| +UpdateGraph | 9 | 9 | line, page, session | MergeNode; Add(line.domain,line.page); :Page(page_key) |
| | +------+---------+---------------------+--------------------------------------------------------+
| +Eager | 9 | 0 | line, session | |
| | +------+---------+---------------------+--------------------------------------------------------+
| +UpdateGraph | 9 | 9 | line, session | MergeNode; line.wz_session; :Session(wz_session) |
| | +------+---------+---------------------+--------------------------------------------------------+
| +ColumnFilter | 9 | 0 | line | keep columns line |
| | +------+---------+---------------------+--------------------------------------------------------+
| +Filter | 9 | 0 | anon[181], line | anon[181] |
| | +------+---------+---------------------+--------------------------------------------------------+
| +Extract | 9 | 0 | anon[181], line | anon[181] |
| | +------+---------+---------------------+--------------------------------------------------------+
| +LoadCSV | 9 | 0 | line | |
+---------------+------+---------+---------------------+--------------------------------------------------------+
所有标签和属性都有索引/约束 谢谢您的帮助 利奥尔
答案 0 :(得分:3)
He Lior,
我们试图在这里解释Eager Loading:
Marks的原创博文在这里:http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/
Rik试图用更简单的术语解释它:
http://blog.bruggen.com/2015/07/loading-belgian-corporate-registry-into_20.html
我之前已经读过这个,但是直到Andres再次向我解释之后才真正理解它:在所有正常操作中,Cypher懒洋洋地加载数据。请参阅手册中的此页面 - 它基本上只是在执行操作时尽可能少地加载到内存中。这种懒惰通常是一件非常好的事情。但它也会给你带来很多麻烦 - 正如迈克尔向我解释的那样:
" Cypher试图履行不同业务的合同 在声明中不会相互影响。否则你可能会 非确定性行为或无限循环。想象一下 声明如下:
MATCH (n:Foo) WHERE n.value > 100 CREATE (m:Foo {m.value = n.value + 100});
如果这两个陈述不会 隔离,然后CREATE生成的每个节点都会导致MATCH 再次匹配等无限循环。这就是为什么在这种情况下,Cypher 急切地将所有MATCH语句运行到用尽所有 中间结果被累积并保存(在内存中)。
一般 大多数操作都不是问题,因为我们大多只匹配少数几个 最多十万元素
使用LOAD CSV进行数据导入, 但是,此操作将拉入CSV的所有行(其中 可能是数百万),急切地执行所有操作(可能是 数百万创建/合并/匹配)并保持中间 结果在内存中提供下一行操作。
这也是 有效地禁用PERIODIC COMMIT,因为当我们到达结束时 语句执行所有创建操作都已经有了 发生了,巨大的tx状态已经累积。"
这就是我的加载csv查询的内容。 MATCH / MERGE / CREATE导致将急切的管道添加到执行计划中,并且它有效地禁用了我的操作的批处理"使用定期提交"。显然,即使看似简单的LOAD CSV语句,也有不少用户遇到此问题。通常你可以避免它,但有时你不能。"