手机端数据缓存机制


手机端缓存的目的有:

。对于公共基础数据(如编码),避免经常性从服务器下载对资源和性能的影响
。支持离线操作:在与服务器断开的情况下,进行本地操作,数据保存在本地磁盘上,在连通后再提交

对于第1种情况,这些数据保存在磁盘上,程序启动时或者需要时加载。缓存数据的更新通过数据版本检查判定。为了简化处理,缓存数据的更新采用全量更新方式。
每种数据数据量都很小(几十K范围),需要一次性加载到内存中。这些数据用二维表表示。
此类数据很少变动.

对于第2种情况,缓存的单元为一个数据对象(如一份采集数据),通过一个目录表管理所有离线操作生成的数据。目录表结构:(应用ID,数据类型,数据文件名)。

理想的缓存机制应具有以下特性:
。可随时增加需要缓存的数据类型,而不需要编写额外的代码
。可在运行时配置:


缓存数据的性质:
.(1)与应用有关(所有用户共享),(2)与机构有关(同一机构的用户共享),(3)与用户有关(用户私有)
.数据格式
.存储:不同的数据分别存储在对应的目录下,目录结构如下;
cache(缓存主目录)
---global: 与应用相关数据
---share: 与机构相关数据
---private:与用户相关数据(每用户一个目录,用户目录下index.dat为离线操作的文件目录,data子目录保存离线操作文件)


每份数据一个单独的文件.
存储文件命名:数据类型_关联者.dat.
对于(1),可能的文件名为"1.data";
对于(2),可能的文件名为"1_10068.dat";
对于(3),可能的文件名为"1_10068_100681001.data"
.缓存只保存最新的版本

   
缓存数据类型:每种数据类型有对应的缓存方式,0-不缓存.1-应用域 2-机构域 3-用户域
数据类型定义描述,
struct data_type_t {
   short id_;
   string name_;
   unsigned long prop_; /// bit0-1:缓存方式
};

以加载任务类别为例.
函数int LoadTaskType(CQQ_ORGID orgid,vector<CTaskType*> &v)用来加载指定机构所有的任务类别.

。非缓存方式:
请求服务器

。缓存方式:
检查本地是否有缓存的任务类别编码信息:
请求服务器检查版本:本地是否是最新的码表(此操作在程序启动后仅做一次)
如版本更新,下载并保存在本地
从本地缓存数据加载:多数情况如此.


适用所有数据类型,不同性质的缓存数据的抽象方法如下:
int LoadData(unsigned short data_type,CMemTable &data,...);
data_type:指定数据类型,每种数据的缓存方式由配置决定
data:加载的数据
可变参数与缓存数据的性质有关,可能是机构ID,用户编号.

int LoadData(unsigned short data_type,CMemTable &data,...) {
  ///< 检查data_type数据类型是否需要缓存
 
  ///< 请求服务器检查版本
 
  ///< 下载并保存缓存数据
 
  ///< 从缓存的数据中加载数据到data
 
  return 0;
}

***缓存的数据存储:可以考虑采用sqlite。

需要增加协议和数据库表:
(码表)数据版本检查协议:
  。数据类型:需要检查版本的数据类型
  。一次可检查多种数据的版本
(码表)数据版本信息:
  码表数据可能存储在数据库表中,也可能存在文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值