Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программа клиен для очень удалённого сервера mysql, метод борьбы с разрывом соединения 
:(
    Опции темы
AlexeyFyodorov
Дата 3.3.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 13.12.2008

Репутация: нет
Всего: нет



  Приветствую. Мною была написана программа для ведения учёта товара (типа 1С), там закупки, продажи, перемещения и т.п., не принципиально. Общая логика такая: на сервере крутится БД, а все, кому положено, коннектятся к ней через инет. Использовал Delphi7, MySQL5.1 и Zeos6.6.5. Пока тестиров в перелах Питера всё было хорошо, а когда выдал поставщикам товара из штатов, начались проблемы. Периодически программа теряет соединение с сервером, видимо из-за протяженности маршрута, соответственно возникают сложности с вылавливанием удачных/неудачных изменений (где то используется кэширование изменений датасета, где то нет). Конечно, логичнее было бы организовывать всё это на базе сайта, но я и так не ахти какой программер, а в вебе вообще почти 0, да и нет желания разбираться уже 2 раза бросал на полпути.
  Подскажите пожалуйста возможные методы решения этой проблемы. Репликация не подходит, т.к. нет возможности её удалённо настроить, да и использоваться это всё будет на разных компах, короче нужно по принципу запустил и работает. Пока есть только одна идея: прицепить клиентов к SQLite (что за зверь такой MySQL Embedded и как его прикрутить я с разбегу не разобрался) и сделать что-то типа синхронизации по требованию, актуальность данных не критична. Не скажу, что могу сделать это на раз-два, но хотя бы представляю как. Возможно есть метод проще и правильнее? Повторюсь, я самоучка, разбирался только в том, что было необходимо для текущей задачи и возможно не знаю очевидных вещей.

  Зарание спасибо. 

PM MAIL   Вверх
skyboy
Дата 4.3.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



использовать транзакции. в случае внезапного разрыва соединения, по крайней мере, не будет "половинчатых данных" в базе. останется решить проблему, чтоб на клиенте не надо было по несколько раз забивать одни и те же недоотправленные данные. например, не делать запрос к базе напрямую, а бросать запросы в некий пул, который обрабатывается отдельным потоком и посылает, посылает, посылает повторно одни и те же запросы, пока они наконец не проскочат в базу. с другой стороны, возникает проблема: отложенные запросы на изменение данных могут "пройти" позже, чем запросы на выбор данных. так что надо всю работу с БД сделать через этот некий пул запросов.
PM MAIL   Вверх
AlexeyFyodorov
Дата 4.3.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 13.12.2008

Репутация: нет
Всего: нет



А если применительно к zeos, то упрощенно это что то похожее на:

Код

var
  flag: boolean;

  flag := true;
  ZQuery.CachedUpdates := true;

  while flag do
  begin
  try
    ZConnection.StartTransaction;
    ZQuery.ApplyUpdates;
    ZQuery.CommitUpdates;
    ZConnection.Commit;
    flag := false;
  except
    //Здесь будем бороться с разрывом.
    ZConnection.Reconnect; 
  end;
  end;


Не могу разобраться как в zeos транзакции работают, да и куда это повесить в тех случаях, когда кэширование использовать не целесообразно?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.4746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.