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 можно будет перегенерить заново.

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

5

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

Какая ситуация в настоящий момент? Поломается ли база при неполной синхронизации через  Dropbox?

6

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

babaduk пишет:

Какая ситуация в настоящий момент? Поломается ли база при неполной синхронизации через  Dropbox?

Это как повезет. Все данные уж точно не потеряете.

Стратегия следующая: если вы переносите куда-то базу, или сделали большие изменения, затрагивающие всю базу (обработали все записи скриптом, или влили автоматом какую-нибудь крупную ветку, или еще что), то лучше убедиться что DropBox все засинхронизировал.

Если у вас обычная повседневная работа, то даже если пройдет неполная синхронизация с DropBox, то потерять можно максимум те записи/изменения, которые вы затронули при своей работе и неполностью синхронизировали.

Там же все просто, эффекты будут такие же как если бы вы писали программу с кодом, разложенным по куче небольших файлов, а потом неполностью засинхронизировались. Поломается ли у вас программа? Конечно да. Сможете ли вы вернуть код программы в удобовариваемый вид? При наличие определенной сноровки да. Так и тут.

Если боитесь за данные, а Dropbox работает плохо, например из-за плохого интернета, сделайте себе скрипт бекапа (лучше инкрементального, типа rdiff-backup), и поместите его вызов первым в команду синхронизации "Настройки - Синхронизация - Команда синхронизации". Если пользуетесь DropBox, так вообще, больше никаких команд в этой строке не нужно. Не забываете ставить галку "периодическая фоновая синхронизация". По сути, такими настройками вы просто запускете определенную команду в фоне с определенной периодичностью. И пусть у вас там периодически делается бекап. Тогда даже если что-то пойдет не так из-за неполной синхронизации Dropbox, у вас всегда локально будут в наличие сохраненные данные.

7

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

Спасибо. Сейчас нахожусь в поиске open source продукта для резервного копирования, который имеет windows и linux версии (rdiff-backup насколько я понял это только для linux). Желательно чтобы работал в виде службы, иметь поддержку  командной строки и желательно gui для ленивых. Ну и не быть заброшенным проектом.

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

Запустил синхронизацию через svn, все ни чего, но записи лучше не удалять, т.к. папка с данными остается. Команда delete не используется.

G: & cd "%a" & svn update %a & svn add --force %a & svn commit -m "auto commit MyTetra" %a

1. Строка для Windows.
2. Первая буква это диск, на котором лежат данные.

Как то бы на популярные системы хранения можно дописать синхронизацию.