В настоящее время я тестирую Neo4j, чтобы узнать, что он может сделать. Моя база данных состоит из около 54000 узлов и 10M отношений (2 типа отношений), которые были импортированы с использованием https://github.com/jexp/batch-import из TSV-файлов. То, что я выясняю, - это необходимость индексов, чтобы получить результаты запроса в разумные сроки.Создание индекса Neo4j по базе данных
Одним из типичных запросов, которые я хочу сделать, является список узлов, которые связаны с определенным типом, а узлы соединения имеют определенные значения. Что-то вроде:
START
a=node(*)
MATCH
(a)-[r]->(b)
WHERE
id(a) <> 0
AND id(b) <> 0
AND type(r) = 'ASSOCIATION'
AND a.attr1 = 'value'
AND b.attr1 = 'value'
RETURN
a, b LIMIT 200.
Естественно, этот запрос никогда не завершается.
Имея это в виду, что это самый простой способ (пакетная создать?) Индекс отношения для такого рода запроса на существующей базе данных? И индексы для узлов, которые имеют определенные значения атрибутов?
Это что-то, что можно было сделать с веб-консоли или вообще после этого? Из чтения руководства neo4j я понял, что вы хотите написать пользовательскую реализацию java, которая загружает данные по узлам и создает индексы при создании базы данных. Я лично хотел бы использовать python, но привязки python оказались слишком медленными даже для импорта текущего db.
(2) Взгляд из стороны MySQL, нет ли в gremlin опции для создания индекса для существующих данных? В MySQL вы могли бы просто выполнить команду CREATE INDEX, не так ли? Выглядит громоздким, чтобы перезагрузить весь db каждый раз, когда вам нужен индекс, содержащий большие объемы данных. – amergin
В neo4j вам нужно индексировать себя, это не то, что автоматически делается для вас. – Nicholas
Спасибо! Я немного изменил исходный источник импорта, следуя http://docs.neo4j.org/chunked/stable/batchinsert.html#indexing-batchinsert и создал соответствующие узловые и краевые индексы. Кажется, что можно построить somekind индекса, используя также gremlin (но я не знал, как сделать правильную фильтрацию в гремлине, чтобы получить набор вершин, которые я хочу вместо g.getVertices()): indexKeys = новый HashSet(); indexKeys.add ("attr1"); index = g.createAutomaticIndex ("nodeIndex", Vertex.class, indexKeys); AutomaticIndexHelper.reIndexElements (g, index, g.getVertices()); –
amergin