1

目前我正在使用 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 无论如何都会创建和使用它们。

4

1 回答 1

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。我不相信两者之间的整体速度会有所提高。

于 2014-07-25T14:55:47.950 回答