2

我继承了一个系统,其中不太可能更改的 SQL RDBMS 中的数据缓存在 Web 服务器上。

这是一个好主意吗?我理解它的逻辑——我不需要在每次请求时都在数据库中查询这些数据,因为它不会改变,所以只需将它保存在内存中并保存数据库调用。但是,我不禁认为这并没有真正给我任何东西。SQL是基本的。例如:

SELECT StatusId, StatusName FROM Status WHERE Active = 1

这给了我不到 10 条记录。我的数据库与我的 Web 服务器位于同一个数据中心。现代数据库旨在存储和调用数据。我的应用程序缓存真的比数据库调用更有效吗?

当我有一个服务器场并且必须想出一种方法来保持服​​务器之间的缓存同步时,问题就出现了。也许我低估了数据库调用的成本。将数据保存在内存中所获得的性能优势是否值得在数据发生变化时保持每个服务器的缓存同步的复杂性?

4

2 回答 2

3

缓存的好处与您需要缓存项目的次数和获取缓存项目的成本有关。您的状态表,即使只有 10 行长,但如果您每次都必须运行查询,那么获取该表可能是“昂贵的”:如果需要,建立连接,执行查询,通过网络传递数据等。如果使用得足够频繁, 好处可以加起来并且是显着的。比如说,您需要每秒检查某个状态 1000 次或每个网站请求,您已经保存了 1000 个查询,并且您的数据库可以做一些更有用的事情,并且您的网络没有充斥着喋喋不休。对于您的 Web 服务器,从缓存中检索项目的成本通常是最低的(除非您正在缓存数万或数十万个项目)。因此,从缓存中提取某些内容将比几乎每次都查询数据库要快。

但底线是,如果不运行基准测试或了解您如何使用数据的详细信息,就很难说是或否。我只是强调了一些需要考虑的事情。

于 2013-06-18T21:44:07.157 回答
1

还有其他因素可能会发挥作用,例如使用 EF 可以为简单的数据检索添加大量额外的处理。请求的数量,而不仅仅是数据量可能是一个因素。

未来的设计可能会影响您的决定——也许缓存被移到别处并且不再位于同一位置。

你的问题没有正确答案。在你的情况下,也许没有优势。尽管使用缓存已经有一个缺点 - 您必须更改现有代码。

于 2013-06-18T21:44:00.737 回答