我有一个开始大量使用的大型企业Web应用程序。最近我注意到我们正在进行许多数据库调用,例如用户权限,访问权限,配置文件信息的一般位。
从我在Azure上看到的情况看,我们每小时平均看到50,000个db查询。
我们正在使用Linq通过DevExpress XPO ORM进行查询。现在其中一些是连接,但大多数是简单的1个表查询。
持续访问数据库是获取此类信息的最佳方式吗?有没有办法让我们卸载数据库工作,因为有些信息永远不会改变?
提前致谢。
答案 0 :(得分:2)
让我们开始考虑这个问题。每小时3600秒,您每秒的操作少于20次。在任何测量中都很低。
也就是说,例如缓存用户权限,例如30秒或一分钟,没有任何问题。
通常尝试不在代码中缓存,但是IN FRONT - ASP.NET输出缓存和圆环缓存是大多数被忽略但仍然最有效的概念。
http://www.dotnettricks.com/learn/mvc/donut-caching-and-donut-hole-caching-with-aspnet-mvc-4
有更多信息。然后忽略所有大数字并运行一个分析器 - 看看你真正的重型击球手是什么(可能围绕每个页面使用的权限)。将它放入子系统并缓存它。鉴于您可以将其预加载到asp.net子系统中的用户标识对象中 - 您的代码无论如何都不应该访问页面中的数据库,因此缓存在asp.net中的某个过滤器中被隔离。
措施。确保你的SQL很聪明 - EF和LINQ导致非常愚蠢的SQL,因为人们太懒了。避免实例化完整对象只是为了扔掉它们,只要求你需要的字段。确保您的指数有效。当你开始遇到真正的问题(测量)时,请回来。
但旧规则是:早期缓存。 LINQ优化在后面还很远。
答案 1 :(得分:0)
为了从数据库获取用户特定信息(如配置文件,访问等),而不是为每个请求获取它,最好在登录时获取一次信息并保持会话。这应该减少您与数据库的交易