Russian Qt Forum
Ноябрь 26, 2024, 02:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
Синхронизация Базы данных Локальной и Интернет сервера MySQL
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Синхронизация Базы данных Локальной и Интернет сервера MySQL (Прочитано 17702 раз)
vvaaavv
Новичок
Offline
Сообщений: 11
Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
:
Март 02, 2020, 14:22 »
Есть разработанная мной программа на Qt.
Она работает с Базой Данных на локальной машине, через QSqlDatabase::addDatabase("QODBC","First")
Существует вторая База Данных в интернете на сервере, работает через QSqlDatabase::addDatabase("QMYSQL","Second")
У обоих Баз Данных одинаковая структура.
В первую пишутся все данные и читаются.
Во вторую только пишутся (Insert, Update, Delete).
Всё работает как полагается, если один пользователь.
Пришло время подключить ещё одного пользователя (сервер в инете будет общий, Так же как и локально).
Я так понимаю, что все изменения произведённые вторым пользователем никак не отобразятся у первого пользователя, ну по сути так же наоборот.
Можно конечно было вывернуться в такой ситуации, чтобы ведущей БД был сервер в инете. Но здесь есть несколько минусов, самый основной, что интернета может не быть, какое-то время, а работать надо.
Вот как выкрутиться из данной ситуации?
Как правильно организовать синхронизацию?
Гугл не понимает меня, что я от него хочу!
Или пните в нужном направление, уже дня 3 потратил. А в голове только один бред.
Заранее спасибо ответившим.
Записан
vbv
Чайник
Offline
Сообщений: 59
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #1 :
Март 02, 2020, 15:35 »
Для начала, думаю нужно понять для себя:
1. что именно подразумевается под "синхронизацией".
2. ................................ под базой данных.
3. ................................ сервером базы данных.
4. Как подключается пользователь?
PS:
Сервер будет общий ....., а база данных???
т.е. если сервер общий а у каждого пользователя своя база данных.... - они никогда одни и те-же данные не увидят.
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #2 :
Март 02, 2020, 15:37 »
С пониманием того, что вы хотите, не только у гугла проблемы)) Если речь о синхронизации сервера с локальным узлом, то могу предложить такую распределенную транзакцию.
На локальном узле таблицы имеют уникальный id и дополнительное поле, например phase boolean default false. При добавлении/изменении записи это поле принимает значение false.
По таймеру некая функция отбирает все записи с phase=false и отправляет на сервер. Протокол, API и формат - по вкусу. Мне нравится https+REST API+json.
Сервер по получении такой порции у себя в БД удаляет записи с полученными id и вставляет новые/измененные записи.
На узел отправляется список обновленных id. На узле для этих записей phase устанавливается true. Транзакция завершена.
Для удаления записей нужна вспомогательная таблица, куда записывается имя таблицы и id удаляемых записей. В REST API сервера для этой функции предусматриваем отдельный ресурс (URL). Транзакцию замыкаем аналогичным образом.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
vvaaavv
Новичок
Offline
Сообщений: 11
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #3 :
Март 02, 2020, 17:51 »
Цитата: sergek от Март 02, 2020, 15:37
На локальном узле таблицы имеют уникальный id и дополнительное поле, например phase boolean default false. При добавлении/изменении записи это поле принимает значение false.
Спасибо огромное, Это как раз то что я хотел. Буду реализовывать...
Только надо всё будет основательно продумать. Теперь есть представление в какую сторону двигаться!
Записан
vvaaavv
Новичок
Offline
Сообщений: 11
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #4 :
Март 02, 2020, 18:23 »
Цитата: vbv от Март 02, 2020, 15:35
Для начала, думаю нужно понять для себя:
Я в школе плохо учился, как вот только институт закончил сам не понимаю
Цитата: vbv от Март 02, 2020, 15:35
1. что именно подразумевается под "синхронизацией".
а что синхронизация какое-то имеет другое понятие? Объединение БД, что-бы они всегда были "Одинаковые" не?
Цитата: vbv от Март 02, 2020, 15:35
2. ................................ под базой данных.
3. ................................ сервером базы данных.
БД - Набор таблиц с полями и их значениями. Ну с сервером БД, да немного некорректно выразился, согласен. Для меня это такое место в сети интернет, где располагается моя БД.
Цитата: vbv от Март 02, 2020, 15:35
4. Как подключается пользователь?
Я же написал... через программу, которой всё равно кто ей пользуется, может пользоваться один человек, а может 10, Но это всё за одним компьютером. Надо поставить ещё один компьютер, только в другом городе, сколько там пользователей будет я не знаю
Ну да тоже не до конца тему раскрыл, надо было больше информации написать...
Цитата: vbv от Март 02, 2020, 15:35
PS:
Сервер будет общий ....., а база данных???
т.е. если сервер общий а у каждого пользователя своя база данных.... - они никогда одни и те-же данные не увидят.
Печалька! А почему не увидят? Не захотят? Не?
Меня уже поняли и уже посоветовали как можно организовать,
если есть предложения, я готов выслушать, а так это всё вода. Спасибо за участие!
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #5 :
Март 02, 2020, 18:37 »
Код:
Цитата: vvaaavv от Март 02, 2020, 17:51
Это как раз то что я хотел. Буду реализовывать...
Ну, я не уверен, что вы хотели этого. Я описал возможный механизм синхронизации таблиц, но я не понял ничего про второго пользователя))
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
vvaaavv
Новичок
Offline
Сообщений: 11
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #6 :
Март 02, 2020, 18:57 »
Цитата: sergek от Март 02, 2020, 18:37
Код:
Цитата: vvaaavv от Март 02, 2020, 17:51
Это как раз то что я хотел. Буду реализовывать...
Ну, я не уверен, что вы хотели этого. Я описал возможный механизм синхронизации таблиц, но я не понял ничего про второго пользователя))
В голове бардак образовался, я походу всех сбил с толку с этим вторым пользователем. Необходима синхронизация между локальной БД и той что в Интернете. Так будет правильней. А какие ещё есть варианты?
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #7 :
Март 02, 2020, 19:24 »
Цитата: vvaaavv от Март 02, 2020, 18:57
А какие ещё есть варианты?
Средствами самой СУБД, например.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
vbv
Чайник
Offline
Сообщений: 59
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #8 :
Март 02, 2020, 19:59 »
Цитата: sergek от Март 02, 2020, 19:24
Цитата: vvaaavv от Март 02, 2020, 18:57
А какие ещё есть варианты?
Средствами самой СУБД, например.
Поддерживаю: Репликация средствами СУБД.
С несколькими локальными копиями, будет веселье, при записи в локальную базу и потом синхронизация......
Хотя, если нет счетчиков/триггеров и прочей серверной логики....
Записан
vvaaavv
Новичок
Offline
Сообщений: 11
Re: Синхронизация Базы данных Локальной и Ин&
«
Ответ #9 :
Март 02, 2020, 20:10 »
Цитата: vbv от Март 02, 2020, 19:59
Цитата: sergek от Март 02, 2020, 19:24
Цитата: vvaaavv от Март 02, 2020, 18:57
А какие ещё есть варианты?
Средствами самой СУБД, например.
Поддерживаю: Репликация средствами СУБД.
Двусторонняя (Двунаправленная) репликация, вот что мне нужно. Вот как это называется. Буду гуглить, гугл начинает меня понимать...
Спасибо всем, направили по нужному пути!
«
Последнее редактирование: Март 03, 2020, 11:59 от vvaaavv
»
Записан
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #10 :
Март 04, 2020, 09:15 »
Цитата: vvaaavv от Март 02, 2020, 18:57
я походу всех сбил с толку с этим вторым пользователем. Необходима синхронизация между локальной БД и той что в Интернете.
Вот это куда более конкретная формулировка! Могу вас похвалить, многие гораздо дольше доходят до постановки вопроса.
Теперь ещё пара наводящих вопросов.
Первое:
Цитировать
Она работает с Базой Данных на локальной машине, через QSqlDatabase::addDatabase("QODBC","First")
Существует вторая База Данных в интернете на сервере, работает через QSqlDatabase::addDatabase("QMYSQL","Second")
Видно, что вторая БД реализована на СУБД MySQL. А что с первой? Она тоже сделана на MySQL? Просто через ODBC можно подключить практически любую СУБД.
Я это к чему спрашиваю... Если у вас обе СУБД одного типа, задачка чуток попроще, можно взять готовые средства репликации именно для неё (гугл по запросу "репликация для MySQL" выдаёт разные интересные статьи).
А вот если СУБД разных типов, придётся писать суровый велосипед с квадратными колёсами.
(Что у обоих БД одинаковая структура - это я прочёл. Но структура - это несколько другое.)
Второе. Даже для одной СУБД правильная настройка репликации - не совсем тривиальная задача. Поэтому тщательно подумайте, вам точно надо реплицировать в обе стороны или хватит односторонней? (Она чуть попроще.)
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
vvaaavv
Новичок
Offline
Сообщений: 11
Re: Синхронизация Базы данных Локальной и Ин&
«
Ответ #11 :
Март 04, 2020, 13:27 »
Цитата: DarkHobbit от Март 04, 2020, 09:15
Видно, что вторая БД реализована на СУБД MySQL. А что с первой? Она тоже сделана на MySQL? Просто через ODBC можно подключить практически любую СУБД.
В общем предыстория. В 2007 году по просьбе друзей бизнесменов, я написал программу, которая работает на MS Access и использует БД mdb. И друзьям понравилась, да я и сам пользовался её, до 2014 года, где постоянно дорабатывал её. Пока не вышел из того бизнеса. Главным выбором почему именно Access: было надо, чтобы поставил прогу и она работала, без всяких настроек ODBC и т.д, т.е без лишнего геморроя. Да и программировать я мог только в Access (Институт однако
) Друзья продолжали работать с программой.
Жизнь идёт дальше и меняются реалии, сейчас эта программа морально и физически устарела
Я решил отойти от Access в целом. Начал изучать С++ и Qt.
Пол года назад переписал программу под Qt C++, Естественно БД оставил на mdb (Access). Даже с драйверами ODBC не пришлось возиться. Просто поставил и работай, даже самого Access не надо на локальной машине, вообще красота.
Была поставлена задача, где будет использоваться БД на сервере в инете. Я конечно думал что будет больше возни, но оказалось всё намного проще. И программа спокойно работает с такой БД. Пришлось конечно исправлять запросы, на совместимость обоих систем (Access и MsSQL).
Здесь есть большой минус, что интернет должен быть всегда.
что не всегда так.
Вот сейчас мне необходимо совместить две разные БД, которая одна локальная (MS Access (mdb)), другая в инете (MySQL)
И здесь я вижу только двунаправленную репликацию для выполнения такой задачи. Скорее всего буду изобретать велосипед
Потому что, средствами самой СУБД это точно не получится. Ну по крайней мере без всяких костылей.
Цитата: DarkHobbit от Март 04, 2020, 09:15
Я это к чему спрашиваю... Если у вас обе СУБД одного типа, задачка чуток попроще, можно взять готовые средства репликации именно для неё (гугл по запросу "репликация для MySQL" выдаёт разные интересные статьи).
А вот если СУБД разных типов, придётся писать суровый велосипед с квадратными колёсами.
(Что у обоих БД одинаковая структура - это я прочёл. Но структура - это несколько другое.)
Второе. Даже для одной СУБД правильная настройка репликации - не совсем тривиальная задача. Поэтому тщательно подумайте, вам точно надо реплицировать в обе стороны или хватит односторонней? (Она чуть попроще.)
Я пока сделал (т.е делаю, доделал чуток осталось (поправить интерфейс программы)) Копирование локальной БД на сервер БД в инете. (Делаю автоматически, было вручную. Не могу точно выразиться. Делаю, так, чтобы можно было всё это делать без моего участия. Т.е дорабатываю программу. Если взять во внимание мой первый пост в этой теме. То выполнялись все запросы в определённую функцию, которая делала так: в локальную сразу, и в инете. Если инета нет, то все запросы сохраняются в определённой таблице, где потом выполняются, потом удаляются)
Потом сделаю репликацию в одну сторону с локальной БД, на сервер в инете. (Надо доделывать, пол пути пройдено)
Потом буду делать двунаправленную. Нужно для того, чтобы два и более пользователя (Разные локальные компьютеры, на большом расстоянии, т.е не рядом) работали с одной БД как локально (если нет инета) так и онлайн. (Здесь может получиться зацикливание, вот с этим был вопрос. И ещё если добавить ещё один комп с программой, как быть с ним, чтобы у него тоже всё реплицировалось.)
Как-то так... Извиняюсь заранее за ошибки, как смог так выразился.
Если есть предложения как можно всё это дело реализовать, я только за. Рассмотрю варианты, предложения. Да и сам готов многое поменять, было бы желание и возможности.
Учтите, что я чайник, я бы сказал так - я не профи.
«
Последнее редактирование: Март 04, 2020, 13:49 от vvaaavv
»
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #12 :
Март 04, 2020, 14:30 »
мда.. Теперь много мусора, а суть задачи все равно ускользает.
Правильно ли я понял, что есть две независимые БД, с которыми работают две группы пользователей. Одну вы называете локальной (интересно, почему - к ней имеется доступ только по локальной по сети?)
Другая расположена на каком-то сервере, с доступом по сети интернет.
Обе БД выполняют одинаковую задачу, но две группы пользователей принципиально работают только со своими БД.
И стоит задача синхронизации данных в обоих БД с учетом того, что взаимодействие этих БД через интернет может отсутствовать.
Так?
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL
«
Ответ #13 :
Март 04, 2020, 14:55 »
[off]
Цитата: sergek от Март 04, 2020, 14:30
мда.. Теперь много мусора, а суть задачи все равно ускользает.
Как говорит один клиент
Код:
critique is easy
[/off]
Записан
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Синхронизация Базы данных Локальной и Ин&
«
Ответ #14 :
Март 04, 2020, 16:07 »
Цитата: vvaaavv от Март 04, 2020, 13:27
Вот сейчас мне необходимо совместить две разные БД, которая одна локальная (MS Access (mdb)), другая в инете (MySQL) И здесь я вижу только двунаправленную репликацию для выполнения такой задачи.
Я бы, честно говоря, смигрировал сначала с Access на MySQL даже для локальной БД (однонаправленная одноразовая миграция - задача ГОООРАЗДО более простая, чем организация двусторонней репликации в гетерогенной БД), а потом уже организовал репликацию средствами MySQL.
Цитата: vvaaavv от Март 04, 2020, 13:27
(Access и
MsSQL
).
СТОП!
Так что же у вас в интернете: MySQL или MS SQL? Это вообще говоря две СОВСЕМ РАЗНЫЕ СУБД. И с технической, и с лицензионно-юридической точек зрения.
«
Последнее редактирование: Март 04, 2020, 16:09 от DarkHobbit
»
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...