[转载红鱼儿]kbmmw 开发点滴:解决QueryService重复查询问题

简介: 做一个简单的QueryService,在跟踪过程中发现,客户端一个查询,会被触发两次。怎么会这样,这严重影响服务器性能。 客户端的代码非常简单,就是执行一个SQL,通过QueryService返回结果:   kbmMWClientQuery2.

做一个简单的QueryService,在跟踪过程中发现,客户端一个查询,会被触发两次。怎么会这样,这严重影响服务器性能。

客户端的代码非常简单,就是执行一个SQL,通过QueryService返回结果:

  kbmMWClientQuery2.Close;
  kbmMWClientQuery2.Open;

于是利用服务器端的QueryService的事件OnQueryStatement进一步检查SQL的执行情况,把SQL写到Memo中:

procedure TkbmMWQueryService3.kbmMWQueryServiceQueryStatement(Sender: TObject;
  Place: TkbmMWQueryOperationType; var NamedQueryName, Statement: string);
begin
  Form1.Memo1.Lines.Add(Format('Named Query:%s | Statement:%s',[NamedQueryName,Statement]));
end;

解决QueryService重复查询问题

用dbMonitor检查也是重复的:

解决QueryService重复查询问题

发生这个问题,是因为在服务器端的Query,需要先从数据库中查询出表的结构及查询使用的参数,然后再查询数据记录。

解决该问题的方法:

1:利用Cache制,对Metadata进行缓存,用以取代每次查询都要从数据库中先查询出结构;在服务器端及客户端都可以利用Cache.

kbmMWClientQuery2.Cached:=True;

kbmMWClientQuery2.CacheFlags:=[mwcfDontAge,mwcfDontGarbageCollect,mwcfDefsOnly];

2:设置Query的AutoFieldOnOpen:=mwafoWithData;
关于如果使用kbmMW的Cache,参见昨天写的内容。

目录
相关文章
|
数据库 关系型数据库 MySQL
清幽傲竹实现的kbmMWServer数据库联接失败重联(转载红鱼儿)
1。修改kbmMWUnidac单元的TkbmMWUNIDACConnection.InternalOpenConnection方法,加上:            //支持unidac重联           FDatabase.
962 0
|
UED Java
[转载红鱼儿]Delphi XE7 update1进步太大了
写以下的文字是怀着无比兴奋的心情写的,急于同朋友们分享XE7的进步!1.更新的bug列表并不全 通过bug修正列表及发布的消息,可以看到up1修正了很多bug,正如我所说,有些bug并没有写到发布的bug列表中,如TextPrompt不显示的问题。
875 0
|
C++ iOS开发
[2013.8.29]马甲去重复 c++源码
#include #include #include #include #include using namespace std; int main() { try { string ifile; cout ifile; cin.
578 0
|
SQL 数据库
[转载红鱼儿]kbmmw 开发点滴:kbmMWQuery插入记录
想利用TkbmMWUNIDACQuery插入一条记录,结果遇到问题,显示: 不允许从数据类型 sql_variant 到 varchar 的隐式转换。请使用 CONVERT 函数来运行此查询。这是什么问题啊?下面是出问题的代码,很常规的写法。
888 0
|
数据处理
[转载红鱼儿]kbmmw 开发点滴:kbmmW服务端事务控制
关于kbmMW的事务控制,前文已经在客户端实现,通过kbmMWClientTransaction来控制多个数据集的提交,在客户端提交多数据集,实际上,是在客户端实现业务逻辑,并通过一个事务来完成数据处理,这是违反多层架构的做法,实际项目中,需要在服务端,往往是利用多个数据集进行业务处理,并且用事务来控制,那我们该怎么办呢?换句话说,如何在服务实现事务的控制。
811 0
|
安全
[转载红鱼儿]kbmmw 开发点滴:TkbmMWLock用法
TStringList不是线程安全的,当我们在线程用到他是,要做保护。方法有两种,一种是用delphi自带的Critical,另外一种就是kbmMW为我们提供的TkbmMWLock类。 现在我们看看如何用TkbmMWLock为TStringList做线程安全: 1.
1089 0
[转载红鱼儿]kbmmw 开发点滴:kbmMWEventService的本质
在kbmMW创建服务向导中,有个“Eventoperated service”,其描述信息:同TkbmMWSimpleService一样,就是公布了一个附加的事件,来控制客户端请求,取代了ProcessRequest.
608 0
|
SQL 应用服务中间件 数据库
[转载红鱼儿]kbmmw 开发点滴:kbmMW数据集流化
kbmMW提供了QueryService,供我们在客户端象传统数据库应用一样,直接利用ClientQuery做SQL查询,以及提交,并且能够在客 户端以事务的方式提交多个数据集,应该说,QueryService为我们提供了非常好的便利,快速将两层应用转为多层应用,如果用过ASTA,就会发 现,QueryService在对两层应用的转化上,要比其实现的更完美,层次更清晰。
1008 0