Russian Qt Forum
Ноябрь 23, 2024, 00:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Синхронизация баз данных  (Прочитано 15143 раз)
Karl-Philipp
Гость
« : Сентябрь 03, 2009, 21:44 »

Изменения в БД магазина доложны анализироваться на удалённом компьютере. Для этого на удалённом компьютере создаётся аналогичная база, куда будут передаваться изменения (в виде запросов) каждые 2-10 минут для синхронизации и последующего анализа.

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

Вопросы:
1) как лучше передавать запросы между БД магазина и удалённым компьютером? Ответ: Почитал про сокеты, потом про QNetworkAccessManager, вроде бы подходят, а что лучше (быстрее, надёжнее)?
2) как передавать данные? Нашёл такую вещь как QByteArray, тоже вроде бы подходит.

upd: удалённый компьютер, на котором анализируются данные находится от магазина (ов) на расстоянии от нескольких километров до двух тысяч километров.
« Последнее редактирование: Сентябрь 03, 2009, 22:30 от terlan » Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #1 : Сентябрь 04, 2009, 07:53 »

Недавно занимался похожей темой, посмотри в сторону SOAP довольно токи удобная весчь. и у КуТе классы для работы с ним есть  http://doc.trolltech.com/solutions/3/qtsoap/qtsoap-overview.html.
Записан
Karl-Philipp
Гость
« Ответ #2 : Сентябрь 04, 2009, 08:15 »

ecspertiza!
похоже, то, что надо. Спасибо большое Улыбающийся
Записан
UVV
Гость
« Ответ #3 : Сентябрь 04, 2009, 08:38 »

Ice ?
Записан
Karl-Philipp
Гость
« Ответ #4 : Сентябрь 04, 2009, 09:25 »

Ice использует бинарный протокол передачи данный, и это действительно айс(уж куда пошустрее будет XML в SOAP).
Но не айс то, что технология распространяется под двойной лицензией: GNU GPL или коммерческой. Покупать возможности нет, а вот закрыть код надо.
Хотя программа будет использоваться фактически внутри фирмы. Вот тут то возникают вопросы... по поводу закрытия кода. Можно ли?
Записан
Karl-Philipp
Гость
« Ответ #5 : Сентябрь 04, 2009, 09:58 »

только вот незадача то:
мне же надо передать всего ничего - одну строчку(запрос). Правда в случае разрыва соединения, когда оно восстановится придется передавать десятки, возможно тысячи строчек. Хотя это не меняет сути темы.

Может все-таки QTcpSocket + QDataStream Непонимающий
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #6 : Сентябрь 04, 2009, 11:16 »

Если чесно я пока не знаю что ты выбрал SOAP или Ice или что то ещё, но могу сказать про SOAP то что ты в неё можешь передавать не строчку запроса а данные из таблицы которые необходимо синхронизировать и генерить запрос на лету при приёме данных, Soap имеет замечательную особенность у него данные либо дошли либо нет. А в клиентской части пишешь грамотный парсинг и в общем то всё, там уже будет всё равно сколько строчек пришло.
Записан
UVV
Гость
« Ответ #7 : Сентябрь 04, 2009, 12:34 »

Вот тут то возникают вопросы... по поводу закрытия кода. Можно ли?

Небольшое непонимание лицензии GPL. Если ты пишешь для своей организации и не собираешься продавать приложение кому-либо другому, то ты ничего не нарушаешь. Правда в случае Ice, у тебя структура системы должна измениться =)
Насчёт гарантии доставки, я пока не понял, как Ice себя ведёт в случае разрыва связи... т.е. как её грамотно восстановить =)
http://www.zeroc.com/faq/connectionClosureCallback.html
Записан
Karl-Philipp
Гость
« Ответ #8 : Сентябрь 04, 2009, 14:12 »

>>Правда в случае Ice, у тебя структура системы должна измениться =)
а можно по-подробнее, пожалуйста. Как это она должна измениться?
Записан
MrLink
Гость
« Ответ #9 : Май 21, 2010, 11:52 »

Я конечно не спец по синхронизациям БД. Но этот вопрос изучал, и кое-что делал. У меня возникли вопросы: как Вы намереваетесь обрабатывать ошибочные ситуации? Например, обрыв связи во время передачи или отключение интернета на длительное время, а также, возможное, дублирование записей (насколько я помню, это называется коллизией) и т.д. и т.п. Вообщем как будет обеспечиваться надёжность?
Записан
crossly
Гость
« Ответ #10 : Май 21, 2010, 14:07 »

какая БД используется??
Записан
Karl-Philipp
Гость
« Ответ #11 : Май 21, 2010, 14:25 »

Я конечно не спец по синхронизациям БД. Но этот вопрос изучал, и кое-что делал. У меня возникли вопросы: как Вы намереваетесь обрабатывать ошибочные ситуации? Например, обрыв связи во время передачи или отключение интернета на длительное время, а также, возможное, дублирование записей (насколько я помню, это называется коллизией) и т.д. и т.п. Вообщем как будет обеспечиваться надёжность?
Подобные вопросы возникали и у меня. Только вот проект заморозился.
Планировалось использовать Mysql.
Записан
crossly
Гость
« Ответ #12 : Май 21, 2010, 15:08 »

может стоит задуматся о нормальной СУБД с поддержкой репликаций...
Записан
ритт
Гость
« Ответ #13 : Май 21, 2010, 15:48 »

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

посмотри google protobuf. оно, конечно, далеко от совершенства, но по возможностям сильно обходит soap
Записан
Karl-Philipp
Гость
« Ответ #14 : Май 21, 2010, 15:51 »

да,да, мы уже говорили об protobuf, тогда они еще назывались, вроде бы google protocols
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.078 секунд. Запросов: 22.