can QuickGraph support these requirements? (includ

2019-09-06 23:47发布

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

标签: quickgraph
1条回答
在下西门庆
2楼-- · 2019-09-07 00:21

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

查看更多
登录 后发表回答