Neo4j запрашивает данные между сеансами

У меня проблемы с доступом к ранее созданным базам данных во встроенной Java-версии Neo4j. Что я хотел бы сделать, так это открыть GraphDatabaseService, добавить несколько миллионов отношений (без использования BatchInserter, только транзакции), а затем закрыть последнюю транзакцию и соединение. Это будет выглядеть примерно так:

public class startNeo4j{ …
  public static void main (String[] args) {
    GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "data/test/base" );
    Transaction tx = graphDb.beginTx();
    IndexManager index = graphDb.index();
    Index<Node> userIds = index.forNodes("userIds");
    RelationshipIndex follows = index.forRelationships("follows");

[здесь я ввожу очень большой файл csv (несколько миллионов отношений), а также даю индексы отношений и userId]

    tx.finish();
    graphDb.shutdown(); }}

Затем мне нужно иметь возможность открыть новый GraphDatabaseService и получить доступ ко всем данным, которые я только что вставил. Я проверил список Neo4j, и они подтвердили, что это возможно, но не предоставили никаких подробностей.

Я не хочу воссоздавать индекс, но когда я пытаюсь просто открыть его снова, я получаю сообщение об ошибке, когда индекс (userIds сверху) «не может быть разрешен». В идеале, если бы у кого-то был план того, как будет выглядеть второй набор кода, это было бы здорово. Мой нефункциональный выглядит так:

public class examineNeo4j{
  public static void main (String[] args){
    GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "data/test/base" );
    Transaction tx = graphDb.beginTx();
    IndexHits<Node> hits_final = userIds.get("userId","12");
    Node testthis = hits_final.getSingle();

[или другой запрос, который я хочу выполнить]

    tx.finish();
    graphDb.shutdown();}}

Любая помощь будет принята с благодарностью!


person ten    schedule 05.07.2011    source источник


Ответы (1)


Вы также должны сделать tx.success(); по умолчанию tx находится в состоянии «отката».

Transaction tx = graphDb.beginTx();
try {
  // do your work here
  tx.success();
} finally {
  tx.finish();
}
graphdb.shutdown();

Также имейте в виду, что размер вашего tx не должен превышать 10 000 операций. Поэтому, пожалуйста, сделайте пакетную транзакцию с таким размером блока.

person Michael Hunger    schedule 10.07.2011