Пакетная вставка шейп-файлов в Neo4J

в настоящее время я работаю с Neo4j + Neo4j Spatial, и я хотел бы спросить вас, есть ли способ импортировать шейп-файлы в базу данных в пакетном режиме, так же, как они делают с файлами OSM, причина этого в том, что я имею дело с огромным набором данных (100 ГБ+), а слой+индекс определенно замедляет работу при вставке сотен тысяч геометрий при использовании стандартного ShapeFileImporter

Мой вопрос: есть ли способ импортировать шейп-файлы в пакетном режиме и после вставки мы делаем 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 все равно их создает и использует.


person catacavaco    schedule 23.07.2014    source источник
comment
Глядя на исходный код из OSMLayer и OSMImporter, похоже, что мои проблемы исчезли бы, если бы я мог либо добавить узел к слою без его индексации (или, возможно, добавить его к чему-то, что не является слоем), или если бы его можно было объединить два предыдущих отдельных слоя в один, есть идеи?   -  person catacavaco    schedule 24.07.2014


Ответы (1)


Если вы используете упомянутые вами версии Neo4j и Neo4j-Spatial, класс ShapeFileImporter не создает никаких индексов (не в смысле Neo4j). Для каждой формы в файле .shp он извлекает все связанные с ней свойства (а не только геометрию), создает узел и добавляет его в RTree для слоя. Исходный код всего этого находится по адресу

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

Это может сбивать с толку при чтении кода, но член с именем index не является индексом в смысле Neo4j, это граф RTree, обернутый кодом Java.

Импортер OSM выполняет ту же работу (и даже больше), только разделяется немного по-другому. Насколько мне известно, ни один из импортеров не создает устаревшие индексы. Импортер OSM создает все узлы (данные и геометрию отдельно со связями), затем строит RTree из каждого узла геометрии. Импортер SHP проще. Он создает узлы, которые объединяют данные и геометрию, и добавляет каждый узел в RTree по мере его создания. Я не верю, что есть какое-то общее улучшение скорости для одного по сравнению с другим.

person Jim Biard    schedule 25.07.2014
comment
В настоящее время я пишу новый импортер на основе класса ShapeFileImporter, чтобы добавить все узлы, и после всех вставок я создаю слой и добавляю узлы в граф RTree, поскольку добавление каждого узла в Rtree после его создания сильно замедляло меня. спасибо за помощь, забавно, что я думал почти о том же решении, и я дам вам знать, если все пройдет гладко - person catacavaco; 25.07.2014