りんごの量がメイン メモリに収まる場合は、次の操作を実行できます。
apples = [] as Set
g.id(T.v)[[type:'apple']].each{apples.add(it)}
apple = g.addVertex()
apples.each{it.map.each{k,v -> apple[k] = v}
apples.each{it.outE.each{g.addEdge(apple, it.inVertex, it.label)}
apples.each{it.inE.each{g.addEdge(apple, it.outVertex, it.label)}
apples.each{g.removeVertex(it)}
各行は次のことを行います。
- リンゴのメモリ内セットを作成します。
- マージするグラフ内のすべてのリンゴを見つけます (データ モデルがわからないため、これが最善の仮定です)。
- 新しいリンゴ頂点 (マージ頂点) を作成します。
- リンゴごとに、新しいリンゴの頂点のそれぞれのプロパティを設定します (古いリンゴのプロパティを上書きする場合があります)。
- 発信エッジごとに、マージ アップルから同様のエッジを追加します。
- 入力エッジごとに、同様のエッジをマージ アップルに追加します。
- すべてのりんごを取り除きます (新しいマージりんごを除く)。
これを行うときはトランザクションに注意してください:
https://github.com/tinkerpop/blueprints/wiki/Graph-Transactions