Удаленный узел снова появляется в Neo4j - PullRequest
1 голос
/ 02 декабря 2011

Я только начинаю с Neo4j и запускаю примеры типов "Hello World".

Я создаю новую базу данных и распечатываю количество узлов, которое равно 1 (поскольку при создании базы данных создается узел по умолчанию).

Я создаю узел и добавляю его в график. График сообщает, что теперь есть 2 узла - ОК.

Затем я снова удаляю узел, и график сообщает, что есть 1 узел - ОК.

Затем я закрыл базу данных.

Однако , когда я снова запускаю тот же код (без удаления файлов базы данных). теперь он сообщает, что изначально есть 2 узла. Вместо 1-2-1 я получаю 2-3-2. Это происходит только один раз - после первого запуска всегда выдается 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

Второй (и последующие) прогоны:

STARTED
Node count = 2
Node count = 3
Node count = 2

1 Ответ

2 голосов
/ 03 декабря 2011

Ваш код верен.

Но getNumberOfIdsInUse() - это не количество узлов (или отношений), а количество выделенных идентификаторов, которые могут иметь неиспользованные интервалы между ними.Повторное использование идентификатора не происходит автоматически, но должно быть включено.

Можете ли вы попытаться подсчитать узлы, используя graphDb.getAllNodes() и увеличив счетчик, если он по-прежнему сообщает неправильные числа?

...