Сохранение представления графа в памяти в базе данных

У меня есть динамический график, меняющийся со временем, и я использую библиотеку Jgrapht для хранения каждого экземпляра графика в памяти, используя
UndirectedGraph<Node, DefaultEdge> timeGraph = new SimpleGraph<Node, DefaultEdge>(DefaultEdge.class);

Поскольку хранить несколько огромных графиков в памяти очень сложно, я хотел знать, есть ли способ хранить каждый экземпляр timeGraph в том виде, в котором он есть, в базе данных, такой как MongoDB (Neo4j или любая другая), и импортировать конкретный график в память каждый раз. нужно; вместо того, чтобы снова строить узлы и отношения в базе данных графа.

P.S. Я пытался экспортировать в формат файла graphML и импортировать каждый раз, но это не помогает (из-за моих дополнительных требований к хранению подграфа). customGraphMLImporter.GraphMLImport(i_timestep);

Ищу входные данные, чтобы я мог попробовать варианты. Спасибо.


person Steve    schedule 17.05.2015    source источник
comment
Пожалуйста, не отмечайте случайным образом. Если эти вопросы не относятся конкретно к конкретной базе данных (например, Mongo или Neo, которые принципиально отличаются друг от друга), эти теги следует удалить.   -  person user2864740    schedule 18.05.2015
comment
Извини за это. @Stennie, спасибо за редактирование.   -  person Steve    schedule 18.05.2015


Ответы (1)


Здесь у вас есть несколько вариантов:

  1. Чтобы использовать стороннюю базу данных, ориентированную на графы (например, Neo4J), MongoDB ориентирована на документы и не оптимизирована для операций с графами)
  2. Сериализуйте свой график в файл и сохраните эти файлы на диске.

Какой вариант выбрать, решать вам, в случае, если вам нужен весь граф в памяти вашего приложения - я бы предложил хранить его самостоятельно в простых файлах. (Поскольку вы можете напрямую считывать весь свой график в память и использовать его без накладных расходов на базу данных), если вам нужна только часть вашего графика, я бы предложил использовать Neo4J с его API для обхода графика.

person Stanislav Levental    schedule 17.05.2015
comment
Спасибо за ответ. Поскольку мне нужны все графики в памяти, я думаю, что я посмотрю на дальнейшее удобство использования путем сериализации в файлы. Поскольку я новичок в библиотеке, не могли бы вы помочь привести пример (фрагмент или любой материал), объясняющий, как сериализовать и десериализовать только Jgrapht Graph <V,E>? - person Steve; 18.05.2015
comment
класс AbstractBaseGraph является сериализуемым, это означает, что вы можете хранить его с помощью простого API сериализации Java (я бы предложил использовать более удобную оболочку util из apache commons commons.apache.org/proper/commons-lang/javadocs/api-release/org/ ) - person Stanislav Levental; 18.05.2015