tags:

views:

102

answers:

1

Hi,

Would QuickGraph be able to help me out with my requirements below?

(a) want to model a graph of nodes and directional relationships between nodes - for example to model web pages/files linked under a URL, or modeling IT infrastructure and dependencies between hardware/software. The library would include methods such as

* 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) have to persist the data to a database - so it should support SQL Server and ideally SQLite as well.

If it does support these requirement then I'd love to hear:

  1. any pointers to any parts of QuickGraph to dig into?

  2. what is the best concept re it's usage in terms of how to use database persistence - is it a simpler design to assume every search/method works directly on the database, or does QuickGraph support smarts to be able to work in memory and the "save" to database all changes at an appropriate point in time (e.g. like ADO.net does with DataTable etc)

Thanks in advance

+1  A: 

Greg,

a. Yes, Quickgraph can fairly easily search the nodes in this manner. I've already provided one example in your other question.

b. As far as I know, SQL serialization is not "built-in" to QuickGraph; you'd have to build your own custom implementation. Since most graphs represent more than just a simple list of vertices and nodes, it would be pretty hard to accomplish this automatically (and natively) in QuickGraph, but fairly simple to implement yourself.

  1. You might check out the GraphML serialization section in the QuickGraph source. That may give you some hints to get started.
  2. QuickGraph works in memory, it doesn't work "against" a persistent store and isn't designed to (since persistent stores are pretty slow generally). So, you'd need to save the information manually. However, you can monitor different QuickGraph events like VertexAdded, VertexRemoved, EdgeAdded, and EdgeRemoved to determine when the graph has changed, and then perform serialization at those times.

-Doug

Doug
thanks for answering Doug - I'm still trying to get across the code - it's kind of complicated the code isn't it, noting there are events everywhere and the use of generics etc
Greg
Yeah, QuickGraph is not an easy thing to just pick up and figure out, especially if you aren't already really familiar with graph theory and have a practical knowledge of how you usually work with graphs (i.e. depth first search, breadth first search, topological sorting, what you can and can't do with a cyclical graph, etc.). If you need something pretty simple you may consider not even using QuickGraph. The nice thing is, once you've got the basics, there's a TON of stuff QuickGraph does for you that is tough to implement on your own.
Doug