Если вы так сказать, что существует ограничение по времени с запросом можно использовать хранимую процедуру, чтобы пропустить определенные обновления
Что-то вроде этого:
DELIMITER $$
DROP PROCEDURE IF EXISTS `updateStats` $$
CREATE PROCEDURE updateStats()
BEGIN
DECLARE _B smallint(1) DEFAULT 0;
DECLARE _SECONDS INT DEFAULT 1;
-- http://dev.mysql.com/doc/refman/5.0/en/lock-tables-and-transactions.html
SELECT GET_LOCK('myLabel1',_SECONDS) INTO _B;
IF _B = 1 THEN
UPDATE table SET ........;
SLEEP(_SECONDS);
SELECT RELEASE_LOCK('myLabel1') INTO _B;
END IF;
END
Это позволит убедиться, что если вы получили Lock, который длится для _SECONDS, вы убедитесь, что никакая другая процедура не запускает тот же код в этом временном кадре. сон необходим, чтобы сохранить замок в течение 1 секунды (как если SP заканчивается раньше, блокировка снимается)
Вы также можете добавить else
узел в случае, так это хранимая процедура не может обновлять, чтобы сделать пользовательский код, например, добавить в очередь.
Предположим, что вы хотите записать в живую таблицу только в интервале 1 секунду, чтобы не загружать ее слишком сильно, возможно, у вас на ней много указателей. На другом узле вы можете обновить вторую таблицу, которая действует как очередь, и очередь будет опустошена на истинном узле IF, когда вы также сделаете обновление.
@clops: В документах я заметил, что UPDATE LOW_PRIORITY и ISERT DELAYED не работают для InnoDB, поэтому удаленный ответ. – Veger
Нет проблем! Спасибо, в любом случае! – clops