2009-08-02 18 views
34

Mi stavo chiedendo per siti come StackOverflow e Wikipedia, memorizzano la cronologia delle modifiche a tempo indeterminato e consentono all'utente di ripristinare le modifiche. Qualcuno può raccomandare qualsiasi risorsa/libri/articoli su come farlo usando qualsiasi tecnologia adatta (come database, ecc.)Come si memorizza la cronologia delle modifiche in modo efficace?

Grazie mille!

+3

+1 buona domanda –

risposta

14

Ci sono un certo numero di opzioni; il più semplice, naturalmente, è semplicemente registrare tutte le versioni in modo indipendente. Per un sito come StackOverflow, in cui i post non vengono solitamente modificati moltissime volte, questo è appropriato. Tuttavia, per qualcosa come wikipedia, bisogna essere più intelligenti per risparmiare spazio.

Nel caso di wikipedia, le pagine vengono inizialmente memorizzate con ogni versione separata, nel numero text table. Periodicamente, un numero di revisioni precedenti vengono compresse insieme, quindi raggruppate in un unico campo. Dato che ci sarà molta ripetizione, risparmierai molto spazio in questo modo.

Si potrebbe anche voler vedere come alcuni sistemi di controllo della versione lo fanno - ad esempio, subversion utilizza skip deltas, dove le revisioni sono memorizzate come differenza rispetto a una revisione a metà della cronologia. Ciò significa che si dovranno esaminare al massimo le revisioni di O (lg n) per ricostruire la propria revisione di interesse.

Git, d'altra parte, utilizza qualcosa di più simile all'approccio di wikipedia. Le revisioni vengono memorizzate come oggetti "loose" singolarmente compressi, quindi periodicamente git prende tutti gli oggetti liberi, li ordina secondo un'euristica alquanto complessa, quindi costruisce dei delta compressi tra gli oggetti "vicini" e scarta il risultato come packfile. Il numero di revisioni che è necessario leggere per ricostruire un file è limitato da un argomento al processo di creazione del pacchetto. Questo ha l'interessante proprietà che i delta possono essere costruiti tra oggetti non correlati, in alcuni casi.

+1

Non sapevo di skip delta, I <3 logn algoritmi – Patashu

Problemi correlati