缓存相关数据

时间:2011-08-14 20:10:01

标签: c# sql-server caching

我有一些相关实体支持级联更新/删除(用户,用户角色,用户和角色的权限)。
应用服务器经常使用它,我需要实现对它的快速访问。为此,我将把它放到应用程序缓存中 问题是如何在对该数据执行级联操作时提供DB和缓存之间的同步?例如,如果我删除某个角色,我还需要删除所有角色权限,或者如果我删除用户,我需要删除其所有角色及其权限。
我看到了许多支持缓存中实际数据的方法,但我也看到了一些缺点。请告诉我什么是最好的解决方案。

  1. 所有级联操作都是使用触发器在数据库中进行的。应用程序通过SqlCacheDependency机制接收通知。问题:服务器重负载怎么样?是否会延迟通知,并且DB / app服务器为“select SomeField from DataTable where id = @x”提供许多确切的依赖关系会花费太多费用吗?
  2. 所有级联操作都在应用程序的业务层中进行。每次DB更新/删除操作之后都是缓存失效操作。问题:逻辑加倍和网络流量高(许多更新而不是一个)
  3. DB中的级联操作,使用CacheDependency在缓存中级联失效。问题:逻辑加倍。
  4. 什么是好的解决方案? 谢谢!

1 个答案:

答案 0 :(得分:0)

如何使用ORM?
我个人使用nHibernate,它附带caching并内置级联,所以你甚至不用担心(当然,还有很多其他功能可以让你的生活变得很多更轻松)。

否则,我绝对不会选择#1或#3选项,因为它们会将应用程序逻辑引入您的存储层 选项#2的巧妙实现 - 向数据库发送删除命令的应用程序不应该妨碍您的性能。