imdel模型缓存技术演进

本文介绍了一种在客户端缓存软件模型数据的方法,通过使用SQLite本地数据库减少互联网环境下的模型数据下载时间,进而缩短软件启动时间。文章详细阐述了如何自动创建与删除SQLite数据表、更新表数据以及处理涉及多个表的查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:

软件模型本来是好东西,配置性的东西都可以定义为模型,再通过统一的模型引擎解释执行,生成想要的软件,设计人员可以通过变更模型信息而不改变引擎来改变软件的结构和功能甚至界面,不过模型本身也是一个比较大的数据定义,在客户与服务模式的分布式环境下,imodel模型数据也是保存在一个数据库中,每次客户端都需要先从服务端下载模型数据,然后客户端解释翻译模型数据并动态生成软件,而模型数据的下载在互联网环境下也是需要一段不少的时间,这样就增加了软件启动时间,这个问题的解决办法是使用sqlite本地数据库来缓存模型数据,设计人员在设计好一个模型或改变一个模型后都要点击一个刷新模型命令,这个命令就是将指定的模型数据从服务端更新到本地数据库,加载的时候是加载本地模型数据库中的信息。这个实现的方法是在sqlite中建立一个如:cache_name,char(max),cache_data(binary),lastchecktime(datetime)字段,来保存需要缓存的数据。

第二步:

      第一步做的缓存,没办法使用sql查询,因为一个缓存对象就是一个表中的所有数据,接下来要做的就是根据模型中的表定义来自动创建与删除sqlite数据表与自动更新表数据,方法如下:建立一个管理表,结构如:table_name(表名),keep_second(检查间隔时间,秒)TableTimestapm,RecordTimestamp,RecordCount,lastCheck_time,最后更新时间),建立一个tableCacheManage类,提供的方法有:DataTable GetTable(string Table_name,TWhereInfo  where ,boo isForce)其中,TWhereInfo是一个查询条件对象,最后一个参数是否强制刷新,构造方法中自动加载所有定义的需要缓存的表,此getTable方法中先检查此表是否缓存,如果没缓存则根据模型中表定义自动生成建表sql并建表,同时将服务端数据全部刷回来保存到本地并返回查询数据,如果已缓存,则取缓存中的表信息(TableTimestamp,RecordTimestamp,RecorrdCount.lastchecktime,检查是否过了预定义时间,如果过了刷新时间,过了就从服务端请求此表的表结构,表记录,记录timestamp和记录个数,并与缓存中取回的值比较,不同的则从服务端刷新回需要更新的数据并更新本地缓存表,并返回给方法。

第三步:

      第二步中已完成了表缓存的目的,不过,实际上,GetTable中传递的条件中可能涉及到其他表,则也需要自动缓存相关表信息,如条件对象生成的sq:select a.filed1,b.field2,c.field3 from tableA a left join tableB b left join on a.filedid=b.fieldid left join tableC c on c.fieldid=b.fieldid  where a.field2=<condition>等等这样的条件,所以你在取表A的数据时,你必须取表B,C数据,但取表BC数据前你必须判断相关BC表的数据是否为最新的,则可能有了如下语句: select a.filed1,b.field2,c.field3 from tableA a left join tableB b left join on a.filedid=b.fieldid left join tableC c on c.fieldid=b.fieldid   where  a.timestampField>localAtimestamp or b.timestampField>localBTimestamp or c.timestamp>localCTimestamp 这样就可以完成数据的取回了。

第四步:

    第三步,还有一些问题,如果在模型中定义了字段是自定义sql字段,这事就更复杂了,不过解决办法还是有的,明天写,累了,睡觉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值