TSQLQuery + MySQL

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

Re: TSQLQuery + MySQL

Сообщение vitaly_l » 12.01.2015 14:08:49

GAMER писал(а):Для веб-сервиса такой прием не подходит.

Даже для локального MySQL, я бы рекомендовал разрывать соединение по завершении отправки/получения данных, если обращения к MySQL реже чем раз в 30 сек, а для удалённого тем более. Я в этом отношении сторонник тех, кто разработал скрипт PHP. Да и проверка наличия соединения - занимает время и силы. В остальном, каждый вправе делать как больше нравится.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TSQLQuery + MySQL

Сообщение VirtUX » 12.01.2015 15:44:26

Переделал:
Код: Выделить всё
function UFMySQLConnector.DoAnySQL(SQL: TStringList; close: boolean): integer;
var
  i, fi, fc: integer;
  ss: string;
begin

  { Проверим наличие запроса }
  if (SQL = nil) or (SQL.Count < 1)
  then begin
    Result := -1;
    exit;
  end;

  fSQLQuery.sql.Text := SQL.Text;
  {$ifdef _login}
  Log.LogStatus(SQL.Text, 'DoAnySQL');
  {$endif}

  try
    { Если конект закрыт }
    if not fMySQLConnection.Connected then fMySQLConnection.Open;
    if fMySQLConnection.Connected then fSQLQuery.Open   // Выполняем запрос на сервер
    else begin
      Result := -2;         // Иначе сообщаем об обрыве связи с сервером
      Exit;
    end;
  except                           // Если запрос неудался
    fMySQLConnection.Close(true);  // Форсируем закрытие соединения
    Result := -2;                  // И сообщаем об обрыве связи с сервером
    Exit;
  end;

  fSQLQuery.Last;

  Result := fSQLQuery.RecordCount;

  fSQLQuery.First;

  if Result > 0
  then begin
    ...
  end;

  fSQLQuery.Close;
  fSQLTransaction.Commit;

  if close then fMySQLConnection.Close;

end;

теперь можно явно указать: оставить конект или закрыть.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: TSQLQuery + MySQL

Сообщение vitaly_l » 12.01.2015 16:09:54

всё хорошо что хорошо кончается
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TSQLQuery + MySQL

Сообщение GAMER » 12.01.2015 17:01:59

Какие ресурсные затраты на поддержку активного соединения, при условии, что запросы не выполняются?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TSQLQuery + MySQL

Сообщение vitaly_l » 12.01.2015 17:24:16

А какая разница?
Он где-то там "в загашнике" хранит номер сессии.
Если обращения в течении лимита отсутствуют значит он отрубает сессию.
Соответственно он хранит ещё и время начала сессии и последнего обращения.
Плюс он хранит различные логи и пишет туда всякие действия.

На самом деле всё это может быть устроено иначе и он может слать время от времени пинги каждой сессии,
чтобы удостовериться что сессия актуальна.

Вариант продуманный в PHP - исключает создание 11111 сессий от одного пользователя.
А постольку поскольку сессию не отключают а например происходит "какой-то" разрыв, то сессии одного пользователя будут копиться.
А теперь представьте себе сайт с посещаемостью 1 000 000 человек + плюс каждый из них открывает новую сессию кликая на каждую страницу.
Если каждый просмотрит 10 страниц - это 10 000 000 сессий. А теперь добавьте что к MySQL базе обращается 10 000 сайтов, соответственно таблица
сессий получается 10 000 000 * 10 000 ...

Ну и каково MySQL искать в таком количестве "вашу" просроченную сессию, чтобы её отрубить? :cry:



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TSQLQuery + MySQL

Сообщение GAMER » 12.01.2015 18:04:45

Для веб-сервера - согласен. Но какой смысл топикстартеру для каждого запроса делать пересоединение? Не думаю, что его софт будет инициализировать больше 100 сессий.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TSQLQuery + MySQL

Сообщение vitaly_l » 12.01.2015 18:10:15

А за год, что у него там накопится?
Короче, как делать: VirtUX - пусть сам решает, я всего лишь обосновал свою точку зрения.


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TSQLQuery + MySQL

Сообщение GAMER » 12.01.2015 18:28:02

А что за год? Прогу закрыл, перед закрытием грохнул сессию. Не грохнул сам, грохнет мускуль по таймауту.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TSQLQuery + MySQL

Сообщение vitaly_l » 12.01.2015 19:03:46

Это на сервере есть подпрограммы вычищающие битые сессии(наверное),
а на локальной машине - ничего этого может и не быть(наверное). В смысле я не знаю.
Однако, если машина "падает" то сессия сохраняется в таблице... и к концу года там будет таблица из 1 000 000 000 000 сессий.
И всё... кирдык MySQL... придётся вызывать мастера и чинить... В общем я всё это придумал... и курю бамбук.
Всем хорошего настроения - отключаюсь от обсуждения :D !

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TSQLQuery + MySQL

Сообщение Vapaamies » 12.01.2015 22:17:34

VirtUX писал(а):Я всегда считал, что правильнее поддерживать коннект с сервером как можно дольше.

Это логика толстого клиента. А что описали в этой теме -- логика веб-клиента.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: TSQLQuery + MySQL

Сообщение tema » 21.04.2016 09:20:03

Что-то я вообще не понимаю как данные с сервера читаются...
Может какую-то настройку включить надо?
У меня две программы, которые должны обращаться к одной базе. Одна данные пишет в таблицу, другая их читает. Так вот одна запишет, а вторая программа их не видит :-(
Я уже и SQLQuery1.Refresh и SQLQuery1.Close SQLQuery1.Open пробовал. Всякие настройки включал-выключал...
В базе запись появляется, я могу это видеть напрямую в самой базе, но вторая программа их не видит, пока не закроешь-откроешь эту вторую программу целиком :-(
Как можно перечитать данные из базы не закрывая-открывая программу?
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: TSQLQuery + MySQL

Сообщение sign » 21.04.2016 09:46:55

Спасение в SQLQuery.ApplyUpdates
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: TSQLQuery + MySQL

Сообщение tema » 21.04.2016 09:52:58

Не помогает :-(
Я эту ApplyUpdates уже даже на том на котором читать надо запускаю. Уже пробный проект сделал обновляется информация только так:
Код: Выделить всё
  MySQL55Connection1.Close;
  MySQL55Connection1.Open;
  SQLQuery1.Open;

Есть возможность сделать это без закрытия MySQL55Connection1?

Добавлено спустя 33 минуты 30 секунд:
Мистика...
Перезагрузился и вот так заработало
Код: Выделить всё
  SQLTransaction1.Commit;
  SQLQuery1.Close;
  SQLQuery1.Open;
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Пред.

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

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

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

Рейтинг@Mail.ru