如何在批量插入器方法中获取我的 Neo4j <config storeDirectory=""> 的路径?
How can I get the path of my Neo4j <config storeDirectory=""> in a Batch Inserter method?
我在 Web 应用程序中使用 Neo4j 2.2.8 和 Spring 数据。我正在使用 xml 配置我的数据库,例如:
<neo4j:config storeDirectory="S:\Neo4j\mybase" />
但我正在尝试使用批量插入器添加来自 .txt 文件的超过 100 万个节点。读取文件并设置对象列表后,我的批处理代码如下:
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();
}
}
}
是否可以在 "inserter" 中获取我在 xml 中配置的数据库路径?因为使用上述配置 Neo4j 给我一个关于多个连接的错误。我可以设置一个属性来解决这个多连接的错误吗?有没有人遇到过这个问题并且知道如何解决?欢迎提出想法。
谢谢大家!
你的问题有几个部分:
Error About Multiple Connections
如果您将 spring-data 与绑定到特定目录或文件的本地数据库一起使用,请注意您不能让两个 neo4j 进程同时打开同一个数据库。这意味着如果您决定对同一个 file/directory 使用 BatchInserter
,而使用 spring-data 数据库的 JVM 是 运行ning,则根本不会发生这种情况。我不知道有什么方法可以解决这个问题。一种选择是不对文件使用批量插入器,而是使用 REST API 进行插入。
get the path of my database configured in my xml
当然,有办法做到这一点,您必须 consult the relevant documentation。我无法为您提供代码,因为它取决于您正在谈论的配置文件及其结构,但本质上应该有一种方法可以在此处将正确的内容注入您的代码,并阅读 属性 从 XML 文件中提取对象。
但考虑到您上面提到的 "Multiple connections" 问题,这对您没有帮助。
大体上,我认为您的解决方案是:
- 不要 运行 您的 spring 应用和批量插入器同时使用。
- 运行 您的 spring 应用程序,但通过 REST API 或其他方法进行插入,因此不存在多重连接问题。
我在 Web 应用程序中使用 Neo4j 2.2.8 和 Spring 数据。我正在使用 xml 配置我的数据库,例如:
<neo4j:config storeDirectory="S:\Neo4j\mybase" />
但我正在尝试使用批量插入器添加来自 .txt 文件的超过 100 万个节点。读取文件并设置对象列表后,我的批处理代码如下:
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();
}
}
}
是否可以在 "inserter" 中获取我在 xml 中配置的数据库路径?因为使用上述配置 Neo4j 给我一个关于多个连接的错误。我可以设置一个属性来解决这个多连接的错误吗?有没有人遇到过这个问题并且知道如何解决?欢迎提出想法。
谢谢大家!
你的问题有几个部分:
Error About Multiple Connections
如果您将 spring-data 与绑定到特定目录或文件的本地数据库一起使用,请注意您不能让两个 neo4j 进程同时打开同一个数据库。这意味着如果您决定对同一个 file/directory 使用 BatchInserter
,而使用 spring-data 数据库的 JVM 是 运行ning,则根本不会发生这种情况。我不知道有什么方法可以解决这个问题。一种选择是不对文件使用批量插入器,而是使用 REST API 进行插入。
get the path of my database configured in my xml
当然,有办法做到这一点,您必须 consult the relevant documentation。我无法为您提供代码,因为它取决于您正在谈论的配置文件及其结构,但本质上应该有一种方法可以在此处将正确的内容注入您的代码,并阅读 属性 从 XML 文件中提取对象。
但考虑到您上面提到的 "Multiple connections" 问题,这对您没有帮助。
大体上,我认为您的解决方案是:
- 不要 运行 您的 spring 应用和批量插入器同时使用。
- 运行 您的 spring 应用程序,但通过 REST API 或其他方法进行插入,因此不存在多重连接问题。