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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL : Март 10, 2020, 14:36
А вообще куда намного интересней изобретать велосипед Улыбающийся
К тому же не все таблицы нужны для репликации, есть такие таблицы, которые относятся только к самой программе на данном компьютере.

Вроде всё сделал. Создал всякие вспомогательные функции и т.д.
Как сделал:
В общем создал новую таблицу Query_Table в которую засунул Id (Счётчик), DateTime (Дата время), Primary (логический), Query (Большой текст), User (логический).
В неё записываются все запросы (только не Select)
В локальной БД создаются 2 строки в этой таблицы (один к самой локальной БД, другой к инет БД), где если запрос был выполнен User помечается на true
Создал функцию по таймеру (20 сек. пока поставил), которая собирает все невыполненные запросы из этой таблицы, и выполняет, если соединение установлено, затем отмечаются они как выполненные.
Для обратной репликации:
В инет БД создал такую же таблицу, только столбцов с User может быть больше (если два пользователя - то добавляется User_2)
Там тоже, при удачном выполнение запроса - User = 1, если этот запрос поступил от него и был выполнен, а для User_2 = 0 (По умолчанию)
В той же самой функции по таймеру, собирает все невыполненные запросы из инет БД и выполняет их, в случае успеха помечает нужного User как True.

Только сегодня пару часов назад, начал тестировать. Вычисляю всевозможные отклонения, исключения и т.д
Работы ещё много в этом направление. Подводные камни в любом случае появятся.!
2  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL : Март 10, 2020, 11:09
Надо, чтобы в системе был настроен источник ODBC, надо, чтобы был MS Office с Access и, скорее всего, не какой попало версии
Я тоже так думал, пока не начал тестировать программу в разных Windows. Программа + файл БД (mdb, для старых БД Access 2000) Работает на ура, на моё удивление 7,8,10 и без разницы какой офис, Самое интересное, что Access вообще может быть не установлен. Сам был в шоке. Думал что Access придётся определённый ставить, а нет.
(знаю случай, когда админы на объекте, не подумав, накатили новый офис, после чего отвалились программы, завязанные на его COM-объекты)
Вот поэтому я решил больше никогда не писать в самом Access, по моей практике, всё что было придумано в Access 2002 уже не компилилось в 2007. Да и скорость выполнения в сотни раз медленнее. (Если брать расчёт в целом, не с Базами Данных)
Если всё равно инструкцию по обслуживанию системы писать, лучше уж унифицировать базы и инструкцию писать именно на этот случай.
Это уж понятно. Куда без этого.
Почему-то никто не вспомнил про PostgreSQL)) Там вообще ничего настраивать не нужно. В Linux ставится одним нажатием sudo upt-get install.., в Windows уже не помню, но раза 3-4 подтвердить настройки по умолчанию. Работать с ней- одно удовольствие.
Надо рассмотреть данный вариант, да и в интернете на сервере можно такую БД создать.
3  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Ин& : Март 04, 2020, 18:16
Я бы, честно говоря, смигрировал сначала с Access на MySQL даже для локальной БД
Я рассматривал данный вариант. Я конечно могу круто ошибаться: Мне не понравилось что нужно отдельно устанавливать MySQL на комп и настраивать его. Давным давно я с этим делом провозился достаточное количество времени. Необходимо просто поставить программу и что бы она работала. На MySQL возможно будет добиться такой реализации? я имею в виду на компьютер поставить так, что бы запустил и она установилась и моя программа работала с ней. (Я понимаю, что возможно всё, только сколько это займёт время) И как это сделать, если есть ссылки, дайте пожалуйста, почитаю. (Имел в виду правильную установку MySQL на комп и чтобы без заморочек работать в моей программе Qt C++, смигрировать не проблема, проблема будет потом, когда начнут меня дёргать каждый раз после переустановки виндовс, например)
4  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Ин& : Март 04, 2020, 16:44
Так что же у вас в интернете: MySQL или MS SQL? Это вообще говоря две СОВСЕМ РАЗНЫЕ СУБД. И с технической, и с лицензионно-юридической точек зрения.
MySQL, не MS SQL, я знаю что они разные. MS SQL тоже можно обзавестись, за доп. плату.
В том посту моём единственная опечатка. Прошу считать как MySQL.
5  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL : Март 04, 2020, 16:41
Правильно ли я понял, что есть две независимые БД, с которыми работают две группы пользователей. Одну вы называете локальной (интересно, почему - к ней имеется доступ только по локальной по сети?)
Есть программа, которая работает с БД, на этом же компьютере. (Не понимаю как ещё правильней-то: имеется в виду один комп вообще, без участия сети в целом, но с доступом в интернет)
Другая расположена на каком-то сервере, с доступом по сети интернет.
Да, расположена на каком-то сервере. Должна быть, такая же, точная копия:)
Обе БД выполняют одинаковую задачу, но две группы пользователей принципиально работают только со своими БД.
И стоит задача синхронизации данных в обоих БД с учетом того, что взаимодействие этих БД через интернет может отсутствовать.
Так?
Как же на пальцах объяснить-то... попробую. Например есть точка "А" (Пункт приёма оборудования в ремонт, где производится приёмка, выдаётся бумажка клиенту, и это надо делать очень быстро, в любом случае и без участие интернета, если он пропал неожиданно), есть точка "Р" (Пункт ремонта этого оборудования, где тоже предстоит работать с данной программой)
Они находятся в разных местах. На разных улицах Улыбающийся
Интернет есть он постоянный, но бывает что не работает час в день, например. Если интернета нет, программа в любом случае должна работать, как на "А", так и на "Р".
В данный момент вся работа программы и БД происходит на точке "А". Необходимо разгрузить точку "А" от лишней работы.
Это так на пальцах. Всё бы ничего. Просто Точек Приёма есть ещё "Б", и "С". А ещё оператор, который принимает звонки от клиентов, со всех точек, звонит в "Р" или в "А", "Б", "С" чтобы узнать состояние оборудования, и перезванивает клиенту, что не совсем удобно. её тоже можно обозначить точкой "О".
И вот в этих условиях происходит бардак и постоянные непонятки. Все три точки работают со своими БД.
Необходимо объединить все базы в одну (Да хоть с нуля, лишь бы работали в дальнейшем) и чтобы все точки работали с ней.

