numtel / meteor-mysql

Reactive MySQL for Meteor
MIT License
343 stars 41 forks source link

(suggestion) Checking Table Changes by using UPDATE_TIME in table status #77

Open EvanGeminika opened 8 years ago

EvanGeminika commented 8 years ago

I wonder whether it's possible to check table changes by using UPDATE_TIME in table status. For example, below query result will give UPDATE_TIME

show table status where name='players';

The module can run above query every minute to check whether any changes in player table in the last 1 minute. This way, this module can still be reactive without binary log.

numtel commented 7 years ago

That is quite interesting. I didn't know about SHOW TABLE STATUS.

@Geminika Is there a way to select rows that have been updating since a specified time?

EvanGeminika commented 7 years ago

@numtel, currently it works fine with MyISAM engine, but there's still some problem with InnoDB. That's why by default the update_time is null for InnoDB. They said it will work for InnoDB in MySQL 5.7.2, based on this link https://bugs.mysql.com/bug.php?id=14374

SHOW TABLE STATUS, is basically gives the same result as below query:

SELECT * FROM information_schema.tables WHERE table_schema = DATABASE();

We can use below create table command, if we want to test it with MyISAM engine. CREATE TABLE players ( id int PRIMARY KEY NOT NULL, name varchar(45), score int DEFAULT 0 NOT NULL ) engine MyISAM;

We can use below sample query if we want to get the update_time for players table.

select table_name, update_time from information_schema.tables where table_schema = DATABASE() and table_name="players";

The update_time will change when any insert, update, or delete happen for that table.

To check whether any changes in the table since the last 5 minutes we can use below query:

select table_name, update_time from information_schema.tables where table_schema = DATABASE() and table_name="players" and update_time > (now() - interval 5 minute);