|
|
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Народ подскажите какое либо решение: При вставке в таблицу у меня триггер обрабатывает обновление материальной вьюшки, и в последнее время возрастает задержка при обновлении, как бы так сделать чтоб эта вьюшка обновилась в фоновом режиме, чтоб пользователь не ждал каждый раз завершения обновления вьюшки? Увидел решение с gearman, вообщем то он меня устраивал бы еслиб я мог прям из базы вставить в таблицу очереди gearman и он бы их выполнил, однако он не хочет выполнять вставленные вручную в очередь задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2015, 13:46 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
westvovik, SET synchronous_commit = off; А вообще не понятно в "фоном режиме" и что значит "он не хочет выполнять вставленные вручную".. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2015, 20:13 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
westvovik, Использовать более другую очередь ("более постгресовую"), например pqq (или другие) будете в триггере писать в очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2015, 15:47 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Gold_westvovik, Использовать более другую очередь ("более постгресовую"), например pqq (или другие) будете в триггере писать в очередь. А вот в сторону PGQ я смотрел, но что то не могу найти внятной инструкции на установку, вообще откуда ее взять подскажите, сервер у меня на FreeBsd? Надо устанавливать Skytools как я понимаю для этого? Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 12:46 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Ну с установкой справился и удачно запустил, вопрос как этим пользоваться? Есть тут кто знающий PGQ подскажите как мне к примеру поставить в очередь запуск ф-ции к примеру text? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 13:44 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
westvovik, покажите вашу схему, что у вас там за "материальная вьюшка", и как вы её обновляете и как планируете. решение на очереди pgq тут может быть, но оч вероятно, что вы что-то делает не так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 15:07 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, Да обычная таблица которая считает остатки по счетам при добавлении какого либо платежа, учитывая что платежи можно добавить задним числом, плюс могут быть какие то изменения в старых платежах или их отмена. Из за этого пересчитывать надо несколько месяцев была сделана такая вьюшка. Вообщем то даже не суть, что мне эту вьюшку надо обновить, у меня там есть задачи и другие, которые требуют вычислений, но можно мгновенно их не делать, вот тут и очередь нужна, а вьюшку эту для теста хотел так настроить и посмотреть вообще как очереди надежно ли работают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 15:14 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
westvovik, если хотите процессить батчи в той же базе, что и источник, -- то вам надо обычный консумер. https://github.com/markokr/skytools https://github.com/markokr/skytools/blob/master/python/pgq/consumer.py поищите, в инете много инфы. я только на этом форуме несколько раз подборку ссылок давал и по pgq и по консумерам и по процессингу обобщенному ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 15:45 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1088413&msg=15882717 http://www.sql.ru/forum/1131228/demon-dlya-vypolneniya-proizvolnyh-vneshnih-komand-iz-bd?hl=pgq ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 15:59 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, ! но, это может быть и дорогой в нетуда... -- использовать, только если понимаете как оно работает (хорошо хоть разобраться не сложно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 16:04 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, но с другой стороны, для целого класса задач, альтернативы pgq просто нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 16:05 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
westvovikMisha Tyurin, Да обычная таблица которая считает остатки по счетам при добавлении какого либо платежа, учитывая что платежи можно добавить задним числом, плюс могут быть какие то изменения в старых платежах или их отмена. Из за этого пересчитывать надо несколько месяцев была сделана такая вьюшка. это всё считается инкрементально, т.е. агрегировать заново "несколько месяцев" не надо, надо наварить дельту к итогам вот если задним числом тариф меняется, или ещё более сложный профиль вклада в агрегаты и надо пересчитать всё это, а хорошая аддитивщина [для инкремента] не вычисляется -- вот тогда триггерно набрасываем задания на пересчет, а потом безо всякой очереди джобами подбираем остатки по набросанным задачам. связываться для этого с пгку -- заведомо лишнее (а к переносу скажем пгдампом ещё и негодное -- по самой привязке "очередей" к счетчику транзакций конкретной дб. там вообще тараканы имели друг--друга в голове проектировщика пегекю, думается) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 17:46 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
с дампом известный воркараунд http://skytools.projects.pgfoundry.org/skytools-3.0/doc/faq.html#_dump_restore ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 17:55 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinwestvovik, если хотите процессить батчи в той же базе, что и источник, -- то вам надо обычный консумер. https://github.com/markokr/skytools https://github.com/markokr/skytools/blob/master/python/pgq/consumer.py поищите, в инете много инфы. я только на этом форуме несколько раз подборку ссылок давал и по pgq и по консумерам и по процессингу обобщенному Не совсем понял можно ли консумер на SQL написать? вроде написано что поддерживается написание консумеров на разных языках? Т.е. правильно ли я понимаю, я должен написать какойто обработчик событий - это и есть консумер, а в нем я уже буду писать код как такое событие обрабатывать так? Событие сгенерировать вот этой ф-цие pgq.insert_event, правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 18:14 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
westvovik, нуууу... типа того. я вам накидал много примеров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 18:42 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, Не пойму что не так с конфигом, не хочет запускаться [pgqd] # where to log logfile = /var/log/pgqd.log # pidfile pidfile = /var/run/pgqd/pgqd.pid ## optional parameters ## # libpq connect string without dbname= #base_connstr = # startup db to query other databases #initial_database = template1 # limit ticker to specific databases #database_list = # log into syslog #syslog = 1 #syslog_ident = pgqd ## optional timeouts ## # how often to check for new databases #check_period = 60 # how often to flush retry queue #retry_period = 30 # how often to do maintentance #maint_period = 120 # how often to run ticker #ticker_period = 1 [mailer_daemon] job_name = mailer_daemon src_db = hvo_main dst_db = hvo_main pgq_queue_name = mailer dst_query = SELECT * FROM function_to_be_run(%%(username)s, %%(email)s); logfile = /var/log/%(job_name)s.log pidfile = /var/run/pgqd/pid/%(job_name)s.pid Ошибка 2015-07-23 19:22:30.152 18212 ERROR fill_defaults fail 2015-07-23 19:22:30.152 18212 FATAL @pgqd.c:77 in function load_config(): failed to read config ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 19:25 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
westvovik, поэкскрементируй с листен/нотифы. правда с гарантированностью доставки облам, но для данной задачи при старте подписчика можно принудительно выполнять обновление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 22:09 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
p2., Я думаю что дожму уж PGQ, тут осталось настроить то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 11:40 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Разобрался написал простой консумер на Python файл mailer.py import sys, os, pgq, skytools class Mailer(pgq.Consumer): def sendWelcomeMail(self, params): """try to send mail, return true on success, false on failure""" return True def process_batch(self, src_db, batch_id, ev_list): for ev in ev_list: d = skytools.db_urldecode(ev.data) self.log.debug ("event : %s | type : %s | inserted by : %s" % (d, ev.type, ev.extra1)) if not self.sendWelcomeMail(d): sys.exit(1) ev.tag_done() if __name__ == '__main__': script = Mailer("mailer_daemon","src_db",sys.argv[1:]) script.start() файл mailer.conf [mailer_daemon] job_name = mailer_daemon src_db = dbname=hvo_main pgq_queue_name = mailer pgq_consumer_id = %(job_name)s logfile = /var/log/pgqd/%(job_name)s.log pidfile = /var/run/pgqd/%(job_name)s.pid Запуск оброботки python mailer.py mailer.conf -v ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 13:20 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Теперь след вопрос, подскажите как из этого консумера к примеру запустить в Postgresql ф-цию test? Какой синтаксис подскажите плиз, я python вообще не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 13:24 |
|
||
|
Отложенное/фоновое выполнение запроса
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinс дампом известный воркараунд http://skytools.projects.pgfoundry.org/skytools-3.0/doc/faq.html#_dump_restore снкс хороший костылик, годный и даже со снапшотами на стыке вроде всё хорошо . нет ? вот только несколько таких базенок в один инстанс задним числом налить -- крепко думать надо. (стартовать от максимума, кажется. и не перепутать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 19:05 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=1997863]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 451ms |

| 0 / 0 |