Вот такая задача! Пожелайте мне успехов!!! Улыбающийся
6  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Ин& : Март 04, 2020, 13:27
Видно, что вторая БД реализована на СУБД 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)
И здесь я вижу только двунаправленную репликацию для выполнения такой задачи. Скорее всего буду изобретать велосипед Улыбающийся Потому что, средствами самой СУБД это точно не получится. Ну по крайней мере без всяких костылей.

Я это к чему спрашиваю... Если у вас обе СУБД одного типа, задачка чуток попроще, можно взять готовые средства репликации именно для неё (гугл по запросу "репликация для MySQL" выдаёт разные интересные статьи).
А вот если СУБД разных типов, придётся писать суровый велосипед с квадратными колёсами.
(Что у обоих БД одинаковая структура - это я прочёл. Но структура - это несколько другое.)

Второе. Даже для одной СУБД правильная настройка репликации - не совсем тривиальная задача. Поэтому тщательно подумайте, вам точно надо реплицировать в обе стороны или хватит односторонней? (Она чуть попроще.)

Я пока сделал (т.е делаю, доделал чуток осталось (поправить интерфейс программы)) Копирование локальной БД на сервер БД в инете. (Делаю автоматически, было вручную. Не могу точно выразиться. Делаю, так, чтобы можно было всё это делать без моего участия. Т.е дорабатываю программу. Если взять во внимание мой первый пост в этой теме. То выполнялись все запросы в определённую функцию, которая делала так: в локальную сразу, и в инете. Если инета нет, то все запросы сохраняются в определённой таблице, где потом выполняются, потом удаляются)
Потом сделаю репликацию в одну сторону с локальной БД, на сервер в инете. (Надо доделывать, пол пути пройдено)
Потом буду делать двунаправленную. Нужно для того, чтобы два и более пользователя (Разные локальные компьютеры, на большом расстоянии, т.е не рядом) работали с одной БД как локально (если нет инета) так и онлайн. (Здесь может получиться зацикливание, вот с этим был вопрос. И ещё если добавить ещё один комп с программой, как быть с ним, чтобы у него тоже всё реплицировалось.)

