如何布局应用服务器?(200分)

  • 主题发起人 主题发起人 rily
  • 开始时间 开始时间
R

rily

Unregistered / Unconfirmed
GUEST, unregistred user!
现我要设计三层结构,基于corba。请问如何在中间层需要放置TQuery,TDataSetProvider控件:一张表对应一个TQuery呢
还是只需要放置一个TQuery?如果是放置一个或少数几个,那数据的存取如何操作?谁能详细告诉我?
分数不是问题,如果能的到满意的答案,由你开价!最好能有示例。
 
哈哈,这问题我也在思考,但你一提到CORBA,可能很多人就要退缩了。我想,这跟你客户端
使用的线程方式相关,如果你的客户端是单线程的程序,而且是单文档界面(SDI)的,那
么应用服务器端就只需要放一个TQuery即可,这种客户端是我们大多数程序通常采用的方式。
如果客户端采用多线程访问数据库,客户端可能就需要使用多个TClientDataSet,服务器端
么……这就是我还没完全搞清楚的地方,首先,应用服务器中的数据对象是不可能为每个客
户端线程建立一个直接通往数据库的连接的,它只会使用自己的数据库连接池和线程池来
服务客户端(或应用服务器中的业务逻辑对象)。为了性能考虑,应用服务器中的数据对象
可能会针对不同的数据表打开不同的数据集(TQuery、TTable等),但对于一些有数百个表的
复杂系统来说,为每一个表打开一个数据集似乎也不太现实。
 
corba没有作过,比SOCKETCONNECTION方式的三层结构要好吗?
 
我觉得一张表对应一个Query比较好,直接用clientdataset存取,
 
针对这个问题,近日我又做了一下试验,在COM+中,以一个Transactional DataModule项目
为例,它采用STA线程模型为例(在COM中STA线程模型类似CORBA中的Thread-Per-Client线
程模型),应用服务器会为每个客户端进程建立一个线程为之服务,每个线程中会建立一个
数据模块的实例,不同客户端访问到的TDatabase, TQuery等数据控件都是有独立的,而不是
共用的。如果客户端进程是以多线程方式调用应用服务器的,在STA线程模型下客户端里的各
个线程也只能被排队处理,所以,应用服务器端是可以只用一个TQuery来存取数据就够了,
即使你打开了多个TQuery,在同一时刻内也只有一个TQuery是工作的。如果在你的组件的方法
(Method)中,需要同时打开多个表,那倒是需要为使用每个表而使用一个TQuery,所以我
认为在应用服务器的数据模块中,只需要放置数量为最大需要同时访问数据表的数据的TQuery
就可以了。 (在此我们就不谈MTA线程模式了,它需要程序员为线程的同步做很多工作)
 
对需要保存得基本数据表使用一一对应,对其他得数据使用接口获取数据,如果数据量大,进行压缩传输。接口可使用动态创建query得方式,
我现在想使用接口保存数据就是直接将delat(量大压缩)传到server保存。这个没有实现,谁有类似得东西啊,我参考一下。
 
后退
顶部