【问题标题】:Batch insertion of shapefiles in Neo4J在 Neo4J 中批量插入 shapefile
【发布时间】:2014-07-25 22:55:47
【问题描述】:

目前我正在使用 Neo4j + Neo4j Spatial,我想问你是否有办法将 shapefile 批量导入数据库,就像他们处理 OSM 文件一样,原因是因为我正在处理一个巨大的数据集(100GB+),当使用标准 ShapeFileImporter 类插入数十万个几何图形时,层+索引肯定会减慢我的速度

我的问题是:有没有办法批量导入 shapefile,插入后,我们执行 database.reIndex() 的方式与处理 .osm 文件的方式相同??

我正在使用 neo4j 2.1.2 和 neo4j-spatial 0.13

ps.:我还尝试使用以下设置我的 GraphDatabaseService:

.setConfig(GraphDatabaseSettings.node_auto_indexing, "false")
.setConfig(GraphDatabaseSettings.relationship_auto_indexing,"false")

但似乎 ShapeFileImporter 无论如何都会创建和使用它们。

【问题讨论】:

  • 看一下来自 OSMLayer 和 OSMImporter 的源代码,如果我可以将节点添加到层而不对其进行索引(或者可能将其添加到不是层)或者如果可以将两个先前不同的层合并为一个,有什么想法吗?

标签: java neo4j neo4j-spatial


【解决方案1】:

如果您使用的是您提到的 Neo4j 和 Neo4j-Spatial 版本,ShapeFileImporter 类不会创建任何索引(不是 Neo4j 意义上的)。对于 .shp 文件中的每个形状,它会提取与其关联的所有属性(不仅仅是几何图形),创建一个节点,并将其添加到图层的 RTree。所有这些的源代码都可以在

找到

ShapeFileImporter.java
EditableLayerImpl.java
DefaultLayer.java
RTreeIndex.java

阅读代码时可能会混淆,但名为 index 的成员不是 Neo4j 意义上的索引,它是由 Java 代码包裹的 RTree 图。

OSM 导入器执行相同的工作(甚至更多),只是拆分略有不同。据我所知,这两个进口商都没有创建遗留索引。 OSM 导入器创建所有节点(数据和几何分别具有关系),然后从每个几何节点构建 RTree。 SHP 导入器更简单。它创建结合数据和几何的节点,并在创建时将每个节点添加到 RTree。我不认为两者相比有任何整体速度提升。

【讨论】:

  • 我目前正在编写一个基于 ShapeFileImporter 类的新导入器来添加所有节点,在所有插入之后我创建层并将节点添加到 RTree 图中,因为在 Rtree 之后添加每个节点创作让我慢了下来。感谢您的帮助,有趣的是我想到了几乎相同的解决方案,如果顺利的话我会告诉你
猜你喜欢
  • 1970-01-01
  • 2012-11-29
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
相关资源
最近更新 更多