Как-то так... Извиняюсь заранее за ошибки, как смог так выразился.

Если есть предложения как можно всё это дело реализовать, я только за. Рассмотрю варианты, предложения. Да и сам готов многое поменять, было бы желание и возможности.
Учтите, что я чайник, я бы сказал так - я не профи.
7  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Ин& : Март 02, 2020, 20:10
А какие ещё есть варианты?
Средствами самой СУБД, например.
Поддерживаю: Репликация средствами СУБД.
Двусторонняя (Двунаправленная) репликация, вот что мне нужно. Вот как это называется. Буду гуглить, гугл начинает меня понимать...

Спасибо всем, направили по нужному пути!
8  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL : Март 02, 2020, 18:57
Код:
Это как раз то что я хотел. Буду реализовывать...
Ну, я не уверен, что вы хотели этого. Я описал возможный механизм синхронизации таблиц, но я не понял ничего про второго пользователя))
В голове бардак образовался, я походу всех сбил с толку с этим вторым пользователем. Необходима синхронизация между локальной БД и той что в Интернете. Так будет правильней. А какие ещё есть варианты?

9  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL : Март 02, 2020, 18:23
Для начала, думаю нужно понять для себя:
Я в школе плохо учился, как вот только институт закончил сам не понимаю Улыбающийся
1. что именно подразумевается под "синхронизацией".
Непонимающий а что синхронизация какое-то имеет другое понятие? Объединение БД, что-бы они всегда были "Одинаковые" не?
2. ................................ под базой данных.
3. ................................ сервером базы данных.
БД - Набор таблиц с полями и их значениями. Ну с сервером БД, да немного некорректно выразился, согласен. Для меня это такое место в сети интернет, где располагается моя БД.
4. Как подключается пользователь?
Я же написал... через программу, которой всё равно кто ей пользуется, может пользоваться один человек, а может 10, Но это всё за одним компьютером. Надо поставить ещё один компьютер, только в другом городе, сколько там пользователей будет я не знаю Улыбающийся
Ну да тоже не до конца тему раскрыл, надо было больше информации написать...
PS:
Сервер будет общий ....., а база данных???
т.е. если сервер общий а у каждого пользователя своя база данных....  - они никогда одни и те-же данные не увидят.
Печалька! А почему не увидят? Не захотят? Не?

Меня уже поняли и уже посоветовали как можно организовать,
если есть предложения, я готов выслушать, а так это всё вода. Спасибо за участие!
10  Qt / Базы данных / Re: Синхронизация Базы данных Локальной и Интернет сервера MySQL : Март 02, 2020, 17:51
На локальном узле таблицы имеют уникальный id и дополнительное поле, например phase boolean default false. При добавлении/изменении записи это поле принимает значение false.
Спасибо огромное, Это как раз то что я хотел. Буду реализовывать...
Только надо всё будет основательно продумать. Теперь есть представление в какую сторону двигаться!
11  Qt / Базы данных / Синхронизация Базы данных Локальной и Интернет сервера MySQL : Март 02, 2020, 14:22
Есть разработанная мной программа на Qt.
Она работает с Базой Данных на локальной машине, через QSqlDatabase::addDatabase("QODBC","First")
Существует вторая База Данных в интернете на сервере, работает через QSqlDatabase::addDatabase("QMYSQL","Second")
У обоих Баз Данных одинаковая структура.
В первую пишутся все данные и читаются.
Во вторую только пишутся (Insert, Update, Delete).
Всё работает как полагается, если один пользователь.

Пришло время подключить ещё одного пользователя (сервер в инете будет общий, Так же как и локально).
Я так понимаю, что все изменения произведённые вторым пользователем никак не отобразятся у первого пользователя, ну по сути так же наоборот.

Можно конечно было вывернуться в такой ситуации, чтобы ведущей БД был сервер в инете. Но здесь есть несколько минусов, самый основной, что интернета может не быть, какое-то время, а работать надо.

Вот как выкрутиться из данной ситуации?
Как правильно организовать синхронизацию?


Гугл не понимает меня, что я от него хочу! Улыбающийся
Или пните в нужном направление, уже дня 3 потратил. А в голове только один бред.
Заранее спасибо ответившим.
Страниц: [1]

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