может ли QuickGraph поддерживать эти требования? (включая поддержку постоянства базы данных)

Сможет ли QuickGraph помочь мне с моими требованиями, указанными ниже?

(a) хотите смоделировать граф узлов и направленных отношений между узлами — например, для моделирования веб-страниц/файлов, связанных по URL-адресу, или моделирования ИТ-инфраструктуры и зависимостей между аппаратным/программным обеспечением. Библиотека будет включать такие методы, как

* Node.GetDirectParents()   //i.e. there could be more than one direct parent for a node
* Node.GetRootParents()  //i.e. traverse the tree to the top root parent(s) for the given node
* Node.GetDirectChildren()
* Node.GetAllChildren()

(b) должны сохранять данные в базе данных, поэтому он должен поддерживать SQL Server и, в идеале, SQLite.

Если он поддерживает эти требования, я хотел бы услышать:

  1. любые указатели на какие-либо части QuickGraph, в которые нужно копаться?

  2. какова наилучшая концепция его использования с точки зрения того, как использовать постоянство базы данных - это более простой дизайн, предполагающий, что каждый поиск/метод работает непосредственно в базе данных, или QuickGraph поддерживает интеллект, чтобы иметь возможность работать в памяти и "сохранять" " для базы данных всех изменений в соответствующий момент времени (например, как ADO.net делает с DataTable и т. д.)

заранее спасибо


person Greg    schedule 27.04.2010    source источник


Ответы (1)


Грег,

а. Да, Quickgraph может довольно легко искать узлы таким образом. Я уже привел один пример в вашем другой вопрос.

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

  1. Вы можете проверить раздел сериализации GraphML в исходном коде QuickGraph. Это может дать вам некоторые подсказки для начала.
  2. QuickGraph работает в памяти, он не работает «против» постоянного хранилища и не предназначен для этого (поскольку постоянные хранилища обычно довольно медленные). Таким образом, вам нужно будет сохранить информацию вручную. Однако вы можете отслеживать различные события QuickGraph, такие как VertexAdded, VertexRemoved, EdgeAdded и EdgeRemoved, чтобы определить, когда график изменился, а затем выполнить сериализацию в это время.

-Дуг

person Doug    schedule 05.05.2010
comment
спасибо за ответ Дуг - я все еще пытаюсь разобраться в коде - код довольно сложный, не так ли, отмечая, что повсюду есть события и использование дженериков и т. д. - person Greg; 07.05.2010
comment
Да, QuickGraph — непростая вещь, которую нужно просто взять и понять, особенно если вы еще не совсем знакомы с теорией графов и не имеете практических знаний о том, как вы обычно работаете с графами (например, поиск в глубину, поиск в ширину и т. д.). топологическая сортировка, что можно и что нельзя делать с циклическим графом и т. д.). Если вам нужно что-то довольно простое, вы можете даже не использовать QuickGraph. Приятно то, что как только вы освоите основы, QuickGraph сделает за вас МНОЖЕСТВО вещей, которые сложно реализовать самостоятельно. - person Doug; 11.05.2010