c# - 定向图的最佳持久性方法/工具/库是什么

时间:2010-04-27 10:44:32

标签: c# graph directed-graph

C#中有向图的最佳持久性方法/工具/库是什么。假设我有一个有向图的类模型(例如Nodes& Relationships,或Vertex's和Edge's,如果你愿意的话),你会建议坚持到SQL数据库? (或者,如果您希望第二个问题是我没有指定SQL数据库作为要求)

例如,我想我会简单地使用Relationships表和Nodes表。

2 个答案:

答案 0 :(得分:1)

我不熟悉C#中提供的工具,但您的问题似乎主要是关于存储而不是C#。

如何存储DAG无疑将取决于您的用例。您可以在关系数据库中的两个表中表示DAG,例如,其中一个表保存有关节点(A,B,C等)的信息,另一个表保存有关节点之间边缘的信息(A - > B ,A - > C等。)

像Neo4j这样的图形数据库也可能是一个很好的方法。

根据您采用的方法,在横向缩放和并发访问等方面,您的里程会有所不同。您可能希望保留一个非规范化的表示来加速某些类型的查询,但这样的策略需要在使用它之前进行权衡。

答案 1 :(得分:0)

节点表和关系(链接)表对我来说似乎是最自然的,因为通常(总是?)如何在关系数据库中实现多对多关系,并且有向图基本上是多对的 - 节点的多关系映射(对吗?)。我想你可以将它存储在XML字段或一些二进制值中,但这实际上忽略了你有一个数据库的事实。

如果没有拥有数据库,并且直接写入某种类型的文件,我可能仍会使用类似的机制,用一个键唯一地标识每个节点,并分别定义如何关键值是相关的。

这一切都假定您的有向图是多对多的,而不是严格的一对多。如果它是严格一对多的,没有循环,我可能会使用XML,如果写入文件(利用XML中的子元素与其父元素相关的事实),或者如果写入数据库则使用外键(这将是即使有循环也能很好地工作。