什么是 C# 中的有向图的最佳持久性方法/工具/库。那是假设我有一个有向图的类模型(例如节点和关系,或者如果你愿意,也可以是顶点和边缘),关于持久化到 SQL 数据库,你会推荐什么?(或者如果您希望第二个问题是我没有指定 SQL 数据库作为要求)
例如,我想我会简单地使用关系表和节点表。
什么是 C# 中的有向图的最佳持久性方法/工具/库。那是假设我有一个有向图的类模型(例如节点和关系,或者如果你愿意,也可以是顶点和边缘),关于持久化到 SQL 数据库,你会推荐什么?(或者如果您希望第二个问题是我没有指定 SQL 数据库作为要求)
例如,我想我会简单地使用关系表和节点表。
我不熟悉 C# 中可用的工具,但您的问题似乎主要是关于存储而不是 C#。
毫无疑问,您如何存储 DAG 取决于您所考虑的用例。您可以在关系数据库中的两个表中表示 DAG,例如,其中一个表保存有关节点(A、B、C 等)的信息,另一个保存有关节点之间的边的信息(A -> B, A -> C 等)。
Neo4j 等图形数据库也可能是一个不错的选择。
在水平扩展和并发访问等方面,您的工作量会有所不同,具体取决于您采用的方法。您可能希望保留非规范化表示以加速某些类型的查询,但这种策略涉及您在使用它之前需要了解的权衡。
节点表和关系(链接)表对我来说似乎是最自然的,因为这通常(总是?)在关系数据库中实现多对多关系,而有向图基本上是多对多关系节点的映射(对吗?)。我想您可以将它存储在 XML 字段或某个二进制值中,但这确实忽略了您拥有数据库的事实。
如果您没有数据库,并且直接写入某种类型的文件,我可能仍会使用类似的机制,用一个键唯一标识每个节点,并分别定义键值如何相关。
这一切都假设您的有向图是多对多而不是严格的一对多。如果它是严格的一对多,没有循环,我可能会在写入文件时使用 XML(利用 XML 中的子元素与其父元素相关的事实),或者在写入数据库时使用外键(这将即使有循环也能正常工作)。