On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 4092
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.04.15 21:42. Заголовок: Вопросы синхронизации MySQL и LetoDB


Есть сервер, на нем установлен MySQL и LetoDB.
Как в режиме реального времени переносить данные из LetoDB в MySQL ?



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 10 [только новые]


постоянный участник




Пост N: 537
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.04.15 23:22. Заголовок: Andrey пишетКак в ре..


Andrey пишет
 цитата:
Как в режиме реального времени переносить данные из LetoDB в MySQL ?


должен быть клиент для letodb (ловить изменения) и клиент mysql (переносить изменения) в одном приложении, возможно работающий на сервере, но это не обязятельно - вопрос времени появления данных в mysql 1 сек., 30 сек, 60 сек, 10 мин, ...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4094
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.04.15 23:41. Заголовок: SergKis пишет: вопр..


SergKis пишет:

 цитата:
вопрос времени появления данных в mysql 1 сек., 30 сек, 60 сек, 10 мин, ...


Может и неправильно ставлю вопрос, но пытаюсь пока для себя понять:
по какому событию клиент mysql может определить что база на LetoDb изменилась ?
По таймеру не хотелось бы...
Т.е. есть несколько баз base01.dbf, base02.dbf и т.д. В каждой базе с разной периодичностью, меняются/добавляются записи. Я конечно могу рядом с базой выкладывать семафорный файл (сразу из программы делать) - допустим base01.txt, а в нем через ";" указывать номера измененных записей. А после обработки клиентом mysql стирать этот файл.
Но это по моему не совсем правильно... Там несколько исключений появляется.
Как делаются такие системы (по синхронизации) разных баз ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 538
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.04.15 00:15. Заголовок: Andrey пишет:по како..


Andrey пишет:
 цитата:
по какому событию клиент mysql может определить что база на LetoDb изменилась ?


алгоритм примерно такой:
0. коннект к letodb и mysql уже есть
1. имеем список соответсвия таблица leto, таблица mysql, данные последнего обмена
2. в таблицы из списка в структуру добавим поле "^" - версия записи или "=" - timestamp время последней модификации (заполняет rdd), делаем тэг в индекс таблицы на это поле
3.клиент letodb проходит по списку, открывает таблицу leto, OrdSetFocus(на тэг модификации), dbGoBottom() и сравнивает данные последнего обмена и значение из поля, если не равны, ставим scope или подвод в табл. letodb и все оставшиеся записи переносим в таблицу mysql, заносим значение из поля в данные последнего обмена.
4. так отрабатываем всю таблицу соответсвия до конца

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 539
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.04.15 00:22. Заголовок: PS. letodb и mysql м..


PS. letodb и mysql могут находиться на разных серверах. Если программа все время висит, то запуск - таймер, если актуальность 5-10 минут и больше запускай чем хочешь, сам или планировщик, большого значение это не имеет, на мой взгляд

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4096
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.04.15 00:52. Заголовок: SergKis пишет: алго..


SergKis пишет:

 цитата:
алгоритм примерно такой:


Супер !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 541
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.04.15 01:10. Заголовок: Andrey напомню, таб..


Andrey
напомню, таблица mysql длжна иметь уникальный ключ, находящийся и в таблице letodb и данные в mysql вносить командой InsertUpdate по ключу

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4142
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.15 21:57. Заголовок: SergKis пишет: 2. в..


SergKis пишет:

 цитата:
2. в таблицы из списка в структуру добавим поле "^" - версия записи или "=" - timestamp время последней модификации (заполняет rdd), делаем тэг в индекс таблицы на это поле



База локальная в другом часовом поясе. ЛетоДБ на сервере в Москве, московский часовой пояс.
Если поле делаю типа "=" - timestamp, то как значение этого поля запишется на сервер ЛетоДБ и как потом сравнить(получить) новые записи с ЛетоДБ на базу MySQL ?
Я поле типа "=" никогда не использовал....

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 620
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.04.15 22:58. Заголовок: Andrey пишет:Я поле ..


Andrey пишет:
 цитата:
Я поле типа "=" никогда не использовал


По твоему описанию 3-и базы:
1. локальная
2. letodb
3. MySQL
что куда не понятно. Предполакаю local => letodb => MySQL. Говорим о letodb => MySQL.
Я еще не перешел на эту версию letodb. сечас (2-х поточная версия) использую симв. поле 17 байт с заполнением в триггере DtoS(Date()+StrTran(Time(), ':', '')+right(hb_ntos(hb_milliseconds()), 3), делаю тег и пляшу ... меняются данные letodb, выборка изменений на local базу.
Из letodb выбирать изменненые записи, без разницы часовой пояс. Обрабатываешь и запоминаешь время сервера с letodb клиентом выборки. Изучи преобразования типа TimeStamp в строку и обратно - пригодится.
Можно вместо поля = использовать ^ - версия записи (каждая запись будет иметь свой номер-счетчик) и работать от нее.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4143
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.15 23:57. Заголовок: SergKis пишет: что ..


SergKis пишет:

 цитата:
что куда не понятно. Предполагаю local => letodb => MySQL. Говорим о letodb => MySQL.


Всё правильно !
SergKis пишет:

 цитата:
Можно вместо поля = использовать ^



А что лучше использовать для быстрой выборке из letodb для MySQL ?
Если использовать тип "=" то можно наверно держать открытым индекс по этому полю и сравнивать это поле с MySQL.
Допустим 10 записей в letodb было изменено. делаем цикл по базе letodb и сравниваем с аналогичным полем MySQL.
Как попадается 1-ое одинаковое значение (11-я запись) в MySQL, то выход из цикла. В результате придётся пробегать не всю базу а только часть её.
Правильно ли я понял алгоритм сравнения ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 621
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.04.15 08:08. Заголовок: Andrey пишет:Допусти..


Andrey пишет:
 цитата:
Допустим 10 записей в letodb было изменено. делаем цикл по базе letodb и сравниваем с аналогичным полем MySQL


Об этом, я вообще не говорил, прочитай алгоритм сначала и медленно (с карандашем).
Речь шла о загрузке изменений из letodb => MySQL и все.
Что использовать = или ^, это тебе решать. Создай (для простоты DBFCDX) тестируй и анализируй. Главное, правильно, сформулируй чего хочешь достигнуть, какую архитектуру строишь.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 405
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет