.NET应用访问数据库之数据库的开销问题 后续篇(一)缓存的使用
2010-03-06 09:44
411 查看
上文.NET应用访问数据库之数据库的开销问题 提到数据库的访问,尤其是递归层级调用问题,应该减少往返数据库的次数,而是从数据库将所需数据一次性获取出来,然后在C#代码中处理成树形层级关系,这样会提升很大的效率。
其实递归这种东西,用在数值计算中还可以,如果是复杂处理就最好不用了,很消耗CPU和内存的,因为要使用栈存放很多内容。只是代码看起来好理解,量大、操作复杂还是转成非递归的好。
如果层级不多,变化不大,可以考虑使用缓存,效率就会更高。具体缓存的应用可以参看李天平的:系统缓存全解析 ,后面我可能也会写一两篇这方面的文章。
上一篇我们讨论的数据是全国的行政地域信息,它有固定的格式。每个行政区划的编码长度都是12位,总共分5级来管理,前两位代表31个省(直辖市),往后两位代表一般的市(州),往后两位代表市中的区(县),往后三位是街道办事处,最后三位是居民委员会(社区)。
在处理类似的树形层次结构的数据的话,其实关系型数据库不是长项,因为关系型数据库只是二维的。有两篇文章在这些方面有一些办法,大家可以参考。SQL Server 存储层级数据实现无限级分类 层次结构的数据库处理(译文)
系统中其实有很多类似的类型编码都被 放在数据库中,有的是一级的,有的是分层级关系的。就像上面的地域信息,全国的5级总共有8万左右条数据。最好的办法是一次将他们读取到服务器的内存中,形成树形层级,放在缓存中,如果有需要就直接获取返回给客户端,这样可以较少很多的数据库消耗。当然,前提是这类信息的变动很小,几乎没有变化。系统缓存全解析6:数据库缓存依赖 中介绍了,可以使用数据库依赖缓存,这样就不怕数据库内容有变化了,如果有变化,会自动更新缓存。缓存的正确使用,可以极大的提供效率。
关于数据库依赖缓存还可以参看:ASP.NET 2.0数据缓存功能简介 Asp.net数据库缓存依赖 数据库缓存依赖配置
其实递归这种东西,用在数值计算中还可以,如果是复杂处理就最好不用了,很消耗CPU和内存的,因为要使用栈存放很多内容。只是代码看起来好理解,量大、操作复杂还是转成非递归的好。
如果层级不多,变化不大,可以考虑使用缓存,效率就会更高。具体缓存的应用可以参看李天平的:系统缓存全解析 ,后面我可能也会写一两篇这方面的文章。
上一篇我们讨论的数据是全国的行政地域信息,它有固定的格式。每个行政区划的编码长度都是12位,总共分5级来管理,前两位代表31个省(直辖市),往后两位代表一般的市(州),往后两位代表市中的区(县),往后三位是街道办事处,最后三位是居民委员会(社区)。
在处理类似的树形层次结构的数据的话,其实关系型数据库不是长项,因为关系型数据库只是二维的。有两篇文章在这些方面有一些办法,大家可以参考。SQL Server 存储层级数据实现无限级分类 层次结构的数据库处理(译文)
系统中其实有很多类似的类型编码都被 放在数据库中,有的是一级的,有的是分层级关系的。就像上面的地域信息,全国的5级总共有8万左右条数据。最好的办法是一次将他们读取到服务器的内存中,形成树形层级,放在缓存中,如果有需要就直接获取返回给客户端,这样可以较少很多的数据库消耗。当然,前提是这类信息的变动很小,几乎没有变化。系统缓存全解析6:数据库缓存依赖 中介绍了,可以使用数据库依赖缓存,这样就不怕数据库内容有变化了,如果有变化,会自动更新缓存。缓存的正确使用,可以极大的提供效率。
关于数据库依赖缓存还可以参看:ASP.NET 2.0数据缓存功能简介 Asp.net数据库缓存依赖 数据库缓存依赖配置
相关文章推荐
- .NET应用访问数据库之数据库的开销问题 后续篇(二)通信量和通信次数的较量
- .NET应用访问数据库之数据库的开销问题
- 使用Spring4.3解决缓存过期后多线程并发访问数据库的问题
- 使用Spring4.3解决缓存过期后多线程并发访问数据库的问题
- .Net使用Oracle驱动访问数据库
- Odoo(OpenERP)应用实践: 使用db-filter参数实现通过域名指定访问哪个数据库
- SAE上传web应用(包括使用数据库)教程详解及问题解惑
- 使用FMDB多线程访问数据库,及database is locked的问题
- 开发随笔-处理.net 多线程访问数据库问题
- 简单处理K->V缓存失效后高并发访问导致数据库负载急剧上升的问题
- c#数据库访问返回值类型为SqlDataReader时使用using时注意的问题
- 解决使用CFileDialog造成的ADO访问相对路径下的数据库出错问题
- 项目中遇到通过使用路由策略实现主从数据库访问数据不同步的问题
- 在WEB程序中使用.NET Remoting的IpcChannel时注意事项(关于“拒绝访问”问题的解决)
- 使用FMDB多线程访问数据库,及database is locked的问题
- .net framwork 4.5.1 访问数据库出错的问题
- ]Odoo(OpenERP)应用实践: 使用db-filter参数实现通过域名指定访问哪个数据库
- 使用Database Control访问数据库问题解决了
- JavaEE 使用 Redis 数据库进行内容缓存和高访问负载
- 在.net中使用msde访问数据库