0

如果我有一个大图,我如何存储它以便它仍然可以轻松遍历,最好不必将它拉回内存。这个问题与平台和语言无关。我会选择适合问题的语言和平台,而不是试图用错误的平台强行解决问题。

4

4 回答 4

1

存在专门为此目的定制的数据库系统,即图形数据库。我自己没有用过,但文章列出了几个这样的系统,其中一些是免费的。

为了完整性:使用存储在常规 SQL 数据库中的图形而不将其全部加载到内存中是可能的,但很麻烦(而且效率不高)。作为一个可能的例子,我的一个朋友在 T-SQL 中实现了 Dijkstra 的最短路径算法......

于 2012-07-16T17:23:53.890 回答
1

可能图形数据库会满足您的需求。Neo4J就是这样一个数据库系统的java实现

于 2012-07-16T17:24:13.510 回答
0

好吧,您可以简单地将图形存储为节点列表,将唯一 ID 附加到每个节点,并将相邻节点 ID 的列表与节点一起存储。

所以基本不用从数据库拉出整个图就可以看到相邻的节点ID,查询数据库中的相邻节点。(节点 ID 是一个很好的主键候选者。)

于 2012-07-16T17:33:30.393 回答
0

数据库越来越多地具有帮助解决问题的功能,例如图遍历。

SQL Server 提供递归 CTE,非常适合此目的。Oracle 有“connect by”,可以达到同样的目的。

这是否“容易”取决于您的 SQL 编程技能。我猜答案是否定的。

但是,如果您有一个非常适合数据库的系统,那么除了需要遍历这样的图之外,您还可以将图拟合到许多数据库系统中。

于 2012-07-16T18:45:51.117 回答