Использование устаревшей базы данных Neo4j с Grails

Я хочу использовать набор данных ENRON GraphML, загруженный в Neo4j в качестве базы данных для моего приложения Grails 2.0. Вариант использования данных — только для чтения. У меня не было проблем с загрузкой набора данных и созданием базы данных в автономном приложении, и теперь я хотел бы использовать подключаемый модуль Grails для управления доступом к базе данных.

Глядя на документацию плагина Neo4J по сопоставлению домена классов, я вижу, что для каждого типа вершины требуются узлы подссылки. В моих данных этого нет. Я вижу несколько путей продвижения вперед и не знаю, какой из них выбрать:

  1. Сбросьте плагин, создайте сервис и управляйте чтением базы данных самостоятельно. Плюсы: я могу реализовать это легко. Минусы: потенциальные проблемы с производительностью, баги.

  2. Напишите программу, которая создает недостающие вершины и ребра, ожидаемые подключаемым модулем, а затем загружайте базу данных в подключаемый модуль. Плюсы: плагин будет управлять доступом. Минусы: может потребоваться несколько итераций, чтобы выяснить, что именно нужно добавить, чтобы сделать его совместимым с базой данных, созданной плагином.

  3. Создайте пустую базу данных с помощью плагина и выполните кучу вставок, прочитав данные из другой базы данных. Плюсы: плагин будет управлять доступом. Минусы: может потребоваться много времени для загрузки базы данных; нужно написать код для обхода, сериализации базы данных; и Т. Д.

Какой хороший способ пойти? Что я упускаю из виду?


person Gene Golovchinsky    schedule 30.10.2012    source источник


Ответы (1)


Как автор подключаемого модуля Grails Neo4j, я мог бы дать квалифицированный ответ здесь. Структура подссылок, используемая в настоящее время в плагине, не всегда является лучшим подходом. У меня есть некоторые планы заменить это индексированием настраиваемым способом, но сейчас нет ожидаемого времени прибытия. Поскольку вам может потребоваться более краткосрочное решение, я предлагаю выбрать между 1) и 2) в случае базы данных только для чтения. Одним из основных преимуществ использования доменных классов является использование скаффолдинга. Поскольку вы только для чтения, этот аргумент здесь не считается ИМХО.

1) имеет еще одно приятное преимущество: если вы используете, например. cypher для запроса графика, производительность будет очень хорошей даже при использовании базы данных в стиле REST. В общем, если производительность важна, вы должны использовать шифрование в пользу выполнения запросов критериев Grails/динамических поисковиков.

2) Если вы придерживаетесь такого подхода, я могу оказать некоторую поддержку. В основном вам нужно создать свои классы домена и создать узел дополнительной ссылки для каждого класса домена и подключить все экземпляры к этому. Преимущество здесь: вы можете использовать, например. динамические средства поиска или запросы со стандартными критериями. Создание узлов подссылок и соединений с узлом экземпляров можно легко выполнить с помощью одного или двух операторов шифрования.

person Stefan Armbruster    schedule 31.10.2012
comment
Я, вероятно, пойду с 1) на данный момент; Я создал свой собственный полнотекстовый индекс для данных, поэтому на данный момент сложный поиск на основе графа не требуется. Мне понадобится только местная информация о районе, которую я могу получить через Гремлина. - person Gene Golovchinsky; 01.11.2012
comment
Исходя из моего опыта, используйте Cypher вместо Gremlin для всех новых разработок. - person Stefan Armbruster; 01.11.2012
comment
Должен сказать, синтаксис Cypher трудно понять. - person Gene Golovchinsky; 01.11.2012