我们使用PostgreSQL数据库和AppFabric Server,运行一个繁忙的ASP.NET MVC电子商务网站。如何避免使用缓存存储模式的数据库查询风暴
继缓存存储模式之后,我们从缓存中请求数据,如果它不可用,我们查询数据库。
此方法导致'查询风暴',其中数据库在短时间内接收到同一数据的多个查询,而缓存中的给定对象正在刷新。这个问题由于长时间运行的查询而加剧,并且显然对相同数据的多个请求可能导致查询运行更长时间,形成令人不快的反馈循环。
解决此问题的一个办法是对缓存使用读取锁定。但是,如果发生数据库查询,则Web服务器在无故读取时被阻塞,这本身可能会导致Web场环境(甚至是单个繁忙的Web服务器)中的性能问题。
另一种解决方案是放弃缓存旁置模式并独立地对缓存进行种子处理。这是我们采取的方法来缓解我们在这个问题上看到的即时问题,但是对于所有数据来说这是不可能的。
我在这里错过了什么吗?人们采取了哪些其他方法来避免这种行为?