Работа клиента с сервером SQL

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

Работа клиента с сервером SQL

Сообщение Sharfik » 10.06.2019 22:32:37

Добрый день, а кому то вечер.
Как корректно организовывать работу программы клиента для работы с SQL сервером?
Я имею ввиду порядок работы команд и времени соединения:
Подключение к SQL -> Взяли данные -> Изменили данные -> Сохранили данные -> Посмотрели ->Посмотрели -> Отключение от SQL Сервера.
Или же:
Подключение к SQL -> Взяли данные -> Отключение от SQL Сервера-> Посмотрели -> Подключение к SQL -> Изменили данные -> Сохранили данные -> Отключение от SQL Сервера.

Открыть, сохранить нет вопросов. А вот как обрабатывать потерю соединения в самый интересный момент и потом его восстанавливать для меня сейчас задачка. Не гонять же постоянно тестово соединение с сервером и тут же отключение.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Работа клиента с сервером SQL

Сообщение Снег Север » 11.06.2019 06:47:05

Многое зависит от того, какой это конкретно SQL сервер. Для разных серверов по-разному. И от надежности вашей сети. И от того, какой именно момент вы считаете "самым интересным"... :)
И что является клиентом - стационарная аппликация или вебсервис.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Работа клиента с сервером SQL

Сообщение Sharfik » 11.06.2019 14:11:41

Клиент - просто программа на ПК пользователя. Сервер - MySQL в данном случает.
Пока вижу только способ перед каждым Edit, New, Delete воткнуть тестирование соединения попыткой подключения вторым соединением.


PS: С точки зрения безопасности, насколько я понимаю, на удаленном сервере вообще должна стоять своя программа которая разговаривает с приложением клиентом. Чтобы не оставлять пароли доступа к SQL серверу на машине пользователя.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Работа клиента с сервером SQL

Сообщение Снег Север » 11.06.2019 15:41:36

Sharfik, последнее - лучше всего, конечно. У нас так работает коммерческое приложение - на какой-то одной машине запускается приложение в режиме "мастера", непосредственно к базе. У клиентов подключение идет через него, по совсем другому порту и с юзерами/паролями уже только внутри приложения, не имеющими отношения к юзерам MySQL. У MySQL настроена проверка подключения по IP, только допустима машина "мастера". В другом варианте - набор допустимых IP заводится администратором, а клиент получет юзера/пароль MySQL скрытно, в шифрованном виде по TCP.
Потеря подключения отлавливается по ошибке выполнения любого из запросов в try...except и только при ошибке делается попытка реконнекта и повторной отправки запроса. Если снова ошибка - обращайтесь к администратору. Вот как-то так.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Работа клиента с сервером SQL

Сообщение Sharfik » 11.06.2019 16:15:37

Снег Север Спасибо!
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Работа клиента с сервером SQL

Сообщение olegy123 » 11.06.2019 18:15:45

Sharfik писал(а):А вот как обрабатывать потерю соединения в самый интересный момент и потом его восстанавливать для меня сейчас задачка. Не гонять же постоянно тестово соединение с сервером и тут же отключение.

Вы неправильно ставите вопрос.
Это детский вопрос и звучит оно так если помереть то как потом есть, пить или водить автомобиль. Что случится с Базой? Да ничего не случится..
Что случится с клентом при разрыве соединения - словит ошибку.
А если клиент в горах, где нет интернета и электричества. Как он будет работать с вашей MySQL базой? Надо его снабдить дизель генератором и спутниковой связью. Есть чем глубоко вам подумать.

Sharfik писал(а):Пока вижу только способ перед каждым Edit, New, Delete воткнуть тестирование соединения попыткой подключения вторым соединением.
ну тогда тестируйте каждый байт на наличие ошибок. Нет нужно проверять каждый бит. :lol:

Sharfik писал(а):С точки зрения безопасности, насколько я понимаю, на удаленном сервере вообще должна стоять своя программа которая разговаривает с приложением клиентом.

это уже продумали сетевики - смотрите в сторону TCP KeepAlive

Sharfik писал(а):Чтобы не оставлять пароли доступа к SQL серверу на машине пользователя.
Ого, если нужна полная безопасность то советую выдавать сессионный пароль(в рамках подключения), до многофазную подтверждения юзера, можно через SMS с подтверждением юзера.
Можно обойтись от прямого контакта с таблицами MySQL но тогда нужно городить трехзвенку или даже больше..

не думайте об качестве подключения - это забота сетевека. Или же нужно делать кэширование и сливать данные когда есть инет. Я так сейчас делаю с мобильниками клиентов в деревнях, где 2G ловится с трудом, а работать надо. Там забота самого клиента - чтобы найти место где он сольет данные. Тут "наука бессильна".
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Работа клиента с сервером SQL

Сообщение Sharfik » 19.06.2019 16:23:56

olegy123 писал(а):не думайте об качестве подключения - это забота сетевека.

