RIA 富客户端数据加载原则 - 缓存原则
来源:互联网 发布:mac os x lion 编辑:程序博客网 时间:2024/06/08 19:46
Silverlight/WCF架构下,数据的缓存/服务器的访问/逻辑的安置原则
给team member做的ppt,这里直接复制过来。
数据缓存原则
为什么要缓存?
**缓存不是必需的**
加快程序执行速度
减轻数据库压力
减少等待时间
减少网络占用
总之,缓存是一种用空间(甚至是分布式的空间占用)换取时间(性能)的做法
缓存有什么风险?有何坏处?
数据一致性问题(不统一)
占用额外的内存/磁盘
增加代码复杂度(需要加载/同步/甚至按需决定读取缓存还是数据库)
最大的问题就是数据一致性问题,这也是是否使用缓存的最最主要决定因素
如何规避风险?
构建完善的(可接受的)数据同步机制
根据数据的实时性/一致性/安全性要求以及数据量的实际情况,为缓存分级别,或决定是否使用缓存
缓存分哪些类别?
个人划分了以下级别:
数据库级别(严格上说,不属于缓存,但可以起到类似作用)
内存数据库(数据库提供同步机制,对开发人员透明,需要DBA设置)
数据分区(将常用数据分区并放到快速磁盘上,如SSD,提高IO速度)
应用服务器级别
服务器/框架提供的缓存,如http缓存,EF提供的查询结果的缓存
需要编码实现的,如ASP.NET的Cache对象,如PDL(数据持久层)
客户端磁盘级别
针对富客户端或桌面应用,将数据存在本地磁盘上,每次优先加载缓存数据
客户端内存级别
从服务器获取数据后放在内存中,在程序运行周期内使用
创建缓存有哪些机制?
应用程序启动时加载全部数据
程序启动速度降低
整体性能最好,开发难度最低
占用内存最大
第一次使用时,加载全部数据
减少不必要的内容占用
性能比第一种略差,但程序启动时间短
开发难度略高
使用时,加载所需数据并缓存
开发难度大,不建议使用
需要额外的检查/合并机制
性能不见得好于第一次使用时全部加载
更新缓存的机制有哪些?
程序重新启动/部署时更新
设定标志位更新
添加时间戳,定时更新
添加时间戳,每次调用延长时间戳,超时后更新(调用延迟更新)
每次更新(这不叫缓存,但项目中,确实有这么干的)
如何界定使用何种缓存?
界定使用何种缓存,包括使用的缓存种类,构建机制和更新机制
高实时性,要求绝对统一的数据
不缓存,或做数据库级别的内存数据库/快速磁盘分区
较少变化的数据,且对业务影响不大
服务器/客户端,全部/第一次使用加载,调用延迟更新,并设定时间戳强制定时更新
几乎不变化的数据
客户端磁盘缓存,重新部署后更新/设定标志位通知更新
数据量大,被使用的地方有限,实时性要求不高
客户端内存第一次使用时加载,客户端程序重新启动时更新。
定义一个缓存机制:
服务器/客户端缓存类型加载方式更新机制
当制定了一个缓存机制之后,反问一下自己:
它提高程序的性能了吗?
耗费的内存/开发时间值得吗?
它会影响数据的完整性/可靠性吗?(业务上能接受吗?)
它会给开发/测试/support带来新的问题吗?
需要为性能/Cost/实时性找出一个平衡点。
- RIA 富客户端数据加载原则 - 缓存原则
- 富文本框使用原则
- RichClient/RIA原则与实践
- 什么是 富客户端互联网应用程序 RIA
- 从“富客户端”(RIA)说到 Flex AIR
- DWZ富客户端框架(jQuery RIA framework)
- Flex PHP RIA 富客户端调试技巧
- 几款Web富客户端(RIA)框架
- RichClient/RIA原则与实践(上)
- RichClient/RIA原则与实践(上)
- RichClient/RIA原则与实践(下)
- 开闭原则---图片缓存
- 原则
- 原则
- 原则
- 原则
- 原则
- 富Web应用开发的七大原则
- Struts2 中UI标签中id与 name属性的关系
- Android中使用CountDownLatch并发多线程操作
- 下载并安装Memcache服务器端
- Hibernate Note
- Android学习笔记 : 获取锁屏的通知 通过contentProvider获取数据库更新事件
- RIA 富客户端数据加载原则 - 缓存原则
- Zstack杂乱笔记3
- ubuntu C开发环境搭建
- FPGA_ALTERA_PIN
- Android 拨打电话事例
- linux系统内核UDP丢包原因分析
- 图形图像处理之——实现图形图像之子区域提取2
- 看漏了眼, 有一个VM叫Maxine,它也自带了一个调试器
- adb 常用命令