NHibernate最佳实践(具有大量静态数据的查询缓存)

NHibernate最佳实践(具有大量静态数据的查询缓存),nhibernate,caching,query-cache,Nhibernate,Caching,Query Cache,我们有一种情况,我们觉得我们没有充分利用NHibernate的功能,这会降低性能。对于这个问题,实际情况被简化为“带帖子的博客”示例 一个博客网站,每个用户都可以拥有自己的博客,其中包含任意数量的帖子。因此,有一个使用以下列定义的职位表: id, blog_id, post_title, post_contents 大多数博客很少更新,而少数博客则像twitter一样频繁更新。读的比写的多得多 每个博客的首页都会显示最新的5个条目 SELECT TOP 5 * FROM blog_posts

我们有一种情况,我们觉得我们没有充分利用NHibernate的功能,这会降低性能。对于这个问题,实际情况被简化为“带帖子的博客”示例

一个博客网站,每个用户都可以拥有自己的博客,其中包含任意数量的帖子。因此,有一个使用以下列定义的职位表:

id, blog_id, post_title, post_contents
大多数博客很少更新,而少数博客则像twitter一样频繁更新。读的比写的多得多

每个博客的首页都会显示最新的5个条目

SELECT TOP 5 * FROM blog_posts WHERE blog_id = ?
这将导致大量元素同时放置在二级缓存和查询缓存中

我们的问题是,由于少数博客频繁更新,读取次数超过99%的博客的缓存查询结果被破坏。


你和其他人通常如何解决这个问题?最佳做法是什么?

这是一个ASP.NET应用程序吗?对于这种类型的应用程序,在NHibernate的二级缓存之前,我将研究ASP.NET的页面输出缓存功能。

这是一个ASP.NET应用程序吗?对于这种类型的应用程序,我会在NHibernate的二级缓存之前研究ASP.NET的页面输出缓存功能。

除非在查询数据库之前知道哪些博客经常更新(“类似twitter”),否则我认为很难设计一种只缓存更新频率较低的博客的结果的方法……不幸的是,这只能在运行时确定。我在考虑在逻辑代码中有一个blog->posts的静态字典,并在添加/删除条目时简单地维护它(当然,使用适当的锁定)。但如果某一天网站将被托管在多个服务器上,这只会导致问题。除非你在查询数据库之前知道哪些博客经常更新(“类似twitter”),否则我认为很难设计一种方法来缓存更新频率较低的博客的结果……不幸的是,这只能在运行时确定。我在考虑在逻辑代码中有一个blog->posts的静态字典,并在添加/删除条目时简单地维护它(当然,使用适当的锁定)。但是,如果某一天网站将被托管在多个服务器上,这只会导致一些问题。我将对此进行调查并回复,然后再进行调查并回复