1

我有一个服务器场,每台服务器都会定期对数据库进行相同的查询。这些查询结果缓存在共享缓存中,可供所有服务器访问。

如何确保较新的查询不会被较旧的查询覆盖?有没有办法以某种方式对查询进行版本控制,例如按时间,这样就不会发生这种情况?如何处理并发查询?

谢谢!

编辑: db 是 SQL Server。查询是一个选择语句。而且,缓存机制非常简单:简单的写入,没有锁定。那是因为目前没有办法告诉选择查询的顺序。

4

2 回答 2

0

一种方法是在数据库中有一个全局更新计数器,用于更新或读取(更新更有效,但也更难正确)。

因此,在每次更新时,还要增加全局计数器。在每次读取时,读取全局计数器,并将数据与计数器值一起放入缓存中。仅当计数器值较大时才覆盖缓存内容。

由于数据库隔离,事务应该看起来好像它们以串行方式发生(假设您选择了 SERIALIZABLE 隔离级别)。反过来,这意味着更高的计数器数字与更新的数据相关。

于 2010-12-17T21:48:51.560 回答
0

缓存在哪里?是磁盘文件吗?还是数据库中的表?

当您说较旧的查询可能会覆盖较新的查询时,这意味着什么?最近完成的查询(或者可能是最近开始的)不是最新的吗?

您应该在执行每个查询之前锁定缓存容器,无论是文件还是表。每个服务器只有在可以获得锁的情况下才应该执行查询,否则它应该等待锁定的资源。这样,缓存将只包含最近的结果。

这是否符合您的要求?

于 2010-12-17T21:57:57.370 回答