Neo4j, запрашивающий данные между сеансами - PullRequest
0 голосов
/ 05 июля 2011

У меня проблемы с доступом к ранее созданным базам данных во встроенной 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();}}

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

1 Ответ

1 голос
/ 11 июля 2011

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

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

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

...