AlexanderMt
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Привет форумчанам! Есть нетривиальная задачка, у которой лично я вижу как минимум 3 реализации и над которой возможно есть смысл подумать. Кстати, насколько я знаю в том же dropbox'е например это НЕ решено. Он просто запиливает данные из последнего хоста по дате изменения. Надеюсь вам будет интересно! Тема - синхронизация 3 и более текстовых файлов по содержимому с исключением повторений. Можно для разнообразия даже с сохранением повторений с учётом позиции. Представьте что у нас есть 2 сервера, которые пишут что-то в текстовые файлы (по одному у каждого) независимо друг от друга. Нужно чтобы эти изменения перекрёстно сохранялись в файлах серверов, то есть "дописывали" друг друга. С двумя это довольно просто т.к. берём изменения в первом, дописываем (снизу списка 2го) из первого во второй то, чего нету во втором. Повторы - исключаем. Копируем второй в первый и ура - у нас готова синхронизация. Что-то изменилось в 1 или 2 - повторяем процедуру. Теперь представьте что есть 3 сервера. Тут уже интереснее. Они все пишут три разных лога (допустим возьмём логи). Нам надо раскидать все изменения в файлах друг в друга так, чтобы исключались повторения и в то же время сохранялись уже сделанные изменения (ведь он за это время мог что-то написать? он же не знает что его будут синхронизировать с первым и третьим) + то что было ранее до этого. Или такой пример. Допустим у вас есть лог аськи и вы хотите видеть одинаковую историю на 3-х компьютерах: ноутбуке, рабочем и домашнем. История аськи для вас нужна потому что там и деловая переписка, и личная, и много чего ещё. Да и вообще она у вас с 2005 года и сообщений там уже дофига. Теперь представим что вы узнали что такое dropbox и на радостях удачно синхронизировали через него все три девайса. Теперь лог везде одинаковый, ура! Как-то утром, перед походом на работу вам захотелось пообщаться в аське, но вот беда - провайдер перекрыл доступ к dropbox'у у вас дома. Клиент что-то записал в логи аськи, файлы изменились и вы благополучно пошли на работу. Пришли на работу и вот опять беда - провайдер внезапно и тут отрубил dropbox. Огорчившись этому, вы продолжили общаться в аське без той истории, что была у вас сохранена дома. Пошли вы вечером значит в кафе, открыли любимый нетбук и - вот радость то - здесь дропбокс работает! Опять пообщались в аське, дропбокс благополучно сохранил это на свои сервера и вы пошли домой. На следующее утро дома дропбокс "открылся" и начал синхронизацию, да и на работе, кстати, пока вас там не было (ориентировочно ночью - так сказал электрик Вася) он тоже открылся. Как вы думаете, что останется в итоге на всех устройствах, когда они подсинхронизируются? Правильно - последнее что вы писали вечером в кафе. Остальное вы потеряете. Вот вопрос господа. Какие варианты "прозрачной" two-way синхронизации вы предложите в том случае, когда задача будет стоять так "вернуть структуру во всех файлах "как оно должно было быть"? P.S> насколько я знаю, сейчас эдакую "звёздную" организацию по восстановлению сообщений в том порядке, в котором они были получены, имеет skype. Он потихоньку дописывает лог и сверху и снизу на всех устройствах. P.P.S> кстати если неправильно написать алгоритм, то можно сделать нехилую такую рекурсию с бесконечным циклом, из-за которого итоговый файл начнёт пухнуть до тех пор, пока не закончится место на диске | Всего записей: 2 | Зарегистр. 16-07-2012 | Отправлено: 00:39 20-08-2012 | Исправлено: AlexanderMt, 02:47 20-08-2012 |
|