Быстрая синхронизация...?
От: Shershen  
Дата: 28.01.04 23:08
Оценка:
Допустим, есть две одинаковые папки. Нужно следить за ними, и когда в одной изменится инфа,
нужно очень быстро, не переписывая весь файл, изменить изменившуюся часть информации в другой папке.

Т.е. файл 1: abcdefg -> меняется на wbcdefg
файл 2: мы перезаписываем только первый символ во втором файле.
и т.п.

Вобщем, такая синхронизация получается.
Надеюсь, понятно выразился


Есть соображения как это сделать?
Можно и немного отступить от сути, главное чтобы быстро было.

Буду очень благодарен помощи!
Re: Быстрая синхронизация...?
От: Legacy  
Дата: 29.01.04 01:12
Оценка:
Здравствуйте, Shershen, Вы писали:

S>Есть соображения как это сделать?

S>Можно и немного отступить от сути, главное чтобы быстро было.

S>Буду очень благодарен помощи!


Наверное надо менять изменившуюся часть файла
Или вы думаете, что это как-то можно сделать на уровне системы?
Re: Быстрая синхронизация...?
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.01.04 03:57
Оценка:
Здравствуйте, Shershen, Вы писали:
S>Есть соображения как это сделать?
Вообще-то это binary patching. Поскольку операционка не умеет выполнять вставки, то нужно фактически выполнить побайтное сравнение двух файлов и перезаписать те места, которые изменились.
Это означает, что тот файл, который собственно изменился, тебе придется прочитать целиком — в пользовательском режиме винды нет способа узнать, в каком месте произошло изменение. Можно немножко ускорить события, если избежать полного перечитывания второго файла для сравнения. Это можно сделать, порезав его на фрагменты и вычислив для них контрольные суммы. Теперь изменившийся файл обсчитывается тем же способом, и если контрольная сумма какого-то фрагмента не совпала, то значит в нем есть изменения. А те фрагменты, в которых сумма совпала, можно безболезненно скипать.
S>Можно и немного отступить от сути, главное чтобы быстро было.
Если тебе просто очень хочется, чтобы заведомо одинаковый файл был одновременно в двух местах, используй линки на уровне файловой системы. Они поддерживаются начиная с NTFS 4, если не ошибаюсь. Их умеет делать например FAR. Это гарантированно самый быстрый способ.
А вот именно реплицировать файл еще быстрее, чем я описал в первом способе, можно перейдя в режим ядра. Можно написать драйвер-фильтр файловой системы, который будет все изменения в одном файле отображать в другой. При этом дописывание 1 символа в конец гигабайтного файла не приведет к нудному его сканированию.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.