在三层中,sql叙述该怎么用更好?(200分)

星空

Unregistered / Unconfirmed
GUEST, unregistred user!
近日学习分布式多层应用系统,碰到了这么几个问题:
  1.当只能由客户端才能决定sql语句的条件时,此时sql写在中间层呢,
还是由客户端动态执行。哪一个效率更好?如果这个条件很长并且比较复杂呢?
  2.Midas是默认无状态的,当将FetchOnDemand设为false,ParketRecords>0时,
1中的sql又该写在哪更好。
  3.在客户端使用SimpleObjectBroker,进行时有意将每一个应用程序服务器关闭,
此时可以找着第二个,但如果此时,将第一个恢复运行,将第二个给关闭了,结果提示
出错,并没有找着第一个服务器。为什么?该怎样做才能让它找着已恢复工作的应用程序
服务器?
让高手们指点!
 
菜鸟回答第一个问题
客户端传送参数给中间层
由中间层合并成sql语句
在中间层执行并有方法/函数返回结果给客户端
客户端不直接执行sql语句
二,三不会回答,听课
 
问题3,捕获连接错误,错误的处理过程中关闭Dcom的连接,然后重新连接它,但是在这样写要小心
不要写成死循环。
 
怎么就没人捧场?连灌水的都没有,真是可怜!
对于问题3,当一个服务器不可用,切换另一服务器时,要等待一定的时间,如何
才能使这一时间更短?
怎么第二个问题,没人解答呢?1,3问题,还有没有其他答案?
 
补充一:xiaolinj79
如果SQL语句是查询出多个数据或记录时,在client端
其它比如修改、删除添加在SerVer端
 
俺觉得最好写在存储过程中,
中间层调用存储过程 要分为 事务 非事务两种情况考虑(节约资源)
客户端无所谓
 
所有对数据库操作的语句最好都写在应用层,不管条件多复杂,其实也没有什么区别,只要
把参数传到应用层中,都是一样处理,但这样执行效率就高了。
第二种情况,和第一种一样, 虽然设置显示范围,但你去调用应用层接口函数的时候,
把关键字段传回去(排序一下),语句中去掉这些加上传进来的 top N ,有新的问题就会
有新的思路:)
第三种情况,你那样搜索还不如重新连接一下快呢, 就像拨号一样,超过一定的时间还
连不上,就提示重新连接(Yes or No)
 
近日学习分布式多层应用系统,碰到了这么几个问题:
  1.当只能由客户端才能决定sql语句的条件时,此时sql写在中间层呢,
还是由客户端动态执行。哪一个效率更好?如果这个条件很长并且比较复杂呢?
答:所有对数据库操作的语句最好都写在客户端动态执行,不管条件多复杂,其实也没
有什么区别,只要把参数传到中间层中,都是一样处理,但这样执行效率就高了。
  2.Midas是默认无状态的,当将FetchOnDemand设为false,ParketRecords>0时,
1中的sql又该写在哪更好。
答:所有对数据库操作的语句最好都写在客户端动态执行,不管条件多复杂,其实也没
有什么区别,只要把参数传到中间层中,都是一样处理,但这样执行效率就高了。
  3.在客户端使用SimpleObjectBroker,进行时有意将每一个应用程序服务器关闭,
此时可以找着第二个,但如果此时,将第一个恢复运行,将第二个给关闭了,结果提示
出错,并没有找着第一个服务器。为什么?该怎样做才能让它找着已恢复工作的应用程序
服务器?
答:这样做没有实际价值,首先是你的逻辑不对!其次,你对中间的线程意义也搞混了!
对于中间层的价值就不能体现出来!
 
1.当只能由客户端才能决定sql语句的条件时,此时sql写在中间层呢,
还是由客户端动态执行。哪一个效率更好?如果这个条件很长并且比较复杂呢?
:
您把参数传给中间层,由中间层来组合SQL。然后中间层直接向数据库服务器请求数据。
就这样。。
 
到现在,对于sql语句该写在哪有两种答案:不是写在中间层就是写在客户端。
其中中间层的居多。从网络的传输来讲,是否可以这样认为,传递的东西越少
越好,传递几个参数比一长条sql语句更划算。但这样不就加重了中间层的负担?
因为中间层服务的客户机肯定不只一个,而且sql的条件必须经过一定的运算才
能得出时,这种负担不是更明显。矛盾!
to smallsun007:
先生能否说得更明白些。我也觉得三层应该没那么简单,可想不出为什么。
 
支持SQL放在中间层,但说不出所以,就当UP吧。
 
唉,笨人问的笨问题,高人们不屑解答?
 
1.所有与数据库打交道的都放在中间层,你在客户端调中间层接口上的方法来实现。
 
2.你可以通过ClientDataSet的CommandText来执行查询语句(select语句)
 
如果这个条件很长并且比较复杂呢?
如果这个条件很长并且比较复杂,它的实现都是一样的。三层:瘦客户端,应用服务器。
数据库服务器。瘦客户端:实现界面层。应用服务器:实现逻辑层。数据库服务器:存取
数据。您提出的问题,实际上就是如何解决逻辑运算。还是在应用层实现。
第二个问题比较菜。您实现上已经知道答案了。
第三个问题:
为什么会出现没有找着第一个服务器。
DCOM内部自身有一个生命周期的判断。它已经认为第一个应用已死掉了。所以。。。

 
to yeath:通过ClientDataSet的CommandText好象不能输参数吧?
比如:select * from aa(表名) where start_time>=:start_time and end_time<=:end_time
那着二个参数怎么设置?
 
to chrisfan:
可以的,跟在本地使用没什么分别。
 
顶部