Я имел успех в прошлом хранении (в большой степени) обработанных результатов запроса базы данных в memcached, с помощью времени последнего обновления базовых таблиц (таблиц) как часть ключа кэша. Для таблиц MyISAM то прошлое измененное время доступно в SHOW TABLE STATUS
. К сожалению, это является обычно ПУСТЫМ для таблиц InnoDB.
В MySQL 4.1, ctime для InnoDB в SHOW TABLE STATUS
строка обычно была своим фактическим временем последнего обновления, но это, кажется, не верно для MySQL 5.1.
В таблице существует поле DATETIME, но это только показывает, когда строка была изменена - это не может показать время удаления строки, которая это не там больше! Так, я действительно не могу использовать MAX(update_time)
.
Вот действительно хитрая часть. У меня есть много копий, от которых я делаю чтения. Я могу выяснить состояние таблицы, которая не полагается, когда изменения были на самом деле применены?
Мое заключение после работы над этим некоторое время состоит в том, что не будет возможным получить эту информацию так же дешево, как я хотел бы. Я, вероятно, иду в данные кэша до времени, когда я ожидаю, что таблица изменится (это обновляется один раз в день), и освободите справку кэша запроса, где это может.
Это MySQL bug 14374, 15438, и лежащая в основе InnoDB bug 2681.
У меня есть два предложения (кроме исправления MySQL).
innodb_file_per_table
), статтестируйте базовый файл. Для этого можно написать функцию/расширение MySQL. Это может немного отставать из-за кэширования базы данных. Я бы лично предложил второй вариант, так как он гораздо более переносимый и не зависит от деталей реализации (таких как innodb_file_per_table
).