0

我在 Web 应用程序中使用 Neo4j 2.2.8 和 Spring Data。我正在使用 xml 来配置我的数据库,例如:

<neo4j:config storeDirectory="S:\Neo4j\mybase" />

但我正在尝试使用批量插入器添加超过 100 万个来自 .txt 文件的节点。读取文件并设置对象列表后,我的批处理代码类似于:

public void batchInserter(List<Objects> objects) {

    BatchInserter inserter = null;
    try {
        inserter = BatchInserters.inserter("S:\\Neo4j\\mybase");            

        Label movimentosLabel = DynamicLabel.label("Movimentos");
        inserter.createDeferredSchemaIndex(movimentosLabel).on("documento").create();

        for (Objects objs : objects{                
            Map<String, Object> properties = new HashMap<>();
            properties.put("documento", objs.getDocumento());
            long movimento = inserter.createNode(properties, movimentosLabel);                

            DynamicRelationshipType relacionamento = DynamicRelationshipType.withName("CONTA_MOVIMENTO");
            inserter.createRelationship(movimento, objs.getConta().getId(), relacionamento, null);
        }
    } finally {
        if (inserter != null) {
            inserter.shutdown();
        }
    }
}

是否可以在“插入器”中的 xml 中配置我的数据库路径?因为使用上述配置 Neo4j 给了我一个关于多个连接的错误。我可以设置一个属性来解决这个多连接的错误吗?有没有人遇到过这个问题并且知道如何解决它?欢迎提出想法。

谢谢大家!

4

1 回答 1

0

你的问题有几个方面:

关于多个连接的错误

如果您将 spring-data 与绑定到特定目录或文件的本地数据库一起使用,请注意您不能让两个 neo4j 进程同时打开同一个数据库。这意味着,如果您决定BatchInserter对同一个文件/目录使用,那么在使用 spring-data DB 的 JVM 运行时,这根本不会发生。我知道没有办法解决这个问题。一种选择是不对文件使用批处理插入器,而是使用 REST API 进行插入。

获取在我的 xml 中配置的数据库的路径

当然,有办法做到这一点,你必须查阅相关文档。我不能给你代码,因为它取决于你在谈论哪个配置文件以及它的结构,但本质上应该有一种方法可以在这里将正确的东西注入你的代码,并从该注入对象的 XML 文件。

但这对您上面提到的“多个连接”问题没有帮助。

总的来说,我认为您的解决方案是:

  1. 不要同时运行您的 spring 应用程序和批处理插入器。
  2. 运行您的 spring 应用程序,但通过 REST API 或其他方法进行插入,因此一开始就不存在多连接问题。
于 2016-01-27T20:54:47.517 回答