【发布时间】:2010-06-28 13:38:14
【问题描述】:
我们有一种情况,我们觉得我们没有充分利用 NHibernate 的功能,这会降低性能。对于这个问题,实际情况简化为“有帖子的博客”示例。
一个博客站点,每个用户都可以拥有自己的博客,其中包含任意数量的帖子。因此,有一个用以下列定义的帖子表:
id, blog_id, post_title, post_contents
大多数博客很少更新,而少数是“类似推特”且经常更新的博客。读比写多。
每个博客的首页显示最新的 5 个条目。
SELECT TOP 5 * FROM blog_posts WHERE blog_id = ?
这将导致许多元素同时被放置在二级缓存和查询缓存中。
我们的问题是,99% 以上的博客的缓存查询结果被破坏了,因为很少有博客被频繁更新。
其他人通常如何解决这个问题?最佳做法是什么?
【问题讨论】:
-
除非您在查询数据库之前知道哪些博客更新频繁(“类似推特”),否则我认为很难设计一种方法来仅缓存更新频率较低的博客的结果。 ..
-
不幸的是,这只能在运行时确定。我正在考虑在逻辑代码中拥有一个博客->帖子的静态字典,并在添加/删除条目时简单地维护它(当然,使用适当的锁定)。但是,如果有朝一日该网站将托管在多台服务器上,这只会导致问题。
标签: nhibernate caching query-cache