我有一个非常简单的数据结构(基本上是一个包含一些数组和单个值的结构),但是我需要记录数据结构的历史记录,以便我可以在任何时候有效地获取数据结构的内容.
有没有一个比较直接的方法呢?
我可以想到的最好的方法是通过在functional data structures中存储数据来处理所有突变操作的整个数据结构,然后对于每个变异操作,在由时间排序索引的Map中缓存数据结构的副本(例如,具有实时密钥的TreeMap或具有突变操作的计数器的HashMap与存储在TreeMaps中的一个或多个索引相结合实时/刻度计数等到突变操作)
有什么建议么?
编辑:在一种情况下,我已经将历史记录作为一系列事务(这是从数据文件读取项目),所以我可以重播它们,但是这需要每次需要O(n)个步骤(n =#个事务)访问数据.我正在寻找替代品.
解决方法
您应该使用一些不变的永久性数据结构,并且基于结构共享(即,使数据结构的不在版本之间的部分仅存储一次).
我在这里创建了一个这样的数据结构的开源Java库:
http://code.google.com/p/mikeralib/source/browse/#svn/trunk/Mikera/src/mikera/persistent
这些有些灵感来自Clojure持久的数据结构,这也可能适合您的目的(它们也用Java编写).