SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.03.2011 23:19:02

veter
Участник
Зарегистрирован: 31.03.2011
Сообщений: 4

триггеры

Здравствуйте, подскажите, пожалуйста, такие вещи:
1. под сеансом какого пользователя запускается триггер? Данный вопрос возник в силу необходимости автоматизации процесса формирования базы данных. Если к примеру пользователь через своего клиента(браузер) отправляет файл, то реализация задачи формирования таблицы из данного файла через php занимает много времени и соответственно нетерпеливый пользователь может прервать процесс закрытием клиента (окна браузера, сайта). возможно ли решить данную проблему с помощью триггера и управляющей таблицы при условии работы сервера базы данных независимо от действий пользователя?
2. что будет происходить с триггером если одновременно придет несколько файлов? - запустится несколько экземпляров триггера? или он будет выполнятся по очереди? если триггер уже выполняется и в этот момент приходит еще файл, который запускает этот же триггер через управляющую таблицу- что будет в этом случае?
3. на что конкретно срабатывает триггер? на любой скажем апдейт, или в нем можно указать конкретное значение, которое будет присвоено ячейки управляющей таблицы при апдейте?

Неактивен

 

#2 02.04.2011 15:27:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: триггеры

Если Вы внимательно посмотрите на синтаксис создания триггера, Вы
сразу же сможете ответить на свои вопросы smile

1. Триггер выполняется в рамках сессии текущего пользователя, но
с правами пользователя, который указан, как DEFINER. Если нетер-
пеливый пользователь закроет сессию, сессия в PHP продолжит вы-
полняться до победного конца (или до таймаута). Если закончится и
сессия PHP, то MySQL продолжит выполнение последнего запроса до
победного конца (или до таймаута, если запрос чего-то ждет), после
чего будет обработан стандартный сценарий обрыва соединения
(откат транзакции, например).

2. Да, запустится несколько экземпляров, разумеется, если таблица
поддерживает одновременные изменения. Все изменения регулируют-
ся блокировками и транзакциями — так, как если бы эти запросы вы-
полнялись просто последовательно.

3. Триггер срабатывает на каждую измененную строку. Выполнять ли
действия или нет, Вы можете определить с помощью условных опера-
торов.

Неактивен

 

#3 02.04.2011 19:05:30

veter
Участник
Зарегистрирован: 31.03.2011
Сообщений: 4

Re: триггеры

я немного не так сформулировал пояснения к вопросу.
в реализации задачи, необходима максимальная независимость от пользователя и соответственно пользователя от процессов пополнения базы. во втором случае, как я понимаю, при использовании триггера, клиентское окно браузера будет содержать элемент состояния выполнения процесса (загрузки) и соответственно страница будет висеть пока не выполнится схема:
(отпарка файла(пхп код)-изменение значения в ячейке упр. таблицы(пхп код)-проверка на конкретное изменение(триггер)-выполнение sql запроса(триггер)).

мне же нужно, чтобы пользователь подождал только момент загрузки файла и изменение упр. таблицы, т.е. только php сценарий.

объясните пожалуйста правильно ли я понимаю, что описанная мною схема выполняется в рамках одной сессии или все таки, то что выполняется в триггере к клиенту никакого отношения не имеет.
если я прав, то пользователь увидит элемент визуализации состояния выполнения и страница будет висеть.

тогда в этом случае целесообразно использовать диспетчер событий?а он запускается от чьего сеанса?

спасибо

Неактивен

 

#4 02.04.2011 19:34:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: триггеры

Правильно ли я понимаю, что Вы хотите, чтобы пользователь поставил задание,
которое потом должно выполняться самостоятельно в фоне? Если да — то нужно
делать именно так — нужно делать таблицу с заданиями, в которую добавлять
задания через веб-интерфейс пользователем, и отдельный процесс, который бу-
дет следить за изменениями в таблице, и выполнять соответствующие задания.

Неактивен

 

#5 02.04.2011 20:00:03

veter
Участник
Зарегистрирован: 31.03.2011
Сообщений: 4

Re: триггеры

я не совсем понимаю, что Вы имеете в виду под "пользователь поставил задание". Насчет выполнения в фоне совершенно верно.
поясните на чем(как?) реализовать этот отдельный процесс, который будет следить за изменениями.
и все же, правильно ли я понимаю схему для моей ситуации.
(отпарка файла(пхп код)-изменение значения в ячейке упр. таблицы(пхп код)-проверка на конкретное изменение(триггер)-выполнение sql запроса(триггер)).
схема выполняется в рамках одной сессии или все таки, то что выполняется в триггере к клиенту никакого отношения не имеет?
спасибо

Отредактированно veter (02.04.2011 20:02:32)

Неактивен

 

#6 02.04.2011 21:54:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: триггеры

Отдельный процесс надо реализовывать на том языке программирования, который
Вы знаете. Может быть, можно даже на PHP. Но это должен быть реально отдельный
процесс, который нужно запускать отдельно от веб-сервера. Можно делать и в рам-
ках вебсервера, но для этого нужно вносить исправления в PHP (например, так).

Слова «отпарка» я не знаю (кроме значения, связанного с паром, а потому «отпарка
файла» у меня неизбежно вызывает ассоциацию скукоживания пластикового файла
над носиком чайника wink ). Триггер работает в сессии клиента. Пока не выполнится
триггер, клиент не получит результата обработки запроса.

Неактивен

 

#7 03.04.2011 00:13:16

veter
Участник
Зарегистрирован: 31.03.2011
Сообщений: 4

Re: триггеры

1.извините не отпарка а отправка

2.насчет отдельного процесса: ведь если делать отдельный скрипт, тогда кто его будет запускать, ведь тогда теряется смысл автоматизации. к тому же большинство хостингов не разрешают запускать сторонние приложения.

3.тогда планировщик событий от чьей сессии работает?что является хозяином процесса, в рамках которого запускается скл запрос внутри планировщика?он же запускается, скажем, в определенное время.

4.насчет триггера я понял так: в моем случае если клиент отправляет файл, далее(если файл дошел) после этого выполняется php сценарий, изменяющий значение в ячейки управляющей таблицы, в ней сидит триггер, реагирующий на это изменение, в триггере скл запрос, который пока будет выполняться, клиент не получит ответ о завершении php сценария, изменяющего значение в упр. таблице, верно?
спасибо

Отредактированно veter (03.04.2011 00:30:00)

Неактивен

 

#8 03.04.2011 00:58:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: триггеры

2 и 3. Всё зависит от хостинга. Есть даже такие, которые не позволяют выполнять PHP smile
Запускать его будет системный администратор. Если не хотите писать своего демона —
можете воспользоваться планировщиком, встроенным в MySQL (его, правда, тоже мно-
гие хостинги отключают, как и PHP), он тоже в состоянии выполнять хранимые проце-
дуры.

4. Правильно поняли, клиент будет ждать всё время обработки его файла.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson