整体把握三层结构中速度问题,请大侠指点,谢谢!(300分)

  • 主题发起人 zqs10597249
  • 开始时间
Z

zqs10597249

Unregistered / Unconfirmed
GUEST, unregistred user!
首先说说环境:后台Oracle8i,把业务封装为8个服务,
服务之间也用dcom连接(有可能中间层有互相调用的可能,
BDE连接用datadase,用session处理一个进程下的多事务)。
客户端dcom连接,一个数据模块,用了8个dcomconnection
(用了容错处理,动态读INI的IP),系统起来就把8个服务一起起来。
当数据量大时,出现以下问题,并做临时解决,请大侠指点
1、建树程序,本来采用一次性建完,数据量大或者说一个树
结点下有上千条记录时速度慢得可以,现改为逐层建树
2、原来想客户端不容许sql语句,条件过滤用filter
(当然有充分用到索引)
可是当数据量大时,第一次查询速度奇慢,先改为
传commontext把时间分配给每次操作
3、原先中间层用lookup字段进行多边关联,可是当数据库
的表关联建多了时,出现查询速度慢,现用客户段直传
sql,用等值连接或外连接进行多边关联
4、用的dbgrid当用户拖动滚动条一次性到比较后面时,数据量
大时,速度慢,现把dbgrid改为每拖动一次取一个包的量(我们
的每个clientdataset的packedrecord为20)。
现在还存在一个问题,就是系统中有导航器,当点数据集末条或者说
头条时不知道如何解决,请求方案(clientdataset.first,clientdataset
.last,绝对不行)
5、大数据统计时曾经采用多线程和存储过程统计,速度不是很理想,现才用
定期触发生成统计表(让一个专门的过程数据中间层去实现),当然客户段
提供重新统计功能,提示用户等待。
请大侠讨论并留下点评,谢谢!
 
up
导航器我都用clientdataset.RecNo
 
1.分次传送数据
2.尽量由服务器完成数据操作
 
1.如果用的是循环遍历建树,当然满啦。。这个属于算法问题。。
2.第一次查询速度奇慢 你自己不是说了么?数据量大嘛。:)
~~~~~~~~~~~~~~~~~~
3.确保你的SQL够优化。尽量使用标准SQL。
4.你用的是BDE当然是这样的,BDE并不是一次把数据全取下来的。而ADO则相反。
5.这样处理就很好啊。东西多的时候谁有办法一次都吃完?
 
to :forss,最近忙吗?thanks
2:因为我clientdataset的packedrecord为20,并不是数据量大不大的问题,
查询时用filter是把数据全部多下载到本地,是慢。
4:不管是用BDE还是ADO都不可能把数据一次把数据全取下来的,而只能一个包
一个包取,不然速度是慢的。
对于第四点请个位大侠想个方案,谢谢!
 
谈sql语句优化,请大侠继续!
 
第四点可以在beforegetrecord中解决,
zqs10597249,大侠,你的主从表更新有这样的问题出现吗?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1114846
 
谢谢maming
能详细点吗?我一般是查询完了,然后控制数据集的first和last
 
看你的要求,在这里写吧~!应该可以解决:DBNavigatorBeforeAction(....);
 
每个clientdataset的packedrecord为20
当然我查询后clientdataset只有20条,(我不用DBNavigator)
一个按钮想clientdataset。last,当然它也要一个包一个包取,这边时间还是要先花的
不然怎么定位了?
我们把dbgrid重载也是因为这个,怕用户拖动滚动条到底,
那它取数花的时间就好象死在那里。
现在想到一个方案,就是当点末条时光标到clientdataset已经有的最后,再点取下个包
然后光标到这个包的最后。
 
我的做法就是在beforegetrecord中设置screen.Cursor := crHourGlass;
在AfterGetRecords中恢复screen.Cursor := crDefault;
如果记录太多的话时间长,那也是没有办法的。同样,保存数据也一样的处理,
在beforeupdateapply.
 
如果记录太多的话时间长,那也是没有办法的。
用户提出,那你们是怎么交代呢?
 
1、建树程序,本来采用一次性建完,数据量大或者说一个树
结点下有上千条记录时速度慢得可以,现改为逐层建树
+++++++
1STCLASS : treeview
server: treeview生成后 savetofile
client: 接受file ,loadfromfile
 
to :张剑波
不是很清楚,最好能给我个小例子,谢谢!
 
建树程序,
可以在中間層生成一包,如xml包,這個包從database中生成你要的結構,傳到客戶端後再一次生成樹.
速度极佳.我已經用這種方法解決多個復雜樹結構問題.
其它幾點我認為是方法選擇問題,多層設計中要盡量減少與數據庫的交互.
 
文件传递的例子:
ID:714328
参考我的发言。
其他类似楼上的发言。

 
建树搞定,谢谢wen,张剑波两位大侠
请各位继续谈论。
 
顶部