MySQL Insert Statement Queue - PullRequest
       13

MySQL Insert Statement Queue

5 голосов
/ 01 апреля 2010

Мы создаем приложение ajax, в котором пользовательский ввод передается для обработки в php-скрипт. В настоящее время мы пишем каждый запрос в файл журнала для отслеживания. Я хотел бы переместить это отслеживание в таблицу базы данных, но я не хочу запускать оператор вставки после запроса. Что я хотел бы сделать, это настроить «очередь» транзакций (вставки и обновления), которые должны быть обработаны в базе данных MySQL. Затем я бы настроил задание или процесс cron для проверки и обработки транзакций в очереди. Есть ли что-то, на чем мы могли бы опираться или мы должны просто писать в простые текстовые файлы журнала и обрабатывать их?

Ответы [ 3 ]

2 голосов
/ 01 апреля 2010

Вы хотите Gearman - он будет ставить запросы в очередь и вставлять их по мере готовности базы данных, чтобы вы не перегружали сервер БД.

Gearman предоставляет универсальную прикладную среду для переноса работы на другие машины или процессы, которые лучше подходят для этой работы.Это позволяет выполнять работу параллельно, обрабатывать балансировку нагрузки и вызывать функции между языками.Его можно использовать в самых разных приложениях, от веб-сайтов высокой доступности до транспорта событий репликации базы данных.Другими словами, именно нервная система взаимодействует с распределенной обработкой.Несколько сильных сторон о Gearman:

В недавнем (и качественном) сообщении об использовании баз данных для ведения журнала здесь , в котором (обобщенно) говорится:

  • Использование MyISAM с одновременными вставками
  • Ежедневное вращение таблиц и использование UNION для запросов
  • Использование отложенных вставок с MySQL или агентом обработки заданий, например Gearman (хотя MySQL имеет ограничение на количествоон будет стоять в очереди, прежде чем молча отбросить их!)

HighScalability написать на Gearman .

Если вы действительно хотите этого избежать, вы можете написать сырой SQLоператоры в файл и обработать их с помощью этого cronjob:

mysql loggingDB logTable < fullLog.sql && > fullLog.sql
0 голосов
/ 01 апреля 2010

Полагаю, Zend_Queue класс - это ваш потерянный здесь пример .

0 голосов
/ 01 апреля 2010

MySQL может сделать часть работы за вас:

вставка с задержкой

http://dev.mysql.com/doc/refman/5.1/en/insert-delayed.html

"Параметр DELAYED для оператора INSERT является расширением MySQL для стандартного SQL, что очень полезно, если у вас есть клиенты, которым не удается или не нужно ждать завершения INSERT. Это распространенная ситуация, когда вы используете MySQL для ведения журнала. .. "

К сожалению, вариант "ЗАДЕРЖКА" доступен только для INSERT, но не для UPDATE.

...