Neo4j を使い始めたばかりで、「Hello World」タイプの例を実行しています。
新しいデータベースを作成し、ノードの数を出力します。これは 1 です (データベースの作成時にデフォルト ノードがあるように見えるため)。
ノードを作成してグラフに追加します。グラフは、現在 2 つのノードがあることを報告しています - OK。
次にノードを再度削除すると、グラフはノードが 1 つあることを報告します - OK。
次に、データベースをシャットダウンしました。
ただし、同じコードを再度実行すると(データベースファイルを削除せずに)。最初は 2 つのノードがあると報告されるようになりました。1-2-1 ではなく、2-3-2 になります。これは 1 回だけ発生します。最初の実行後は常に 2-3-2 と報告されます。
削除したノードが再表示されるのはなぜですか?
以下のコード:
package com.foo.neo.example;
import org.neo4j.graphdb.*;
import org.neo4j.kernel.EmbeddedGraphDatabase;
public class Deleting
{
static GraphDatabaseService graphDb;
public static void main(String[] args)
{
graphDb = new EmbeddedGraphDatabase("data");
System.out.println("STARTED");
printNodeCount();
Node firstNode;
Transaction tx = graphDb.beginTx();
try
{
firstNode = graphDb.createNode();
tx.success();
}
finally
{
tx.finish();
}
printNodeCount();
// delete the data again
tx = graphDb.beginTx();
try
{
firstNode.delete();
tx.success();
}
finally
{
tx.finish();
}
printNodeCount();
graphDb.shutdown();
}
private static void printNodeCount()
{
long nodecount = ((EmbeddedGraphDatabase) graphDb).getConfig()
.getGraphDbModule().getNodeManager()
.getNumberOfIdsInUse(Node.class);
System.out.println("Node count = " + nodecount);
}
}
そして出力:
STARTED
Node count = 1
Node count = 2
Node count = 1
2 回目 (およびそれ以降) の実行:
STARTED
Node count = 2
Node count = 3
Node count = 2