三层到底实用不实用???(200分)

C

com2

Unregistered / Unconfirmed
GUEST, unregistred user!

我们开发了一个三层mis系统(Delphi+oracle+corba),
感觉其优点有客户端不用装Oracle,bde,安装较简单等,但缺点实在不少:
1。 工作量增大.
因为服务端,客户端都需要写,且服务端一改,客户端也要改,较容易出错。
且不太有利于团队开发。
2。 速度慢.
在未学三层以前想想三层应该比两层慢一倍,因为数据毕竟多传了一层。
学了corba三层后发现实际上数度不止慢一倍,因为客户端的ClientDataset
要把数据全取到客户端来。而两层的Table和query是用户需要看到多少才从
数据库服务器取多少,从而减少了网上数据传输。 而clientDataset的
packetrecords属性也只有在ClientDataset的filtered设为为False才有用。
所以ClientDataset的filter要尽量不用,而采用传动态Sql的形式。即使这
样速度仍不理想,且增加了工作量。
且若客户端和服务端不在同一子网时,corba的连接尤其慢!!!数据传
输也慢了,而两层客户端和数据库服务器不在同一子网时速度影响不大。
3。 不稳定
我的服务器是惠普LH4,内存512M,应该还可以了。但客户端连接较多(100个)
时,新的客户端再连接时几乎就无反应,因为服务端负荷太重,来不及去相应新连
接客户端的请求。严重时服务端程序就意外退出了。有时就十几个客户端连接也会
发生上述情况。
Delphi4对意外中断的客户端连接的实例不能清除,从而浪费了资源。Delphi5
要好的多。
我想一个Mis系统最基本的要求是速度快,稳定性好,但这两点三层都比两层差很多。
个人建议:
1.三层思想是好的,但目前不成熟。
2.大家不要忘了对三层的研究,但真正的开发目前还是别用三层,因为自今为止好
像还未听过国内有较成熟的三层产品出现(可能是我孤陋寡闻)。
大家有谁作过三层系统,能不能谈一点心得,关键是如何加快速度和稳定性。
我想这个问题都是作数据库的程序员很关心的,欢迎大家讨论。
我的Email: com2.126.com
 
>>1。 工作量增大.
>> 因为服务端,客户端都需要写,且服务端一改,客户端也要改,较容易出错。
>>且不太有利于团队开发。
这是三层吗? 你自己三层没规划好. 多层的优势就是瘦客户, 客户端应该考虑
的只是如何与中间层连接, 至于具体访问什么数据客户端根本不用操心,
如果和中间层的访问接口规划得好的话, 数据库服务器改变只需要修改中
间层就可以了.
我倒觉得多层结构更利于团队开发, 各个部分只需要事先定义好和上层之
间的连接接口, 模块划分更清晰, 更利于分工合作.
>>学了corba三层后发现实际上数度不止慢一倍,因为客户端的ClientDataset
>>要把数据全取到客户端来。而两层的Table和query是用户需要看到多少才从
>>数据库服务器取多少,从而减少了网上数据传输。
还是你中间层没规划好. 做三层并不是把TTable换成TClientDataSet就完事
了. 那还需要中间层干吗? 这样的话中间层和一跟网线的功能有什么分别?
设计三层你得把思路转变过来. 设计client时别老想着数据库中某某字段是
什么,那是中间层的事. 应当在开发client时认为你的中间层就是你能且只能
访问的server, 至于后边是什么东西根本不是你client该考虑的.
 
三層沒有想像的那麼簡單, 很容易偏離真正三層的結構.
 
是的,三層沒有想像的那麼簡單,所以能不用3层的还是不要用3层的,
免得画虎不成反......
 
看应用而定.当然我也喜欢简单的东西.
 
agree all.
 
你划分三层的目的不明确!1哈哈
现在还是不要用!1
等你有需要时 方能很好的用它!!
"有用就是会用"!!!!!
 
Another_eYes,不愧是高手,到底真样才是真正的三层,能不能说清除一点,
如何实现,是不是不用什么Corba,dcom, 而成了Socket编程,真正的三层
是不是不用Clientdataset控件,那编程难度是不是太大了。为什么我的国
内还没有较成熟的三层产品出现?望赐教!!!
myEmail:com2@126.com
 
