0

我被要求设计一个用于缓存 SQL 查询结果的类。调用类的查询方法会在第一时间查询并缓存整组结果;之后,每个子序列查询将只检索更新的部分,并将结果合并到缓存中。

如果要求该类是通用的,即不了解数据库和表,您有什么想法吗?

是否有可能,以及如何仅检索自上次查询以来的更新/新记录?

4

2 回答 2

1

MySQL(据我所知,也不是任何其他基于 SQL 的数据库)不会在任何地方存储行的“最后更新时间”或“插入时间”,至少不会在您可以查询的任何地方存储(解析二进制日志可能是不是你想做的事情)。

要获得“新记录”,您需要

  • 查询自动增量值高于最后一个已知最大值的所有记录
  • 将日期时间/时间戳添加到将存储记录的插入/更新时间的表中,并基于该时间进行查询

您可以考虑让您的代码创建自己的表,每次在另一个表上发生 UPDATE 或 INSERT 时存储一条记录,然后将触发器添加到将填充您的表的所有其他表。

但这可能有点多。

于 2010-12-23T08:50:04.907 回答
0

要么你的缓存类必须被通知所有更新,要么你需要某种过期。

唯一的其他选择是查询数据库进行检查,但是你有点失去了缓存的意义:)

上述情况适用于“通用”缓存。如果您为特定表实现专门的缓存,您可能能够利用 DML 模式。

于 2010-12-23T10:29:01.163 回答