加载 csv 合并性能
Load csv merge performance
我在向 neo4j 中批量插入时遇到性能问题。
我有一个包含 40 万行的 csv 文件,它产生大约 350 万行,我使用 LOAD CSV 命令,在 neo4j 上使用最新版本。
我注意到当我使用 Create 语句时,加载大约需要 4 分钟,而且完全没有索引 - 大约 3.5 分钟。
我的第一个问题是,这是否是节点/分钟的正常速率。
现在,我真正的问题是,出于数据完整性的原因,我需要使用合并,而当我使用它时,连同索引一起可能需要 24 小时。
所以还有 2 个问题是:
LOAD CSV 是否推荐用于最佳性能负载,
还有:
我能做些什么来解决这个性能问题?
编辑:
这里是查询:
LOAD CSV WITH HEADERS FROM 'file:///import.csv' AS line FIELDTERMINATOR '|'
MERGE (session :Session { session:line.session })
MERGE (hit :Hit { key:line.key,date_time:line.date_time,session:line.session })
MERGE (user :User { id:line.user_id })
MERGE (session2 :Session2 { session2:line.session2 })
MERGE (country :Country{ name:line.country})
MERGE (tv :TV { name:tv.Model })
MERGE (transfer_protocol :Protocol { name:line.transfer_protocol })
MERGE (os :OS { name:line.os_name ,version:line.os_version, row_key:line.os_name+line.os_version})
示例:session_guid|hit_key_guid|useridguid|session2_guid|松下|TCP|ANDROID|5.0
session,user,session2,country,tv,transfer_protocol 和 os 有唯一约束,hit 有索引
**session1 和 session2 可以有很多次点击(1 到 100,平均 5)
hit_key_guid 每个 csv 行都不同
它 运行 真的很慢 - 相当强大的机器,每 1000 行最多可能需要 10 秒。
也用探查器检查过,没有“Eager”
谢谢
里尔
您应该共享您的数据模型、索引、LOAD CSV 查询以及配置文件输出。您使用的是定期提交吗?
确保您没有 运行 进入 Eager 问题,请参阅此处:
http://neo4j.com/developer/guide-import-csv/#_load_csv_for_medium_sized_datasets
http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/
一般来说,对于数据集,您的 LOAD CSV 大小是可以的,从 1000 万行我可能会切换到 import-tool。
服务器端代码似乎没有正确创建索引,一旦创建,加载性能良好
我在向 neo4j 中批量插入时遇到性能问题。
我有一个包含 40 万行的 csv 文件,它产生大约 350 万行,我使用 LOAD CSV 命令,在 neo4j 上使用最新版本。
我注意到当我使用 Create 语句时,加载大约需要 4 分钟,而且完全没有索引 - 大约 3.5 分钟。
我的第一个问题是,这是否是节点/分钟的正常速率。
现在,我真正的问题是,出于数据完整性的原因,我需要使用合并,而当我使用它时,连同索引一起可能需要 24 小时。
所以还有 2 个问题是:
LOAD CSV 是否推荐用于最佳性能负载,
还有: 我能做些什么来解决这个性能问题?
编辑:
这里是查询:
LOAD CSV WITH HEADERS FROM 'file:///import.csv' AS line FIELDTERMINATOR '|'
MERGE (session :Session { session:line.session })
MERGE (hit :Hit { key:line.key,date_time:line.date_time,session:line.session })
MERGE (user :User { id:line.user_id })
MERGE (session2 :Session2 { session2:line.session2 })
MERGE (country :Country{ name:line.country})
MERGE (tv :TV { name:tv.Model })
MERGE (transfer_protocol :Protocol { name:line.transfer_protocol })
MERGE (os :OS { name:line.os_name ,version:line.os_version, row_key:line.os_name+line.os_version})
示例:session_guid|hit_key_guid|useridguid|session2_guid|松下|TCP|ANDROID|5.0
session,user,session2,country,tv,transfer_protocol 和 os 有唯一约束,hit 有索引
**session1 和 session2 可以有很多次点击(1 到 100,平均 5) hit_key_guid 每个 csv 行都不同
它 运行 真的很慢 - 相当强大的机器,每 1000 行最多可能需要 10 秒。
也用探查器检查过,没有“Eager”
谢谢
里尔
您应该共享您的数据模型、索引、LOAD CSV 查询以及配置文件输出。您使用的是定期提交吗?
确保您没有 运行 进入 Eager 问题,请参阅此处:
http://neo4j.com/developer/guide-import-csv/#_load_csv_for_medium_sized_datasets http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/
一般来说,对于数据集,您的 LOAD CSV 大小是可以的,从 1000 万行我可能会切换到 import-tool。
服务器端代码似乎没有正确创建索引,一旦创建,加载性能良好