2009-08-02 11 views
34

Je me demandais juste pour des sites comme stackoverflow et wikipedia, ils stocke l'historique des modifications indéfiniment et permet à l'utilisateur de restaurer les modifications. Quelqu'un peut-il recommander des ressources/livres/articles sur la façon de le faire en utilisant une technologie appropriée (telles que les bases de données, etc)Comment stocker efficacement l'historique des modifications?

Merci beaucoup!

+3

+1 bonne question –

Répondre

14

Il existe un certain nombre d'options; le plus simple étant, bien sûr, de simplement enregistrer toutes les versions indépendamment. Pour un site comme stackoverflow, où les publications ne sont généralement pas éditées plusieurs fois, cela est approprié. Cependant, pour quelque chose comme wikipedia, il faut être plus intelligent pour économiser de l'espace.

Dans le cas de wikipedia, les pages sont initialement stockées avec chaque version séparément, dans le text table. Périodiquement, un certain nombre de révisions plus anciennes sont compressées ensemble, puis emballées dans un seul champ. Comme il y aura beaucoup de répétitions, vous économiserez beaucoup d'espace de cette façon. Vous pouvez également regarder comment certains systèmes de contrôle de version le font - par exemple, subversion utilise skip deltas, où les révisions sont stockées comme une différence par rapport à une révision à mi-chemin de l'historique. Cela signifie que l'on devra examiner au plus O (lg n) révisions pour reconstruire sa révision d'intérêt.

Git, d'autre part, utilise quelque chose de plus similaire à l'approche de wikipedia. Les révisions sont stockées en tant qu'objets 'loose' individuellement compressés, puis périodiquement git prend tous les objets détachés, les trie selon une heuristique assez complexe, puis construit des deltas compressés entre les objets 'proches' et vide le résultat en tant que packfile. Le nombre de révisions qui doivent être lues pour reconstruire un fichier est limité par un argument au processus de construction du pack. Cela a la propriété intéressante que les deltas peuvent être construits entre des objets qui ne sont pas liés, dans certains cas.

+1

Je ne connaissais pas les skip deltas, I <3 logn algorithmes – Patashu