"Размер имеет наибольшее значение": как насчет внешнего инструмента сравнения (например, bsdiff? ), использующего, например, PL / sh .
"Я долженбыть в состоянии получить текущую ревизию документа как можно быстрее ": в этом случае вы захотите выполнить" неправильный "обход, поэтому каждая ревизия будет включать:
- replace 'предыдущая ревизия 'с разницей между' новой ревизией 'и' предыдущей ревизией '
- добавить' новую ревизию '
Чтобы вернуться к старой ревизии, потребуется многократное применение предыдущих разностейисправления, пока вы не доберетесь до нужной вам ревизии.
Что бы вы ни делали, я думаю, вам нужно будет сначала распаковать данные, прежде чем использовать инструмент сравнения.Вот почему:
dd if=/dev/urandom of=myfile.1 bs=1024 count=10
cp myfile.1 tmp; cat tmp >> myfile.1
cp myfile.1 tmp; cat tmp >> myfile.1
cp myfile.1 tmp; cat tmp >> myfile.1
cp myfile.1 tmp; cat tmp >> myfile.1
dd if=/dev/urandom of=myfile.2 bs=1024 count=10
cp myfile.2 tmp; cat tmp >> myfile.2
cp myfile.2 tmp; cat tmp >> myfile.2
cp myfile.2 tmp; cat tmp >> myfile.2
cp myfile.2 tmp; cat tmp >> myfile.2
cat myfile.1 >> myfile.2
bsdiff myfile.1 myfile.2 diff
gzip -c myfile.1 > myfile.1.gz
gzip -c myfile.2 > myfile.2.gz
bsdiff myfile.1.gz myfile.2.gz gz.diff
rm tmp
ls -l
-rw-r--r-- 1 root root 17115 2011-04-05 10:54 diff
-rw-r--r-- 1 root root 21580 2011-04-05 10:54 gz.diff
-rw-r--r-- 1 root root 163840 2011-04-05 10:54 myfile.1
-rw-r--r-- 1 root root 11709 2011-04-05 10:54 myfile.1.gz
-rw-r--r-- 1 root root 327680 2011-04-05 10:54 myfile.2
-rw-r--r-- 1 root root 23399 2011-04-05 10:54 myfile.2.gz
Обратите внимание, что gz.diff
больше, чем diff
- если вы попробуете это с реальными файлами, я ожидаю, что разница будет еще больше.