起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1270|回复: 22

关于数据表缓存问题 **

[复制链接]
发表于 2006-3-22 20:25:05 | 显示全部楼层 |阅读模式
在速度优化专题里面(http://bbs.justep.com/forum.php? ... ight=usecache):
   提到了数据表缓存问题。
   因为烟草公司基本信息表(comp_base_info)基本上录入之后不怎么变动。所以我把该表的‘usecache’选中,cachekey没有填写。数据集的SQL里面有个限制:comp_base_info.片区编码 like 业务参数 or comp_base_info.片区编码 is null。
   结果,不论业务参数为何值,功能运行时候只出现comp_base_info.片区编码 is null的记录,而comp_base_info.片区编码 like 业务参数的记录都不出来。
   将该表的‘usecache’选中勾去掉,功能和记录都很正常,即comp_base_info.片区编码 like 业务参数有效果。
   把表的‘usecache’选中,cachekey填写该表主键,一样只出现片区编码为null的记录。
---------------------------------------------------------------------------------
  下面是该帖子的原话  
  可以把访问过的表数据缓存在本地,下一次访问这批数据时,就可以不与服务器交互,但是,服务器上的数据可能被其他的客户端更新,所以在服务端数据被更新后,缓存中的数据也要更新,如果不设置CacheKey,则客户端会作废缓存中的全部数据,从服务顺重新取数据,又造成较大的网络流量,这时如果利用Cachekey,服务端就能够自动把客户端缓存过的数据的CacheKey记入日志文件,当感知到客户端数据的改动时,可以根据CacheKey所定义的关键字,只把改动过的数据发往客户端,刷新客户端的缓存,提高数据访问的效率。
  ---------------------------------
   现在是:我服务器端望烟草公司基本信息表里面添加多条记录。客户端更本感觉不到我服务器上数据刷新了;除非我把其中某些记录的comp_base_info.片区编码人为的设置为null;客户端才可以感知这些片区编码为空的记录,从这个方面看,客户端又能感知服务器端的变化。
  真是搞不明白?要命的是这是个全局性的问题,我一下子把所有类似的表的usecache都选中了,结果只要有sql限制条件(含业务参数)都出问题。请尽快给于答复或者电话联系。
回复

使用道具 举报

 楼主| 发表于 2006-3-23 08:55:24 | 显示全部楼层

加急

自己顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-23 09:16:05 | 显示全部楼层

麻烦大了

经过仔细测试,发现用comp_base_info.片区编码 = 业务参数是可出效果的。
那么就证实comp_base_info.片区编码 like 业务参数 在数据表缓存中不可用,即不支持like。
若真是这样,那么麻烦大了。因为我涉及数据过滤的都只能用like语句。
回复 支持 反对

使用道具 举报

发表于 2006-3-23 09:19:49 | 显示全部楼层
请问题 你“业务参数”赋的是什么值?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-23 09:23:36 | 显示全部楼层

业务参数赋值

1最开始(无数据表缓存):业务参数 = '1001%' ; sql语句  片区编码 like 业务参数   记录结果出来;
2后来(有数据表缓存):业务参数 = '1001%' ; sql语句  片区编码 like 业务参数   记录结果不出来;
3能出结果的是(有数据表缓存):业务参数 = '100101' ;sql语句  片区编码 =  业务参数  记录结果出来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-23 09:25:05 | 显示全部楼层

目前要采用的是第2种

希望的是:
  2后来(有数据表缓存):业务参数 = '1001%' ; sql语句  片区编码 like 业务参数   记录结果要出来才是真正的需求。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-23 09:29:44 | 显示全部楼层

需要附加说明的是

数据表缓存确实对速度优化有非常高的效果,但如果因为不能用like语句而放弃速度怎么也说不过去。
回复 支持 反对

使用道具 举报

发表于 2006-3-23 09:36:30 | 显示全部楼层
我们的本地数据缓存机制:
  在客户端本地有一个数据引擎SQLLIT,这个是一个桌面数据库,支持的功能较弱,usecache 选项使用的就是这种机制。
  楼主出现的这个问题原因是,SQLLIT不支持LIKE % 的语句,即这个桌面数据库不支持模糊查找导致的。
    建议一般不要使用 usecache 选项  。
  解决方法,先去掉  usecache 选项 。
回复 支持 反对

使用道具 举报

发表于 2006-3-23 09:42:18 | 显示全部楼层
请问:
  comp_base_info.片区编码 = 业务参数  条件,你是加在 查找数据集的SQL部分,还是“过虑”部分?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-23 09:42:57 | 显示全部楼层

不会吧

请无论如何都要加上这个支持。因为不用数据表缓存,绝大部分功能界面和数据出来都要等上20-30S甚至长达1-2分钟(同一功能里数据集很多)左右,但如果有缓存的话5-6S就可以了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 01:40 , Processed in 0.041074 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表