三层应用中,SQL的迷惑问题:如果多个CLIENT同时请求时,将会怎样?(50分)

Y

yclyc

Unregistered / Unconfirmed
GUEST, unregistred user!
有表TMP1,TMP2,TMP3。
通过多个SQL语句将数据由TMP1,TMP2进行中间分类汇总等,把最终结果放在TMP3中,最后给予CLIENT。
问题:
如果多个CLIENT同时请求时,将会怎样?
 
Server会按照收到请求的先后来处理,
但至于"迟到"的Client能否打开TMP1
和TMP2以及TMP3则要看你的Client是
怎样打开和处理它们的了.
 
那是 BORLAND 的问题,SERVER 对类似的冲突应该可以轻松检测到并处理的,
不管我们的事!如果这个也搞不定,BORLAND 也该回去烧碗汤喝了,
 
好象是每启动一个client就会初始化一个Server Handle
 
这个问题可以使用存储过程来解决,经过多次
对数据库的处理然后将结果存入数据表里。
这样的操作存储过程最拿手。
如果你使用Paradox或者是DBase那就象刚才那两位大侠的
答案了。
 
i think it's not a problem, because every client will get their own
remote data module instance. if u revoke the method simultaneously
in the same client, it'll be get into mass.
 
No Problem!
 
让borlanc来处理
 
其实,这完全依赖于你在设计APPLICATION SERVER时选择的THREAD MODE。
在缺省状态下,当一个客户端连接时(Such as TDComConnection),AppServer就建立一个线程(内容就是你建立的Remote Data Module)。所以无论多少个客户端连接,只要你的NT挺的住线程的开销,应该没有问题。
 
yjc说的对,应该让线程控制更好些.而且要将database的autosesion属性摄制成
TRUE.
 
aWant的意见是正确的!如果出现冲突,可以通过异常检测到!
 
使用临界区,确保同时只有一个CLIENT访问。
 
They statement is correct.
 
按照colinyan或cbx的方法做可以解决并发冲突问题。
 
另外需要考虑的问题是,如果分类汇总的时间比较长,那么其他客户试图汇总时应该
明确地触发一个自定义的异常来表明当前正被其他用户汇总中。
另外,这个问题属于业务问题与Borland应该无关。
 

SELECT C1, C2, C3 ... FROM TMP1
UNION
SELECT C1, C2, C3 ... FROM TMP2
UNION
SELECT C1, C2, C3 ... FROM TMP3
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
941
DelphiTeacher的专栏
D
顶部