Delayed UPDATE (будет обновляться) | |
Автор: utilmind |
Пост под пивом, поэтому в тексте много лишнего. Суть в том, что мне очень не нравится то, как происходят постоянные затыки при апдейте базы mySQL с механизмом MyISAM. Что-поделаешь, система такая... Всегда приходится чем-то жертвовать ради чего-то другого... Короче, после долгих и почти бесполезных оптимизаций, отдельно себе отметил я поля статистики в постоянно-читаемых таблицах, которые вроде бы и тоже полезно обновлять, но не критично их немедленное обновление. Вот там бы и пригодился UPDATE DELAYED, который, увы, нереален в MyISAM. Чтобы не заставлять пользователя ждать, проще написать функцию, которая просто суёт «запрос обновления» в некую промежуточную табличку (без ожидания немедленного обновления, разумеется, ни конечной, ни промежуточной таблицы. Всегда INSERT DELAYED делаем, короче...). Да, так вот, суём все наши зарержанные обновления в промежуточную таблицу, а затем пишем crontab, который подхватывает ожидаемые обновления и выполняет их потихоньку, раз в несколько минут, например. Чуть позже я приведу примеры PHP-функции mysql_delayed_update(), а также PHP-скрипта для вешания на кронтаб... Реализация:
P.S. Вещь оказалась на первое время полезной и даже использовалась, однако, впоследствии было решено было отказаться от этого в пользу более корректных (элегантных) методов оптимизации. Это было отказ конкретно от «низкоуровневых» delayed updat’ов, но не от идеи в целом. Сама идея применяется, но на более высоком уровне, для проведения целой серии операций. Запрос-флаг обновления заказывается с помощью INSERT DELAYED. |
Tweet |
Отправить на E-mail Версия для печати |