2010-04-01 3 views
4

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

+0

@ Justin добро пожаловать в SO.Я редактировал в «queue», так как я уверен, что это вы имели в виду. Если это не так, не стесняйтесь откатываться. –

ответ

2

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

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

Там в последнее время (и качество) поста об использовании баз данных для регистрации here, который (обобщенный) говорит:

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

HighScalability write up on Gearman.

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

mysql loggingDB logTable < fullLog.sql && > fullLog.sql 
0

MySQL может сделать некоторые работы для вас:

ВСТАВИТЬ ЗАДЕРЖКУ

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

«запаздывающий вариантом для утверждения INSERT является расширением MySQL к стандартному SQL, который очень использование если у вас есть клиенты, которые не могут или не должны ждать завершения INSERT. Это обычная ситуация, когда вы используете MySQL для регистрации ...»

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