Approach for versioning of documents is described. A version accumulator
structure stores one or more version values indicating different versions
of a data object. The data object is decomposable into a plurality of
nodes. One or more copies of each node of the plurality of nodes are
stored, where the one or more copies are associated with non-overlapping
version ranges. A first request to perform a change to the data object is
received. The first request specifies an effective version value for the
change, which involves a particular node. The change is performed based
on the effective version value and without making a deep copy of the data
object. A second request to retrieve a certain version of the data object
is received. The certain version is retrieved based on the version ranges
associated with the one or more copies of each node of the plurality of
nodes.