我正在使用来自 Google Guava in Version 21.0 的 common.graph
.它非常适合我的用例,没有一个方面:持久性。该图似乎仅在内存中。图类没有实现 Serializable
,这在 issue posts 中有解释.
Google 描述了 three models to store the topology .第三个选项是:
a separate data repository (for example, a database) stores the topology
但仅此而已。我没有在包中找到任何方法来应用单独的数据存储库。有什么办法吗?或者是使用 nodes()
和 edges()
方法获取我的节点的 Set
和 Set 的唯一方法
我的边缘?如果我在此类中实现 Serializable
并通过调用 addNode(Node)
和 addEdge(Source, Target, Edge) 恢复图形,我可以将它们保存在数据库中
(没有 addAll 方法)。但这似乎是一种解决方法。
感谢您的支持!
最佳答案
简要回顾一下 Guava 的 common.graph
类不是 Serializable
的原因:Java 序列化是脆弱的,因为它取决于实现的细节,并且可以随时更改,因此我们不支持图形类型。
在短期内,您提出的解决方法可能是您最好的选择,尽管您需要小心地将边的端点(源和目标)与边对象一起存储,以便您能够重建你描述的图表。事实上,从长远来看,如果您拥有满意的数据库并且无需担心与其他任何人的互操作,这也可能对您有用。
正如我在那 GitHub issue 中提到的,另一种选择是将图形保存为某种文件格式。 (Guava 本身不提供执行此操作的机制,但是 JUNG 将用于 common.graph
图表,一旦我可以推出 3.0,我仍在努力。)请注意,大多数图文件格式(至少是我熟悉的那些)对存储节点和边缘元数据的支持相当有限,因此您可能需要自己的文件格式(例如,基于 Protocol Buffer 的格式)。
关于java - 持久化 Guava Graph 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43698421/