-
11-10-2019 - |
题
我有一个服务器农场,每个服务器定期与数据库进行相同的查询。这些查询结果被缓存在共享缓存中,所有服务器均可访问。
我如何确保较新的查询不会被旧查询覆盖?例如,是否有一种方法可以以某种方式对查询进行版本处理,例如,这不会发生这种情况?如何处理并发查询?
谢谢!
编辑:DB是SQL Server。查询是一个选择语句。而且,缓存机制非常简单:简单写,没有锁定。那是因为当前无法告诉选项查询的顺序。
解决方案
一种方法是在数据库中具有全局更新计数器,要么进行更新或读取(更新更有效,但也很难正确正确)。
因此,在每次更新中,还会增加全局计数器。在每个读取上,读取全局计数器,并将数据与计数器值一起放入缓存中。仅在计数器值较大时覆盖缓存内容。
由于数据库隔离,交易应像以串行方式发生一样(假设您选择了可序列化的隔离级别)。反过来,这将意味着严格的计数器数与最新数据有关。
其他提示
缓存在哪里?是磁盘文件吗?还是数据库中的表格?
当您说较旧的查询可能会覆盖更新的查询时,这意味着什么?最新的查询(或者也许是最新的)是最新的查询吗?
您应该在执行每个查询之前锁定缓存容器,无论是文件还是表。每个服务器只能在获得锁定的情况下执行查询,否则应该等待锁定资源。这样,缓存将仅包含最新结果。
这是您要问的话吗?
不隶属于 StackOverflow