【问题标题】:NHibernate Azure AppFabric CacheNHibernate Azure AppFabric 缓存
【发布时间】:2011-08-17 06:49:04
【问题描述】:
有人尝试过针对 Azure AppFabric 缓存使用 NHibernate Velocity L2 缓存提供程序吗?如果有,你发现了什么?
顺便说一句,我们使用 SQL Azure 来存储我们的数据。
【问题讨论】:
标签:
nhibernate
azure
azure-sql-database
second-level-cache
azure-appfabric
【解决方案2】:
我们的缓存用例如下:
- 我们希望通过缓存经常访问的 SQL Azure 数据来加速我们的 Web 应用程序。
- 应该通过简单地编辑 NHibernate 配置来启用缓存(就像任何其他 NHibernate L2 缓存一样)。
- 当对 Azure 角色实例上的这些实体之一进行更新时,更改应立即传播到其他 Azure 实例。
- 我们希望避免设置和管理 memcached 之类的麻烦。
很遗憾,Azure AppFabric 缓存的当前状态不适合我们的需求。原因如下:
在调整 NHibernate Velocity 提供程序后,我们能够在分布式缓存中缓存对象,但在访问每个实体时会有一小段延迟(约 1 秒)。因为我们试图访问每个 Web 请求的数百个缓存对象,所以每个 HTTP 请求实际上比我们直接访问数据库要慢——当然不是我们想要的。
我们尝试通过启用 AppFabric 本地缓存来解决此问题。性能得到了极大的改善,但这又引发了另一个问题。一旦对象存储在本地缓存中,它将一直保留在那里直到过期(您可以为缓存设置过期时间跨度)。在这一点上,AppFabric 本地缓存和 NHibernate SysCache 提供程序(使用 ASP.NET 缓存)之间没有太大区别,只是您必须为 AppFabric 缓存支付额外费用。
如果 Azure AppFabric 本地缓存支持像 Windows Server AppFabric cousin 这样的通知,我们会很乐意使用 Azure 缓存。请vote for this feature at www.mygreatwindowsazureidea.com。
Azure 论坛上的同事 posted a question 关于 AppFabric 本地缓存的使用作为参考。
如果有人发现 MS 在 Azure 上启用了本地缓存通知,请发布我原来的问题的答案。