現在、アプリケーションには 2 つの Neo4j データベースがあります。Spring Data Neo4j (SDN) を使用しています。
最初のデータベースは STAGING データベースで、もう 1 つは LIVE データベースです。これは、バージョン管理の目的と、ユーザーが LIVE データベースを台無しにするのを防ぐためです。
約 50.000 のノードと 150.000 の関係があります。私たちの STAGING エリアは、少数のユーザーのサブセットを対象としており、STAGING でのみ CRUD 操作を実行できます。ユーザーが STAGING でデータをファイナライズ/検証した後、データセットを LIVE データベースにプッシュします。LIVE は READ ONLY データベースのみを対象とし、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 クエリを一度に 2 つのデータベースで実行できるように、データベース リンクの概念があるかどうかをさらに調査したいと思います。
どんなアイデアでも大歓迎です。
ありがとう、ぐなわん