我被要求设计一个用于缓存 SQL 查询结果的类。调用类的查询方法会在第一时间查询并缓存整组结果;之后,每个子序列查询将只检索更新的部分,并将结果合并到缓存中。
如果要求该类是通用的,即不了解数据库和表,您有什么想法吗?
是否有可能,以及如何仅检索自上次查询以来的更新/新记录?
我被要求设计一个用于缓存 SQL 查询结果的类。调用类的查询方法会在第一时间查询并缓存整组结果;之后,每个子序列查询将只检索更新的部分,并将结果合并到缓存中。
如果要求该类是通用的,即不了解数据库和表,您有什么想法吗?
是否有可能,以及如何仅检索自上次查询以来的更新/新记录?
MySQL(据我所知,也不是任何其他基于 SQL 的数据库)不会在任何地方存储行的“最后更新时间”或“插入时间”,至少不会在您可以查询的任何地方存储(解析二进制日志可能是不是你想做的事情)。
要获得“新记录”,您需要
您可以考虑让您的代码创建自己的表,每次在另一个表上发生 UPDATE 或 INSERT 时存储一条记录,然后将触发器添加到将填充您的表的所有其他表。
但这可能有点多。
要么你的缓存类必须被通知所有更新,要么你需要某种过期。
唯一的其他选择是查询数据库进行检查,但是你有点失去了缓存的意义:)
上述情况适用于“通用”缓存。如果您为特定表实现专门的缓存,您可能能够利用 DML 模式。