我正在使用 Streamsets 管道从远程上传 .csv 文件的活动文件目录中读取数据,并将这些数据放入 neo4j 数据库中。我使用的步骤是-
- 为 .csv 中的每一行创建一个观察节点
- 创建 csv 节点并在 csv 和记录之间创建关系
- 将从 csv 节点获取的时间戳更新到 burn_in_test 节点,如果它是最新的,则已经从不同的管道在图形数据库中创建
- 从 csv 创建关系以进行测试
- 根据最新时间戳删除过时的关系
现在我正在使用 jdbc 查询执行所有这些操作,并且使用的密码查询是
MERGE (m:OBSERVATION{
SerialNumber: "${record:value('/SerialNumber')}",
Test_Stage: "${record:value('/Test_Stage')}",
CUR: "${record:value('/CUR')}",
VOLT: "${record:value('/VOLT')}",
Rel_Lot: "${record:value('/Rel_Lot')}",
TimestampINT: "${record:value('/TimestampINT')}",
Temp: "${record:value('/Temp')}",
LP: "${record:value('/LP')}",
MON: "${record:value('/MON')}"
})
MERGE (t:CSV{
SerialNumber: "${record:value('/SerialNumber')}",
Test_Stage: "${record:value('/Test_Stage')}",
TimestampINT: "${record:value('/TimestampINT')}"
})
WITH m
MATCH (t:CSV) where t.SerialNumber=m.SerialNumber and t.Test_Stage=m.Test_Stage and t.TimestampINT=m.TimestampINT MERGE (m)-[:PART_OF]->(t)
WITH t, t.TimestampINT AS TimestampINT
MATCH (rl:Burn_In_Test) where rl.SerialNumber=t.SerialNumber and rl.Test_Stage=t.Test_Stage and rl.TimestampINT<TimestampINT
SET rl.TimestampINT=TimestampINT
WITH t
MATCH (rl:Burn_In_Test) where rl.SerialNumber=t.SerialNumber and rl.Test_Stage=t.Test_Stage
MERGE (t)-[:POINTS_TO]->(rl)
WITH rl
MATCH (t:CSV)-[r:POINTS_TO]->(rl) WHERE t.TimestampINT<rl.TimestampINT
DELETE r
现在这个过程非常缓慢,10 条记录大约需要 15 分钟的时间。这可以进一步优化吗?