Il y a un certain nombre d'options; le plus simple, bien sûr, étant de simplement enregistrer toutes les versions de façon indépendante. Pour un site comme stackoverflow, où les postes ne sont généralement pas édité de très nombreuses fois, ce qui est approprié. Toutefois, pour quelque chose comme wikipédia, il faut être plus malin pour économiser de l'espace.
Dans le cas de wikipédia, les pages sont d'abord stockées avec chaque version séparée, dans le texte de la table. Périodiquement, un certain nombre de révisions antérieures sont comprimées ensemble, puis emballé dans un seul champ. Car il y aura beaucoup de répétitions, vous économisez beaucoup d'espace de cette façon.
Vous pouvez également regarder comment certains systèmes de contrôle de version de le faire - par exemple, subversion utilise ignorer les deltas, où les révisions sont stockées sous la forme de différence à partir d'une révision à mi-chemin de l'histoire. Cela signifie que l'on devra examiner au plus O(lg n) révisions de reconstruire une révision de l'intérêt.
Git, d'autre part, utilise quelque chose de plus semblable à celle de wikipédia de l'approche. Les révisions sont stockés en tant individuellement compressé "lâche" des objets, d'abord, puis périodiquement git prend tous les objets en vrac, les trie selon une certaine complexité heuristique, puis génère des compressé deltas entre "proximité" des objets et retourne le résultat sous la forme d'un packfile. Le nombre de révisions qui doivent être lus à la reconstruction d'un fichier délimité par un argument du pack processus de construction. Ce qui a la propriété intéressante que les deltas peuvent être construits entre les objets qui ne sont pas liés, dans certains cas.