谁说三层无用。我则才和广州的朋友连上了我的服务器,通过Internet的IP,
速度一点都不慢。还可以Chart,我感到要是没有三层,那是不可想像的。
用三层,要完全走出C/S的局限。
关键是设计上要下功夫。
1、不要使用无条件的SQL语句。Select * from table这样的语句可以让你的服
务器死机,我的做法是先写一个方法,把客端的数据请求送到服务器,服务器初始
化好SQL的条件参数。然后,客户端才Open.这虽然麻烦一点,但是,得到了速度优势。
2、尽可能把资料在服务器上处理完,把结果送给客户端,不要从服务器取来数据
到客户端处理。比如,我想得到一个用户的菜单权限,我只传用户号到服务器,服务
器经查询,处理,最后用参数返回结果,根本不使用任何数据元件来处理。
3、多定义一些自己的方法。用方法来处理客户请求。只有不得不使用数据表连接
时才用ClientDataset.
4、对于功能性的东西,比如一些“过帐”处理,根本不要搬到客户端处理,客户
端只需要送出要处理的关键字给服务器,所有的处理要在服务器上完成,完成的结果
才提示给客户端。
5、功能划分上要分清。客户端是操作员与机器的对话界面,服务器是实现对话结果
的途径。
几点愚见,仅供参考,我是有信心的。
 
最简单的理解:
你可以认为TClientDataSet是一个封装了各种低层通讯的TClientSocket +
扩展了的StringGrid.
 
guojun兄:
如果客户端要浏览大量记录怎么办,如物资库存查询有上万条记录。
如我有一个LoopUp字段的所对应的表很大需要全取到客户端,怎么办?
如何提高速度,客户端和服务端不在同一子网时如何加快corba的连接,
您有Email吗,有空向您请教?
 
千中元, 对此问题,您可以:
偷偷地听
 
to com2
你是在前端Loop还是用主细表在服务器上Loop?
我用多表联合的方法是在服务器上做的,前端用的是TDataSet Field类型包含
服务器上的记录的。一时讲不太清楚,我在http://guojun.163.net写了一段,
你看看是否有用。
corba没玩过,我只用TCP/IP。所以不敢多说。
 
三层结构的优势在于比较大型的应用。国内已经有很多大软件商使用或准备
使用该技术。例如我知道的金碟财务软件就用了三层。
Guojun朋友说的对,开发三层的基本思想是要把大量的工作放到服务器端做。
如果要取大量的数据,可以用PacketRecord属性减少每次的数据传输。而且
注意只用自己需要的字段,避免象select * from 这样的语句。
 
// 如果客户端要浏览大量记录怎么办,如物资库存查询有上万条记录。
客户不可能一次看几万条记录的,
按需要取数据嘛
Corba没用过,
我用Socket ,感觉还速度可以!
又:同意Another_eYes
三层程序(其实所有程序都一样),重点在规划
 
即使用户要看一万条数据,但是不可能每条数据都带上几十个字段。
应该先给它一个检索表,一般只有两三个字段,比如,材料编码,名称
当他需要详细看时,才取出一个具体的记录来给它。注意,是只取一个
他要看的记录详细内容给他。
这样,用户在检索时,虽然有一万条记录,但由于字段不多,我想在
速度上也许可以接受。而在服务器上打开也不需要费很长时间。
当他需要查询详细资料时,由于只打开一条(或一系列,但只属于一
个主键的)记录,应该是相当快的。

另外,我想起我在用DBase时,那还是FoxBase,为了解决用户在浏览
大量数据速度慢的问题。我是在一个屏幕上放两个内容,左边是一个索引
列表,右边是详细资料。用户在左边用光标键移动记录,右边显示详细内
容。当用户在左边快速地移动时,右边基本是不做动作的。只有用户在左
边的移动的动作停下来之后,右边才刷新。这样,左边只用小量字段对付
大量记录,右边则用小量记录对付大量字段。我想,这种方法也可能用于
现在的程序。

开拓思维。万事都有解决方法。但我说的也不一定对你有用。个人见解。
 
Another_eYes is right.
事实上,你三层的功能都没定义好,各层只关注自己的工作.服务层负责对数据的存取,筛选,中间层负责对数据的过滤,对命令的递交,而客户端只需考虑与中间层的连接即可.重要的事中间层的访问接口.
三层是有点困难的,但用好了确实非常好的,特别是对中大型系统.
 
三层实用不实用且先不说,但使用三层体系(严格说是使用分布式组件对象)使编网络通讯应用大大简单化,再也不必用麻烦的SOCKET编程了。
 
顶部