序列化持久性/功能性数据结构

时间:2010-03-20 18:03:02

标签: language-agnostic serialization data-structures functional-programming persistent

持久性数据结构依赖于结构的共享以提高效率。有关示例,请参阅here

在序列化数据结构并将其写入文件或数据库时,如何保留结构共享?如果我只是天真地遍历数据结构,我将存储正确的值,但我将失去结构共享。我希望能够将包含共享组件的数据结构保存到文件中,还原它们,并且仍然可以在还原的数据中共享大部分结构。

2 个答案:

答案 0 :(得分:6)

你想要某种形式的哈希值。这个问题已得到很好的研究。 Andrew Kennedy的paper on pickler combinators详细解释了如何在保留共享的同时序列化和反序列化。

答案 1 :(得分:4)

我可以想到两种明显的方法,它们是相关的。

  1. 不要序列化结构,序列化节点。因此,您将为所提供的示例树中的每个节点存储一个序列化记录,并将所有节点引用转换为该节点的数据库键名。这样您就可以自动共享,但是为了加载结构而需要进行多次查找以追逐引用。
  2. 按照所有权为您的节点着色,就像您的示例一样。具有给定节点“属于”哪个结构的概念,并且仅序列化属于该结构的结构中的节点。其他结构中节点的链接被对该结构和相关节点的引用所取代。这允许您一次加载整个结构,但如果它们高度相互关联,则可能导致您必须加载所有相关结构。
  3. 在这些选项之间进行选择取决于您要优化的内容,以及您希望在实践中看到的各种链接。