1

Тема: Как синхронизировать данные MyTetra через интернет?

Здесь обсуждаем, как можно сделать систему синхронизации MyTetra через интернет.

По большому счету, нам нужно просто синхронизировать каталог data и пару файлов с конфигами.

Важно, что синхронизация должна быть атомарной - то есть, должны синхронизироваться все файлы на определенный момент. Частичная синхронизация файлов (например, при обыве связи) недопустима. По этой причине не подходит сервис DropBox, так как в нем возможны ситуации, когда одни файлы обновились, а другие еще не успели.

Предполагается, что для хранения данных будет использоваться какая-нибудь общеизвестная бесплатная служба или сервер. Вопросы безопасности и шифрации данных пока не рассматриваем.

Так как MyTetra - это персональный менеджер информации, то предполагается, что синхронизация происходит по следующему простому сценарию. При старте MyTetra, при выходе, при нажатии специальной кнопки "Synchro" происходит два действия:

1. Забираются изменения с сервера;
2. Заливатся локальные изменения на сервер.

В качестве службы хранения и синхронизации файлов я в данный момент рассматриваю следующие варианты:

1. SVN на SourceForge.net

http://sourceforge.net

Недостатки:

- Появление каталогов .svn во всех подкаталогах директории с данными.
- Неясно, как автоматически добавлять/удалять файлы, создаваемые в MyTetra, не пользуясь командами svn add, svn delete и т.д.
- Вроде как SVN не обеспечивает атомарность синхронизации

2. GIT на GitHub.com

http://github.com
Недостаток пока вижу один: неясно, как автоматически добавлять/удалять файлы, создаваемые в MyTetra, не пользуясь командами git add, git rm и т.д.

3. Rsync

http://rsync.samba.org/

Вроде как инструмент подходящий, но неясно, существует ли популярный бесплатный хостинг. Кто знает - высказываемся.

4. Duplicity

http://duplicity.nongnu.org/

Вроде как инструмент подходящий, и говорят, что в качестве хостинга можно использовать gmail.com (видимо через протокол IMAP, не смог разобраться). Кто-нибудь пользовался этой штукой?

Недостаток - вопрос с кроссплатформенностью. MyTetra - кроссплатформенная программа, а Duplicity существует только под *nix. Имеется ли возможность сделать сборку Duplicity под cygwin? Один товарищ вроде собрал - http://www.alexdimarco.ca/blog/duplicit … ndows.html, но сборку свою не выложил.

5. Что-то еще?

Что вы думаете по поводу решения для синхронизации MyTetra? Какое решение может подойти?

2 (изменено: Underwest, 04.05.2011 23:11:22)

Re: Как синхронизировать данные MyTetra через интернет?

http://habrahabr.ru/blogs/google/118705/ ? smile
а вообще для начала лучше сделать синхронизацию с локальным каталогом. Ведь есть куча и онлайн-хранилищ и просто готовых решений работающих например через webdav, а пытаться прикрутить синхру к ресурсам не предназначенным для хранилищ это займет уйму сил и времени
http://en.wikipedia.org/wiki/Comparison … g_services

3

Re: Как синхронизировать данные MyTetra через интернет?

При использовании dropbox (и т.п.) для синхронизации mytetra неизбежно будут возникать проблемы слияния.
Если на двух компах отредактировать содержимое, а потом на обоих включить dropbox, то с высокой вероятностью произойдут конфликты следующего рода:
1) новые созданные страницы могут оказаться расположенными в папках с одинаковым номером (как я понял, номера даются по порядку или типа того), что приведёт к конфликту, и разрешить его вручную будет сложно.
2) В mytetra.xml тоже будут конфликты слияния при изменениях в близких строках.

Возможные пути решения:
1) называть папки в base не 000000011, а рандомным числом, типа 4914ae6a5, что сводит вероятность коллизии на нет.
2) Хранить в файлах text.html избыточную информацию, достаточную, чтобы восстановить файл mytetra.xml при его полном удалении (т.е. теги, id родительской ноды, порядок сортировки, и т.д. Не так и много, имхо). Таким образом при любых проблемах файл mytetra.xml можно будет перегенерить заново.

4

Re: Как синхронизировать данные MyTetra через интернет?

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

Для получения последних изменений с сервера синхронизации используется команда:

git add . ; git commit -a -m "commit comment" ; git pull -s recursive -X theirs ; git push

Для заливки изменений на сервер используется команда:

git add . ; git commit -a -m "commit comment" ; git pull -s recursive -X ours ; git push

Предполагается, что первая команда запускается при старте MyTetra, вторая - при выходе из MyTetra. Если сделаю кнопочку "Syncro", то наверно будет выполняться сначала первая команда, потом вторая.

Я уже проверил для ситуаций когда например команда при выходе не срабатывает (ну что-то засбоило как будто). Вроде все четко продолжает работать.

Biga пишет:

1) новые созданные страницы могут оказаться расположенными в папках с одинаковым номером (как я понял, номера даются по порядку или типа того), что приведёт к конфликту, и разрешить его вручную будет сложно.
2) В mytetra.xml тоже будут конфликты слияния при изменениях в близких строках.

Возможные пути решения:
1) называть папки в base не 000000011, а рандомным числом, типа 4914ae6a5, что сводит вероятность коллизии на нет.

Видимо, буду добавлять рандомную строку.


Biga пишет:

2) Хранить в файлах text.html избыточную информацию, достаточную, чтобы восстановить файл mytetra.xml при его полном удалении (т.е. теги, id родительской ноды, порядок сортировки, и т.д. Не так и много, имхо). Таким образом при любых проблемах файл mytetra.xml можно будет перегенерить заново.

Нет, это бессмысленно. Лучше делать основную схему синхронизации так, чтоб таких ситуаций вообще не возникало.