如果我有一个大图,我该如何存储它以便它仍然可以轻松遍历最好而不必将其拉回到内存中。这个问题与平台和语言无关。我会选择适合问题的语言和平台,而不是试图用错误的平台强行解决问题。
答案 0 :(得分:1)
存在专门为此目的而定制的数据库系统,即graph databases。我没有使用任何自己,但文章列出了几个这样的系统,其中一些是免费的。
为了完整性:使用存储在常规SQL数据库中的图形而不将所有图形加载到内存中是可能的,但是很麻烦(并且效率不高)。作为一个可能的例子,我的一个朋友implemented Dijkstra's shortest path algorithm in T-SQL ......
答案 1 :(得分:1)
图形数据库可能符合您的需求。 Neo4J是这种数据库系统的java实现
答案 2 :(得分:0)
好吧,您只需将图表存储为节点列表,将唯一ID附加到每个节点,并将相邻节点ID列表与节点一起存储。
因此,您基本上可以看到相邻的节点ID,而无需从数据库中提取整个图形,并在数据库中查询相邻节点。 (节点ID是主键的良好候选者。)
答案 3 :(得分:0)
数据库越来越多地具有帮助解决问题的功能,例如图遍历。
SQL Server提供递归CTE,非常适合此目的。 Oracle有“连接”,它可以起到同样的作用。
这是否“简单”取决于您的SQL编程技巧。我猜答案是否定的。
但是,如果您的系统非常适合数据库,除了需要遍历这样的图形之外,您还可以将图形放入许多数据库系统中。