.NET应用访问数据库之数据库的开销问题 后续篇(一)缓存的使用
2010-03-06 09:44 Virus-BeautyCode 阅读(2170) 评论(2) 编辑 收藏 举报上文.NET应用访问数据库之数据库的开销问题 提到数据库的访问,尤其是递归层级调用问题,应该减少往返数据库的次数,而是从数据库将所需数据一次性获取出来,然后在C#代码中处理成树形层级关系,这样会提升很大的效率。
其实递归这种东西,用在数值计算中还可以,如果是复杂处理就最好不用了,很消耗CPU和内存的,因为要使用栈存放很多内容。只是代码看起来好理解,量大、操作复杂还是转成非递归的好。
如果层级不多,变化不大,可以考虑使用缓存,效率就会更高。具体缓存的应用可以参看李天平的:系统缓存全解析 ,后面我可能也会写一两篇这方面的文章。
上一篇我们讨论的数据是全国的行政地域信息,它有固定的格式。每个行政区划的编码长度都是12位,总共分5级来管理,前两位代表31个省(直辖市),往后两位代表一般的市(州),往后两位代表市中的区(县),往后三位是街道办事处,最后三位是居民委员会(社区)。
在处理类似的树形层次结构的数据的话,其实关系型数据库不是长项,因为关系型数据库只是二维的。有两篇文章在这些方面有一些办法,大家可以参考。SQL Server 存储层级数据实现无限级分类 层次结构的数据库处理(译文)
系统中其实有很多类似的类型编码都被 放在数据库中,有的是一级的,有的是分层级关系的。就像上面的地域信息,全国的5级总共有8万左右条数据。最好的办法是一次将他们读取到服务器的内存中,形成树形层级,放在缓存中,如果有需要就直接获取返回给客户端,这样可以较少很多的数据库消耗。当然,前提是这类信息的变动很小,几乎没有变化。系统缓存全解析6:数据库缓存依赖 中介绍了,可以使用数据库依赖缓存,这样就不怕数据库内容有变化了,如果有变化,会自动更新缓存。缓存的正确使用,可以极大的提供效率。
关于数据库依赖缓存还可以参看:ASP.NET 2.0数据缓存功能简介 Asp.net数据库缓存依赖 数据库缓存依赖配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2009-03-06 基于AD的用户组织目录树选择工具的解决方案
2008-03-06 输入字符串按照单词逆序输出