java - 持久化 Guava Graph 的方法

标签 java graph guava

我正在使用来自 Google Guava in Version 21.0common.graph .它非常适合我的用例,没有一个方面:持久性。该图似乎仅在内存中。图类没有实现 Serializable,这在 issue posts 中有解释.

Google 描述了 three models to store the topology .第三个选项是:

a separate data repository (for example, a database) stores the topology

但仅此而已。我没有在包中找到任何方法来应用单独的数据存储库。有什么办法吗?或者是使用 nodes()edges() 方法获取我的节点的 SetSet 的唯一方法 我的边缘?如果我在此类中实现 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/

相关文章:

r - GGplot - 基于其他列的同一列值的多行 - 无方面

javascript - 雷达图好看的JS图库有哪些?

java - 通过 Wicket 6 中的 PageParameters 将可空参数传递给页面

java - 如何使用关闭 Hook 优雅地停止 Guava AbstractScheduledService?

java - 谷歌地图制作工具 : iterating over entries in LRU order

java - 配置 hibernate 5.0.1 和 MySQL 时出错

java - hibernate :C3P0 属性被忽略

java - 返回到 switch 中的过去的情况

qt - Qt 中的交互式图形

Java 编程 - 国际象棋走法(基本,无 AI)