1

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
4

1 に答える 1

2

あなたのコードは正しいです。

ただしgetNumberOfIdsInUse()、ノード (または関係) の数ではなく、間に未使用の間隔がある可能性のある割り当てられた ID の数です。ID の再利用は自動的には行われませんが、有効にする必要があります。

graphDb.getAllNodes()それでも間違った数が報告される場合は、カウンターを使用してインクリメントしてノードを数えることができますか?

于 2011-12-03T00:23:34.030 に答える