目前我们的应用程序中有 2 个 Neo4j 数据库。我们使用 Spring Data Neo4j (SDN)。
第一个数据库是我们的 STAGING 数据库,另一个是 LIVE 数据库。这更多是为了版本控制和防止用户弄乱 LIVE 数据库。
我们有大约 50.000 个节点和 150.000 个关系。我们的 STAGING 区域适用于一小部分用户,我们只允许在 STAGING 中进行 CRUD 操作。在用户完成/验证 STAGING 中的数据后,我们会将数据集推送到 LIVE 数据库。LIVE 仅适用于只读数据库,仅在同步过程中允许使用 CRUD。
我想知道在两个数据库之间同步数据的最佳方式是什么,并且同步应该允许增量更新。
我尝试使用 Cypher Query + SDN 逐个节点进行同步,但遇到了障碍,需要的时间太长。
@Query("START n=node:ItemCode('code:*') "
+ "WHERE has(n.status) AND n.status = 'ACTIVE') "
+ "RETURN n");
public Iterable<Item> getAllActiveItems();
在执行从 STAGING 到 LIVE db 的同步过程的SyncService类上:
Iterable<Item> items = stagingRepo.getAllActiveItems();
for(Item item:items) {
Item item = liveRepo.findItem(item.getCode());
if(item == null) {
//create item
} else {
//update item
}
}
[更新] 根据Peter Neubauer的回答,我想进一步探索是否存在数据库链接概念,以便 Cypher 查询可以一次在两个数据库上运行。
欢迎任何想法。
谢谢,古纳万