我有一个树数据结构,在特定级别上最多有 1000 个节点(最大深度为 8-9 级)。
我需要维护整个树的版本。在一些处理发生后创建一个版本。在这些版本之间,节点中的数据可能会发生变化(不超过 100 个左右)。
到目前为止,我正在为每个新版本克隆整个树,但是在几个版本之后空间消耗是巨大的。我无法完全删除以前的版本记录,因为我需要跟踪更改。
将这些版本存储在数据库中的最佳方式是什么?(如果不是分贝,任何替代方式)。
我有一个树数据结构,在特定级别上最多有 1000 个节点(最大深度为 8-9 级)。
我需要维护整个树的版本。在一些处理发生后创建一个版本。在这些版本之间,节点中的数据可能会发生变化(不超过 100 个左右)。
到目前为止,我正在为每个新版本克隆整个树,但是在几个版本之后空间消耗是巨大的。我无法完全删除以前的版本记录,因为我需要跟踪更改。
将这些版本存储在数据库中的最佳方式是什么?(如果不是分贝,任何替代方式)。
一个可能的实际解决方案可能是:
如果您需要恢复旧版本:
如果您不需要重建旧版本,则只需使用 XMLUnit 计算差异并将它们的序列化存储在数据库中。
将每个唯一节点永久冻结在一个表中(在其中插入节点后,永远不要编辑或删除它)。如果您需要稍微更改一个节点,请将此修改后的节点插入您的表中。然后,使用节点表的外键跟踪您的树版本。这应该需要每棵树的微不足道的空间。
由于您关心树的先前版本,并且空间是您主要关心的问题,假设从一个版本到另一个版本,treas 并不完全不同,您可以只存储 tres 之间的差异。如何做到这一点完全取决于您:-您可以对树进行内/前/后顺序解析(假设它是二进制的)并提出一个逻辑来从差异位置到另一个位置 - 或使用一个只存储差异的链表+一些重建珍宝的逻辑
将每个“版本”存储为已更改节点与旧/新值之间的映射。
您可以通过反转操作序列来重建任何以前的版本。