业务、应用系统最常用的就是基于数据的查询,这不同于宏观意义上的系统各个层面优化(应用端、服务端、DB端等等),基于数据的查询更多时候需要考虑数据的规模、用户的习惯、数据的变化性等因素,但同时数据查询的优化也贯穿着系统的各个层面。本文主要针对一个特定领域进行分析,以供各位参考!
基于数据的查询往往首要考虑的是缓存数据,那么缓存的前提:
1、数据不会实时变化
2、每个用户最大范围的可以共用数据集合
基于缓存的实现方案,通常需要这样的一个缓存框架来完成,OK,接下来首先来应用温老师的ADMEMS矩阵方法进行结构化的需求分析,来看看我们的关键性需求、功能以及约束影响:
|
功能 |
质量 |
约束 |
业务级需求 |
当前:管理游戏类复杂产品的数据缓存 未来:管理其他类产品的数据缓存 |
新产品上线快,发布频繁 缓存数据的关键性 |
支持DB直连和缓存切换 与关联业务系统缓存同时生效 支持缓存更新、刷新(5分钟时效) 支持缓存故障恢复 支持其他类产品缓存管理 |
用户级需求 |
手机平台 Web平台 游戏平台 |
高可用 易用性 性能:缓存查询、吞吐 |
分布式的使用要求 不同平台的差异因素 |
开发级需求 |
|
数据安全机制 可重用、可扩展 |
|
补充说明:
1、可扩展性
不同类型数据库的以插件方式接入缓存体系(Oracle、SQL Server等等)
2、可用性
数据获取重试机制、缓存刷新重试机制、缓存通知重试机制
3、性能
以最小粒度为数据缓存更新点
4、故障恢复
分布式服务器、单台WEB下线,上线,缓存数据重新拉取
废话不多说,针对以上的需求分析,现对该缓存的预设计实现方案陈述如下:
另外,考虑到Cache应用到不同的系统层面,也应一并考虑到如下的优化:
1、应用端
如果是列表类,动态变化的查询,可采用分页查询
另外根据业务需求,可将首页或查询命中率较高的页数据进行缓存
同时可配合异步查询的方式进行
2、数据库
查询优化,针对不同的查询维度,进行分区并建立合适的索引,适当时候考虑数据迁移
另外建立数据同步机制,完成读写分离
其他,待补充!
其他参考:
1、海量数据的缓存
3、大数据量分页显示