W przeszłości odniosłem sukces przechowując (mocno) przetworzone wyniki zapytania bazy danych w memcached, używając ostatniego czasu aktualizacji podstawowych tabel jako części klucza pamięci podręcznej. W przypadku tabel MyISAM ostatni zmieniony czas jest dostępny pod numerem SHOW TABLE STATUS
. Niestety jest to zwykle NULL dla tabel InnoDB.Jak określić, kiedy tabela InnoDB była ostatnio zmieniana?
W MySQL 4.1, ctime dla InnoDB w jego linii SHOW TABLE STATUS
było zwykle ostatnim czasem aktualizacji, ale nie wydaje się to być prawdziwe dla MySQL 5.1.
W tabeli znajduje się pole DATETIME, ale pokazuje ono tylko, kiedy wiersz został zmodyfikowany - nie może pokazać czasu usunięcia wiersza, którego już nie ma! Tak naprawdę nie mogę używać MAX(update_time)
.
Oto naprawdę trudna część. Mam wiele replik, z których czytam. Czy mogę określić stan tabeli, która nie jest zależna od tego, kiedy zmiany zostały faktycznie zastosowane?
Moja konkluzja po tym, jak nad tym popracowaliśmy, jest taka, że nie będzie możliwe uzyskanie takich informacji tak tanio, jak bym chciał. Prawdopodobnie przechodzę do przechowywania danych w pamięci podręcznej do czasu, w którym oczekuję zmiany tabeli (jest ona aktualizowana raz dziennie), i niech pamięć podręczna zapytań pomaga tam, gdzie może.
Pamiętaj, jeśli idzie o drogę 2.nd InnoDB wyzwala: "Uwaga Obecnie kaskadowane klucze obce nie aktywują wyzwalaczy." (od [13.2.2.5 ZAGRANICZNE KLUCZOWE NAKRĘTKI] (http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html)) –