neo4j到nebula如何做增量导入

请问,如何使用spark writer做从neo4j到nebula的增量导入?目前线上业务使用neo4j,全量导入nebula之后,后面的增量数据如何进行同步?以及如何找到增量数据的起点?

Neo4j导入时有一个配置项是

exec: "match (n:label) return n.neo4j-field-0 as neo4j-field-0, n.neo4j-field-1 as neo4j-field-1 order by (n.neo4j-field-0)"

如果Neo4j中有递增或递减的数据来标识数据的插入顺序,那么可以进行增量导入。
需要自己控制查询语句,在知道每次导入的最大或最小n.neo4j-field-0字段值的情况下,增加where条件来控制本次导入是从哪里开始。

2 个赞

用neo4j内部提供的节点或关系的自增id属性,应该可以 order by id(n)

这个不能保证吧,id()有复用的可能的吧

这块确实有风险,但目前我想这样来规避:
1、在我做全量导入之前,先确保之前的node-id空洞都填满了,通过新写入的数据node-id已经开始自增了来判断没有复用id。
2、我们业务只有在出现脏数据的时候才进行删除,几乎很少删,删除操作可控。这样我在做全量和增量导入的时候,先禁止删除操作。等数据导入完,业务切过来之后,就没问题了。

用order by 增量导入总是个很容易有遗漏的情况,除非去订阅写日志。能不能考虑在写入neo4j前做个双写呢?

1 个赞

可以,这个方案好~但是需要我们的业务配合先修改业务代码。