Вот поэтому меня тошнит от современных программ - программисты делают вид что их обязанности это задача других людей.
Вся сессия передачи данных от начала, до просмотра результата должна проходить без вылетов программы.
Говорите ничего не будет, если связь порвется? Ага.. верю два раза. Одна из N Записей ушла в таблицу, остальные повисли, результат - в таблице мусор. Передача привязанных к записям файлов - приведет к тому что на серваке будет мусор из файлов неучтенных.
Я все это спрашиваю не просто так, а потому что БД это то что существует последние лет 40 и механизмы работы, которые я не знаю, заново изобретать бред. Хотелось бы просто мануал по работе с БД из под delphi, Lazarus почитать, но похоже таких не найти.
Лично для меня все происходящее между MYSQL, DataConnector, QueryDataset, Transaktion в момент редактирования и передачи данных - темный лес покрытый тайной и кучей нестабильных функций при любом чихе обваливающих всю работу программы.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Работа клиента с сервером SQL

Сообщение Снег Север » 19.06.2019 21:21:21

Sharfik писал(а):Одна из N Записей ушла в таблицу, остальные повисли, результат - в таблице мусор.

В таблице не может появиться мусор из-за обрыва соединения - запись или запишется, или не запишется. Тем более, если использовать InnoDB, поддерживающую контроль транзакций.
Если файл пишется в BLOB, то и с ним то же самое - при обрыве просто не запишется и транзакция не пройдет, придется повторить. Если отдельно, то надо самому контролировать его целостность, но это уже не имеет отношения к серверу баз данных.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Работа клиента с сервером SQL

Сообщение olegy123 » 21.06.2019 07:49:15

Sharfik писал(а):Вот поэтому меня тошнит от современных программ - программисты делают вид что их обязанности это задача других людей.

Согласен, но вопрос качества связи никак не зависит от программиста. Как пример привел клиента который в горах отдыхает, там не только связи нет но даже GPS не всегда работает. Как может помочь программист человеку в горах? Кабель проложить? но 100м витая пара, потом в этих проводах качество падает.. а нужно приложить 1000км.. надо продумать как к свичам еще питание пустить, а в проводах есть сопротивление, значит нужно построить станцию в 10квольт. чтобы за 1000км в 10тячном свиче запитался свич чтобы он смог обеспечить связь с этим отдыхающим клиентом.
Есть над чем Вам подумать..
Можно пойти иным путем. Забросить спутник на гео стабильную высоту, может это будет дешевле чем постройка одной станции на 10квольт. Сколько возможностей есть чтобы передать пару строчек в вашу MySQL таблицу. Помимо кодинга.

Sharfik писал(а):Я все это спрашиваю не просто так, а потому что БД это то что существует последние лет 40 и механизмы работы, которые я не знаю, заново изобретать бред.
люди смогли передать картинки с плутона, а досих пор не научились стабильно передавать пару строчек текста в MySQL

А вкрусе как данные пишутся в HDD и хранятся там.. Вкурсе что в магнитом диполе существует шумы, в основном они вызваны теплом, диполи могут перестаиваться и соответственно данные теряются. Т.е. вы записали в MySQL данные, MySQL записала на диск, а в диске эта хрень творится. :roll:
Что делать программисту на lasarus-е?

Добавлено спустя 5 минут 38 секунд:
Sharfik писал(а):Лично для меня все происходящее между MYSQL, DataConnector, QueryDataset, Transaktion в момент редактирования и передачи данных - темный лес покрытый тайной и кучей нестабильных функций при любом чихе обваливающих всю работу программы.

TQuery - это обобщеный функционал для многих дивжков баз данных (MySQL,FirebirdSQL,PostgreSQL,MSSQL и т.п.)
TConnection - Обеспечивает подключение к самой DB и выбор движков БазДанных, они реализованы в виде различных библиотек представленных разработчиками самих дивжков баз данных (MySQL,FirebirdSQL,PostgreSQL,MSSQL и т.п.)

Т.е. вы работаете с библиотеками (dll) баз данных от производителя.

Добавлено спустя 6 минут 2 секунды:
Общее между них(но не всегда) могут быть работа с таблицами, работа с транакциями. Транакции могут быть явными и не очень, зависит от производителя бд. Например чтобы работать с Firebird - вы должны явно указать вид транзакции. а вот MySQL вроде не особо требует.
Транзакция открывается, записывается муллион строк, транзакция закрывается с потвержением. БД фиксит у себя эти муллион строк. а может транзакция не быть потверженным, связь оборвалась или клиент решил что не нужно - тогда БД скидывает эти муллион строк в null

Добавлено спустя 13 минут 10 секунд:
Что видно в DBGrid ? Это как правило кэш записи..
TQuery может работать с кэшем и в БД ничего не отсылать, до определенного момента. а когда связь появилась - то скинуть все данные.
Т.е. ошибка обрыва связи - это неприятный но переживаемый факт.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru